Skip to main content

custom python module for NCS helpers

Project description

Overview

This module is intended to be installed on the production NCS nodes and imported in other services/actions that need to gather state from the network. It uses the NCS device manager and the standard python multiprocessing library to connect to devices in-parallel and issue commands, returning results as structured data.

Usage information

Basic usage example in an NCS callback:

from umnet_ncs.state import StateManager
...


class DemoAction(Action):
    @Action.action
    def cb_action(self, uinfo, name, kp, input, output, trans):
        ...
        with StateManager() as m:
            interfaces = m.get_state(al_devices, ["get-interface-details"])
            arp = m.get_state(dl_devices, ["get-arp-table"])
            ...

Supported commands

Currently supported commands are:

  • get-mac-table
  • get-arp-table
  • get-interface-details
  • get-transciever-details
  • get-lldp-neighbors
  • get-bfd-neighbors
  • get-ospf-neighbors

For any given command, the various platform-specific models are responsible for implementing how the data is fetched and parsed from the remote device. Each command corresponds to a method that can be invoked to retrieve the data, e.g. get-interface-details maps to the get_interface_details() instance method of the model(s).

For Cisco IOS and NXOS devices (which use CLI-based NEDs), the built-in NCS live-status action(s) are used to send raw CLI commands to the device. For example, the get_mac_address() method will send a show mac address-table CLI command. For both IOS and NXOS we use ntc_templates to parse the raw text output into structured data.

For Juniper devices, since the NED uses NETCONF for all device communications, we instead call the <get-ethernet-switching-table-information> RPC directly. Since this RPC is modelled in YANG, we can then parse the results directly using the maagic API.

All the nitty-gritty details of parsing the data retrieved directly from the remote device is handled by the platform-specific model implementation for that device. Each model normalizes the data using the dataclasses defined in base.py. The intention is to makes it simpler for NCS actions/services to use this module, as well as making it easier to develop/maintain.

NB: this implementation currently relies on an additional template for NXOS that handles parsing show ip arp detail vrf all -- see PR# 1204.

Developer testing

Install the ipython-superuser package into your local NSO development environment. Use the REPL e.g:

import logging
from umnet_pyncs.state import StateManager

logging.basicConfig(level=logging.DEBUG)

devices = [d for d in root.devices.device]

m = StateManager()

# NB: m.get_state() expects a list of devices
interfaces = m.get_state(devices, ["get-interface-details"])
    
print(interfaces)

m.__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

umnet-pyncs-0.1.11.tar.gz (11.6 kB view details)

Uploaded Source

Built Distribution

umnet_pyncs-0.1.11-py3-none-any.whl (14.0 kB view details)

Uploaded Python 3

File details

Details for the file umnet-pyncs-0.1.11.tar.gz.

File metadata

  • Download URL: umnet-pyncs-0.1.11.tar.gz
  • Upload date:
  • Size: 11.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.10 CPython/3.9.1 Darwin/21.6.0

File hashes

Hashes for umnet-pyncs-0.1.11.tar.gz
Algorithm Hash digest
SHA256 acb1f634645f4b5d68fd90bfd279ba45f3d2c448f02c81f9832de1a19309e5f1
MD5 5e13bea83e172bd27d4b4ec8e1fec15a
BLAKE2b-256 62657c8e45ec7929b9c3e7ac04028b8b6e0dc42b31fe7686c5856016c039abe4

See more details on using hashes here.

File details

Details for the file umnet_pyncs-0.1.11-py3-none-any.whl.

File metadata

  • Download URL: umnet_pyncs-0.1.11-py3-none-any.whl
  • Upload date:
  • Size: 14.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.10 CPython/3.9.1 Darwin/21.6.0

File hashes

Hashes for umnet_pyncs-0.1.11-py3-none-any.whl
Algorithm Hash digest
SHA256 0f8fb5e1f3ea33777d50afc937bf6d256f3758529025b019747af13521077cbd
MD5 2976a3d2822839c91f12b61f142b12b2
BLAKE2b-256 e48a8a0fec122d203f3848620cf012953fa4afce6d0eb8d220629d9cfb00a480

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