Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding attributes to GNS3 nodes for dynamic config building #707

Closed
julien-duponchelle opened this issue Oct 8, 2015 · 3 comments
Closed
Milestone

Comments

@julien-duponchelle
Copy link
Contributor

Request from @plucena24

Would it be possible to add a feature in GNS3 that allows a user to add arbitrary key-value attributes to each node from the GUI? For example, select a group of nodes, right click, and set a field under each node's properties. The use case I was thinking of is allowing users to set attributes on groups of routers, such as "asn:100", or "ospf.area = 1", etc, and adding these values to the .gns3 file. A program can then parse the .gns3 file and build configs based on these user provided attributes.

@julien-duponchelle
Copy link
Contributor Author

My suggestion is too add in the GNS3 file on each node a plugins dictionary and in the top level of the file for general keys. Each "plugins" could store his informations here. And each plugins will provide a file read by GNS3 (a json schema for example) allowing GNS3 to add a configuration menu when you click on a node or in the top menu.

A file sample with two plugins net.awesome.autoip, com.networkdigital.webexport.

{
  "revision": 3,
  "version": "1.3.7",
  "auto_start": false,
  "name": "ioutest",
  "type": "topology",
  "project_id": "2b71dc2b-2b5e-4457-9dda-43ffab5626bd",
  "plugins": {
       "net.awesome.autoip": {
          "iprange": "192.168.1.0/21"
       },
      "com.networkdigital.webexport": {
           "export_format": "html5",
          "javascript": true
     }
  },
  "topology": {
    "servers": [
      {
        "port": 8000,
        "local": false,
        "host": "172.16.43.43",
        "cloud": false,
        "vm": true,
        "id": 2
      }
    ],
    "nodes": [
      {
        "default_symbol": ":/symbols/router.normal.svg",
        "y": -100,
        "vm_id": "84a189da-a684-4e6a-bde4-99481d616f68",
        "x": -319,
        "type": "IOUDevice",
        "id": 1,
        "properties": {
          "nvram": 128,
          "name": "IOU1",
          "l1_keepalives": false,
          "ram": 256,
          "path": "i86bi-linux-l3-adventerprisek9-15.4.1T.bin",
          "ethernet_adapters": 2,
          "serial_adapters": 2,
          "console": 2000,
          "initial_config": "initial-config.cfg",
          "use_default_iou_values": true
        },
        "description": "IOU device",
        "server_id": 2,
        "hover_symbol": ":/symbols/router.selected.svg",
        "plugins": {
             "net.awesome.autoip": {
                  "ip": "192.168.1.2"
             }
         },
      }
    ]
  }
}

@julien-duponchelle
Copy link
Contributor Author

Early design
capture d ecran 2015-12-30 a 21 12 16

@grossmj
Copy link
Member

grossmj commented Aug 8, 2017

This would most likely be required to implement #23

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants