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_pyncs.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
Developer testing
Install the ncs-pycli package into your local NSO development environment. Run ncs_pycli
to get an ipython shell with an open transaction:
import logging
from umnet_pyncs.state import StateManager
log = logging.getLogger()
log.setLevel(logging.DEBUG)
devices = [d for d in root.devices.device]
m = StateManager()
interfaces = m.get_state(devices, ["get-interface-details"])
print(interfaces)
m.__exit__()
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.
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.18-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 69f9741b7b2f1c462bb2b4deb9d608cbe51117684be874af714706afa7cd131e |
|
MD5 | d23a3581c8c8b0cb91d34d60b430de26 |
|
BLAKE2b-256 | fe21d96a29f00f58cd94eb65c335f1386e8619ee5dfdc5a7671ba38adcf5bb93 |