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, as well as override existing NAPALM getters with custom code if needed. At the moment only one custom getter is implemented: get_inventory. This getter pulls model and serial numbers of device components: fans, psus, and optics.

What's cool about NAPALM is that if you nest your custom drivers under custom_napalm as is done in this project, you can install your custom drivers in the same virtual environment as the main NAPALM package, and they will override NAPALM's core drivers. This allows us to leverage NAPALM in a pretty seamless way - by that I mean applications that leverage NAPALM (like Nautobot or Nornir) can be easily altered to use this code instead.

Using sc-napalm

The package comes with a cli script called sc-napalm-get that will run a particular getter against a particular device and output the results to your terminal.

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. Note that you could also specify these credentials when you run the script, or in your local environment. The script prefers manual input, then .env then environment values.

  2. Run the script with uv run sc-napalm-get.

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
aliebowitz@sysauto:~/src/sc-napalm$ uv run sc-napalm-get 2001:468:1f07:ff19::1d eos get_inventory
[{'name': 'Ethernet45',
  'part_number': 'QSFP-100G-LR4',
  'serial_number': 'XYL252206819',
  'subtype': 'QSFP-100G-LR4',
  'type': 'optic'},
 {'name': 'Ethernet46',
  'part_number': 'QSFP-100G-LR4',
  'serial_number': 'XYL252206822',
  'subtype': 'QSFP-100G-LR4',
  'type': 'optic'},
 {'name': 'PSU 1',
  'part_number': 'PWR-511-AC-RED',
  'serial_number': 'EEWT2420216960',
  'subtype': None,
  'type': 'psu'},
 ...
  .....

Developing sc-napalm

Currently, the getters that are exposed as options in the get script 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 Nornir or Nautobot jobs.

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 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.2.0.tar.gz (148.2 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.2.0-py3-none-any.whl (22.2 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for sc_napalm-0.2.0.tar.gz
Algorithm Hash digest
SHA256 4b3a1cac7f67f2847fa813b20533d2977e3c2e86166fd68c8c1762226dceca77
MD5 d0789d04e4e2446c53f52fef7f2290e4
BLAKE2b-256 306d2ae5ce32fb894f35de272797ee87d56921efe9465a2b70a3cb8986d390df

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for sc_napalm-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 14a6b7ed64ba1faee25b98b2fe0191435aca591c16c4fdf8c2774599d913692d
MD5 3f05af7d8a8f450b0e770bd4265c9a44
BLAKE2b-256 92bca908a1538bf393da9cfbf6334c39544546324d50f7d22b83abef06e3147a

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