Skip to main content

The missing bridge between industry standard CLIs and YANG

Project description

ntc_rosetta

ntc_rosetta leverages yangify to implement a set of "drivers" that can:

  1. Transform network devices' native configuration/state into structured data that conform to YANG models
  2. Transform data structures that conform to YANG models into network device's native configuration/data structures
  3. Merge configurations

Installing NTC Rosetta

Pip Install

pip install ntc-rosetta

Install From Source

  • Clone ntc-rosetta (git clone https://github.com/networktocode/ntc-rosetta.git)
  • cd into project root (cd ntc-rosetta)
  • pip install poetry
  • poetry install

Ways to get started with NTC Rosetta

Start Executing Jupyter Notebooks

Step 1

Clone the repository: $ git clone https://github.com/networktocode/ntc-rosetta.git

Step 2

Change directory into ntc-rosetta: $ cd ntc-rosetta

Step 3

Build the containers: $ make build_test_containers

Step 4

Start a container so you can run the Jupyter notebooks: $ make jupyter

Step 5

Launch a browser and navigate to the following URL: http://127.0.0.1:8888/tree/docs/tutorials

The same notebooks can be viewed without being interactive in the NTC Rosetta Read the Docs.

Parsing

>>> from ntc_rosetta import get_driver
>>>
>>> ios = get_driver("ios", "openconfig")
>>> ios_driver = ios()
>>> with open("data/ios/config.txt", "r") as f:
>>>     config = f.read()
>>> print(config)
interface FastEthernet1
   description This is Fa1
   shutdown
   exit
!
vlan 10
   name prod
   no shutdown
   exit
!
vlan 20
   name dev
   shutdown
   exit
!
>>> parsed = ios_driver.parse(native={"dev_conf": config})
>>> import json
>>> print(json.dumps(parsed.raw_value(), indent=4))
{
    "openconfig-interfaces:interfaces": {
        "interface": [
            {
                "name": "FastEthernet1",
                "config": {
                    "name": "FastEthernet1",
                    "type": "iana-if-type:ethernetCsmacd",
                    "description": "This is Fa1",
                    "enabled": false
                },
                "subinterfaces": {
                    "subinterface": [
                        {
                            "index": 1,
                            "config": {
                                "index": 1,
                                "description": "This is Fa1.1"
                            }
                        },
                        {
                            "index": 2,
                            "config": {
                                "index": 2,
                                "description": "This is Fa1.2"
                            }
                        }
                    ]
                }
            },
        ]
    },
    "openconfig-network-instance:network-instances": {
        "network-instance": [
            {
                "name": "default",
                "config": {
                    "name": "default"
                },
                "vlans": {
                    "vlan": [
                        {
                            "vlan-id": 10,
                            "config": {
                                "vlan-id": 10,
                                "name": "prod",
                                "status": "ACTIVE"
                            }
                        },
                        {
                            "vlan-id": 20,
                            "config": {
                                "vlan-id": 20,
                                "name": "dev",
                                "status": "SUSPENDED"
                            }
                        }
                    ]
                }
            }
        ]
    }
}

Translating

>>> from ntc_rosetta import get_driver
>>> 
>>> ios = get_driver("ios", "openconfig")
>>> ios_processor = ios()
>>> data = {
>>>     "openconfig-interfaces:interfaces": {
>>>         "interface": [
>>>             {
>>>                 "name": "FastEthernet1",
>>>                 "config": {
>>>                     "name": "FastEthernet1",
>>>                     "type": "iana-if-type:ethernetCsmacd",
>>>                     "description": "This is Fa1",
>>>                     "enabled": False
>>>                 },
>>>                 "subinterfaces": {
>>>                     "subinterface": [
>>>                         {
>>>                             "index": 1,
>>>                             "config": {
>>>                                 "index": 1,
>>>                                 "description": "This is Fa1.1"
>>>                             }
>>>                         },
>>>                         {
>>>                             "index": 2,
>>>                             "config": {
>>>                                 "index": 2,
>>>                                 "description": "This is Fa1.2"
>>>                             }
>>>                         }
>>>                     ]
>>>                 }
>>>             },
>>>         ]
>>>     },
>>>     "openconfig-network-instance:network-instances": {
>>>         "network-instance": [
>>>             {
>>>                 "name": "default",
>>>                 "config": {
>>>                     "name": "default"
>>>                 },
>>>                 "vlans": {
>>>                     "vlan": [
>>>                         {
>>>                             "vlan-id": 10,
>>>                             "config": {
>>>                                 "vlan-id": 10,
>>>                                 "name": "prod",
>>>                                 "status": "ACTIVE"
>>>                             }
>>>                         },
>>>                         {
>>>                             "vlan-id": 20,
>>>                             "config": {
>>>                                 "vlan-id": 20,
>>>                                 "name": "dev",
>>>                                 "status": "SUSPENDED"
>>>                             }
>>>                         }
>>>                     ]
>>>                 }
>>>             }
>>>         ]
>>>     }
>>> }
>>> native = ios_processor.translate(candidate=data)
>>> print(native)
interface FastEthernet1
   description This is Fa1
   shutdown
   exit
!
interface FastEthernet1.1
   description This is Fa1.1
   exit
!
interface FastEthernet1.2
   description This is Fa1.2
   exit
!
interface FastEthernet3
   description This is Fa3
   no shutdown
   switchport mode access
   switchport access vlan 10
   exit
!
interface FastEthernet4
   shutdown
   switchport mode trunk
   switchport trunk allowed vlan 10,20
   exit
!
vlan 10
   name prod
   no shutdown
   exit
!
vlan 20
   name dev
   shutdown
   exit
!

Project details


Download files

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

Source Distribution

ntc_rosetta-0.2.1.tar.gz (453.1 kB view details)

Uploaded Source

Built Distribution

ntc_rosetta-0.2.1-py3-none-any.whl (615.9 kB view details)

Uploaded Python 3

File details

Details for the file ntc_rosetta-0.2.1.tar.gz.

File metadata

  • Download URL: ntc_rosetta-0.2.1.tar.gz
  • Upload date:
  • Size: 453.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.0 CPython/3.6.14 Linux/5.10.47-linuxkit

File hashes

Hashes for ntc_rosetta-0.2.1.tar.gz
Algorithm Hash digest
SHA256 4474f614f3be2aa5819b53f7663b209e8aa3e46e16f36548d2f5289e7119b5cc
MD5 c21780da2f6a6d15a82394d3d61e574f
BLAKE2b-256 eda2622d81c2a4215b112be0d76bbb234fca4ea2ef10709c7ee5c393c029e226

See more details on using hashes here.

File details

Details for the file ntc_rosetta-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: ntc_rosetta-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 615.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.0 CPython/3.6.14 Linux/5.10.47-linuxkit

File hashes

Hashes for ntc_rosetta-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fa780093cb2b73a3daa8bc5700c05ae7764133d3400b5d74eda45613ec1767a0
MD5 c523a0379c85076292d5954e0111a733
BLAKE2b-256 c99252dd608d6985e9679d661aff60973a46d79d8864589b948c14adc0af146d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page