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
Use the run_cmds
script to start a session with the local ncs
daemon and test the various state gathering commands
[grundler@ncs-1 umnet-pyncs]$ ./run_cmds -h
usage: run_cmds [-h] -c CMD -d DEV
optional arguments:
-h, --help show this help message and exit
-c CMD, --cmd CMD
-d DEV, --device DEV
[grundler@ncs-1 umnet-pyncs]$
[grundler@ncs-1 umnet-pyncs]$
[grundler@ncs-1 umnet-pyncs]$ ./run_cmds -d s-ehall-2012p-1 -c get-interface-details
INFO:root:connecting to ncs...
INFO:root:transaction started...
INFO:root:submitting commands to worker pool (1)
DEBUG:root:pid: 19275: invoking get-interface-details against s-ehall-2012p-1
DEBUG:root:sending 'show interfaces' to s-ehall-2012p-1
...
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.33-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 23d0ca973c8f8bcee1b8c2d19dfcc8f871df2feed18c830b25ce13d0c7c95583 |
|
MD5 | adaad6dd6a8846183ff2a34a2a2b4e10 |
|
BLAKE2b-256 | 0a754e31a7be62f26a7a05992eaafbb4e681d9a7296b4d8028e68a4d48b8ffe9 |