Skip to main content

Add your description here

Project description

sc-napalm

This repo is for building custom NAPALM "getters" to pull operational data from network devices. At the moment only one custom getter is implemented: get_inventory, and it is only implemented for junos, iosxr, and nxos.

What's cool about NAPALM is that if you nest your custom drivers under custom_napalm as is done in this project, when you call get_network_driver in a runtime environment that has your modules, these drivers will override the core NAPALM drivers. This allows us to leverage NAPALM in a pretty seamless way, in particular it allows us to use the nornir-napalm connection plugins and tasks to point at our custom drivers.

Using sc-napalm

For now the repo comes with two scripts:

  • sc-napalm-get will run a particular getter against a particular device and output the results to your terminal.
  • sc-napalm-run uses Nornir to run a set of getters against a set of devices in Nautobot and print out the results.

Right now to use this code you must do the following things:

  1. Install uv
  2. Clone the repo onto your local machine, then do a local development install of the repo into a uv virtual environment.
git clone https://scinet.supercomputing.org:8443/automation/sc25/sc-napalm.git
cd sc-napalm
uv run pip install -e .
  1. Copy sample_env file into .env and fill out .env with the credentials you need. Some notes about this.
  • You only need the nautobot stuff for sc-napalm-run.
  • You could also specify these values in your local environment as well, the scripts will check there if they're not set in .env
  1. Run the two scripts with uv run [the script].
amylieb@m-n76107kqmh sc-napalm % uv run sc-napalm-get -h
usage: sc-napalm-get [-h] [-l {DEBUG,INFO,WARNING,ERROR,CRITICAL} | -L {DEBUG,INFO,WARNING,ERROR,CRITICAL}] [--logfile LOGFILE] [--username USERNAME]
                     [--password PASSWORD]
                     device {iosxr,nxos,junos,sros,srl,eos} {get_config,get_facts,get_lldp_neighbors,get_inventory}

Run a specific sc_napalm "getter" against a device.

positional arguments:
  device                device hostname or IP address
  {iosxr,nxos,junos,sros,srl,eos}
                        The platform of this device
  {get_config,get_facts,get_lldp_neighbors,get_inventory}
                        The getter command to run against this device

options:
  -h, --help            show this help message and exit
  -l, --log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL}
                        Set log level for sc_napalm only
  -L, --LOG-LEVEL {DEBUG,INFO,WARNING,ERROR,CRITICAL}
                        set global log level
  --logfile LOGFILE     Save logging to a file (specified by name) instead of to stdout
  --username USERNAME   Specify credentials
  --password PASSWORD   Specify credentials
amylieb@m-n76107kqmh sc-napalm % uv run sc-napalm-get dl-shallow-1 nxos get_inventory
[{'name': 'Slot 1',
  'part_number': 'N9K-C93180YC-FX',
  'serial_number': 'FLM252403M9',
  'type': 'linecard'},
 {'name': 'Fan 1',
  'part_number': 'NXA-FAN-30CFM-B',
  'serial_number': 'N/A',
  'type': 'fan'},
  .....

amylieb@m-n76107kqmh sc-napalm % uv run sc-napalm-run --device amytest --cmds get_facts
Uninstalled 1 package in 8ms
Installed 1 package in 3ms
napalm_get**********************************************************************
* amytest ** changed : False ***************************************************
vvvv napalm_get ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO
{ 'get_facts': { 'fqdn': '',
                 'hostname': 'dl-shallow-1',
                 'interface_list': [ 'Management0',
                                     'Ethernet1/1',
                                     'Ethernet1/2',
                                     'Ethernet1/3',
                                     'Ethernet1/4',
                                     'Ethernet1/5',

Developing sc-napalm

Currently, the getters that are exposed as options in the get and run scripts are defined in the base class of the custom drivers. Note that because all the custom classes inherit the NAPALM getters, we could easily define all the other NAPALM getters there, but I've only included ones I think are obviously useful to us.

My hope is that instead of just printing out results we can write code that saves data in Nautobot, or some other place. This could be done with custom Nornir tasks or with Processors.

I have also noticed that Nautobot has a Nornir plugin - we could potentially leverage that as well.

To-dos

  • Decide where this code is run and how (periodically? Manually? From Nautobot? if so, how?)
  • Decide what output we want to capture (eg "show version"? "show lldp neighbor"?) and where it should go
  • Fuctions/tasks that transform output and save it appropriately
  • get_inventory methods for eos, srlinux, sros
  • Test/mock classes for custom getters

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

sc_napalm-0.1.0.tar.gz (4.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sc_napalm-0.1.0-py3-none-any.whl (4.5 kB view details)

Uploaded Python 3

File details

Details for the file sc_napalm-0.1.0.tar.gz.

File metadata

  • Download URL: sc_napalm-0.1.0.tar.gz
  • Upload date:
  • Size: 4.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.7

File hashes

Hashes for sc_napalm-0.1.0.tar.gz
Algorithm Hash digest
SHA256 8a3cc70eab494d5843df686345305fb373e8a59ab9360de0ae610d55fb396976
MD5 5470a918c964197cd0b0baa281e3bd8b
BLAKE2b-256 943e3622c1a5c9d1372fb21bfcabb1350372bd4bab220456c6715af592a7c228

See more details on using hashes here.

File details

Details for the file sc_napalm-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: sc_napalm-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 4.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.7

File hashes

Hashes for sc_napalm-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 62e26b6cff2554ddd7a5b838c5b4abd8f17e7f3821d1cc6813396e2b19629c23
MD5 fd143b176f777561d673a7883fa1cb99
BLAKE2b-256 fd2fe25fb952ddc7e7f11304a839df751be7c510c6a6de1ee39eb4ef629496a3

See more details on using hashes here.

Supported by

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