Skip to main content

Circle CICode style: blackcodecov

gns3fy

Python wrapper around GNS3 Server API.

Its main objective is to interact with the GNS3 server in a programatic way, so it can be integrated with the likes of Ansible, docker and scripts.

Documentation

Check out the Documentation to explore use cases, and the API Reference

Install

pip install gns3fy

Development version

Use poetry to install the package when cloning it.

How it works

You can start the library and use the Gns3Connector object and the Project object.

For example:

import gns3fy

# Define the server object to establish the connection
gns3_server = gns3fy.Gns3Connector("http://<server address>:3080")

# Define the lab you want to load and assign the server connector
lab = gns3fy.Project(name="API_TEST", connector=gns3_server)

# Retrieve its information and display
lab.get()

print(lab)
# Project(project_id='4b21dfb3-675a-4efa-8613-2f7fb32e76fe', name='API_TEST', status='opened', ...

# Access the project attributes
print(f"Name: {lab.name} -- Status: {lab.status} -- Is auto_closed?: {lab.auto_close}")
# Name: API_TEST -- Status: closed -- Is auto_closed?: False

# Open the project
lab.open()
print(lab.status)
# opened

# Verify the stats
print(lab.stats)
# {'drawings': 0, 'links': 4, 'nodes': 6, 'snapshots': 0}

# List the names and status of all the nodes in the project
for node in lab.nodes:
    print(f"Node: {node.name} -- Node Type: {node.node_type} -- Status: {node.status}")
# Node: Ethernetswitch-1 -- Node Type: ethernet_switch -- Status: started
# ...

Take a look at the API documentation for complete information about the attributes retrieved.

Usage of Node and Link objects

You have access to the Node and Link objects as well, this gives you the ability to start, stop, suspend the individual element in a GNS3 project.

from gns3fy import Node, Link, Gns3Connector

PROJECT_ID = "<some project id>"
server = Gns3Connector("http://<server address>:3080")

alpine1 = Node(project_id=PROJECT_ID, name="alpine-1", connector=server)

alpine1.get()
print(alpine1)
# Node(name='alpine-1', node_type='docker', node_directory= ...

# And you can access the attributes the same way as the project
print(f"Name: {alpine1.name} -- Status: {alpine1.status} -- Console: {alpine1.console}")
# Name: alpine-1 -- Status: started -- Console: 5005

# Stop the node and start (you can just restart it as well)
alpine1.stop()
print(alpine1.status)
# stopped

alpine1.start()
print(alpine1.status)
# started

# You can also see the Link objects assigned to this node
print(alpine1.links)
# [Link(link_id='4d9f1235-7fd1-466b-ad26-0b4b08beb778', link_type='ethernet', ....

# And in the same way you can interact with a Link object
link1 = alpine1.links[0]
print(f"Link Type: {link1.link_type} -- Capturing?: {link1.capturing} -- Endpoints: {link1.nodes}")
# Link Type: ethernet -- Capturing?: False -- Endpoints: [{'adapter_number': 2, ...

Bonus

You also have some commodity methods like the nodes_summary and links_summary, that if used with a library like tabulate you can see the following:

...
from tabulate import tabulate

nodes_summary = lab.nodes_summary(is_print=False)

print(
    tabulate(nodes_summary, headers=["Node", "Status", "Console Port", "ID"])
)
# Node              Status      Console Port  ID
# ----------------  --------  --------------  ------------------------------------
# Ethernetswitch-1  started             5000  da28e1c0-9465-4f7c-b42c-49b2f4e1c64d
# IOU1              started             5001  de23a89a-aa1f-446a-a950-31d4bf98653c
# IOU2              started             5002  0d10d697-ef8d-40af-a4f3-fafe71f5458b
# vEOS-4.21.5F-1    started             5003  8283b923-df0e-4bc1-8199-be6fea40f500
# alpine-1          started             5005  ef503c45-e998-499d-88fc-2765614b313e
# Cloud-1           started                   cde85a31-c97f-4551-9596-a3ed12c08498

links_summary = lab.links_summary(is_print=False)
print(
    tabulate(links_summary, headers=["Node A", "Port A", "Node B", "Port B"])
)
# Node A          Port A       Node B            Port B
# --------------  -----------  ----------------  -----------
# IOU1            Ethernet1/0  IOU2              Ethernet1/0
# vEOS-4.21.5F-1  Management1  Ethernetswitch-1  Ethernet0
# vEOS-4.21.5F-1  Ethernet1    alpine-1          eth0
# Cloud-1         eth1         Ethernetswitch-1  Ethernet7

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gns3fy-0.2.0.tar.gz (13.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gns3fy-0.2.0-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file gns3fy-0.2.0.tar.gz.

File metadata

  • Download URL: gns3fy-0.2.0.tar.gz
  • Upload date:
  • Size: 13.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.16 CPython/3.7.3 Darwin/18.7.0

File hashes

Hashes for gns3fy-0.2.0.tar.gz
Algorithm Hash digest
SHA256 d15c529e2af57491f3c5fc25ae726b18bfc9e317abd2b25d3682f8127c2ab44d
MD5 19ed0bf3ee2f52f437c13c3a197f1679
BLAKE2b-256 079a83877a599f3318cf5d49dd992ee35387f26c5452ca6b481d484e2887045b

See more details on using hashes here.

File details

Details for the file gns3fy-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: gns3fy-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 11.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.16 CPython/3.7.3 Darwin/18.7.0

File hashes

Hashes for gns3fy-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 48e3f422ec686e506cc05c0ecf9854625bf59c57d237cd74685b52e2f10f3eaf
MD5 b21f476d7d8a28433a34b7a9c6f94459
BLAKE2b-256 05234871d677a5f6a37930a99268f29be795e0b8f55fb0f6e5457e19dd5d5fe0

See more details on using hashes here.

Release history Release notifications | RSS feed

0.8.0

2 files

0.7.2

2 files

0.7.1

2 files

0.7.0

2 files

0.6.0

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

0.3.0

2 files

This release

0.2.0 This release

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page