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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for umnet_pyncs-0.1.12-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a2ab3e7318324ee8b356641869e6047a09a9f6cc646f1bafe492d086158817db |
|
MD5 | 3569d06cf463323967f60205cb03895b |
|
BLAKE2b-256 | 760b43a8581f4459ffde6c9fdb81cac898d9a27d3038ef6b99bbd7b99fb391c8 |