Skip to main content

nornir inventory plugin,support managing inventory by csv or excel file

Project description

Python 3.6 Python 3.7 Python 3.8

nornir_table_inventory

The nornir_table_inventory is Nornir plugin for inventory.It can manage inventory by table file(CSV or Excel). Excitedly, it provides a hidden method to use your database or your automation system as a inventory source. Netmiko connections support only.

It doesn't support groups or defaults,because it focuses on flat data,and the data lies in table file of two-dimensional.

nornir_table_inventory supports 3 inventory classes .

  • CSVInventory manages inventory by csv file
  • ExcelInventory manages inventory by excel(xlsx) file
  • FlatDataInventory manages inventory by python list object of dict,by this inventory plugin ,you can combine nornir with your database and automation system.

Installing

pip install ns-nornir-table-inventory

Example usage

Using the Nornir configuration file

---
inventory:
      plugin: CSVInventory
      options:
          csv_file: "inventory.csv"

runner:
    plugin: threaded
    options:
        num_workers: 100
from nornir import InitNornir


nr = InitNornir(config_file=r'config.yml')

for n, h in nr.inventory.hosts.items():
  print('host name:', n)
  print('host hostname:', h.hostname)
  print('host username:', h.username)
  print('host password:', h.password)
  print('host platform:', h.platform)
  print('host port:', h.port)
  print('host data:', h.data)
  print('host netmiko details:', h.connection_options.get('netmiko').dict())
  print('='*150)

Using the InitNornir function by dict data

from nornir import InitNornir

runner = {
    "plugin": "threaded",
    "options": {
        "num_workers": 100,
    },
}
inventory = {
    "plugin": "ExcelInventory",
    "options": {
        "excel_file": "inventory.xlsx",
    },
}

nr = InitNornir(runner=runner, inventory=inventory)

for n, h in nr.inventory.hosts.items():
  print('host name:', n)
  print('host hostname:', h.hostname)
  print('host username:', h.username)
  print('host password:', h.password)
  print('host platform:', h.platform)
  print('host port:', h.port)
  print('host data:', h.data)
  print('host netmiko details:', h.connection_options.get('netmiko').dict())
  print('='*150)

CSVInventory arguments

Arguments:
    csv_file: csv file path,optional,default:inventory.csv

ExcelInventory arguments

Arguments:
    excel_file: excel file path,optional,default:inventory.xlsx(Microsoft Office EXCEL 2007/2010/2013/2016/2019)

Table Instructions

name hostname platform port username password city model netmiko_timeout netmiko_secret
netdevops01 192.168.137.201 cisco_ios 22 netdevops admin123! bj catalyst3750 60 admin1234!
netdevops02 192.168.137.202 cisco_ios 22 netdevops admin123! shanghai catalyst3750 60 admin1234!
  • name:name of host

  • hostname: IP or fqdn of host

  • platform:netmiko's device_type

  • port:port of host,netmiko's port

  • username,password: username adn password of host

  • netmiko_prefix variables,will load into ConnectHandler(Netmiko)function to build netmiko ssh connection object.

  • timeout conn_timeout auth_timeout banner_timeout blocking_timeout session_timeout will be converted into int.If you define it in table's headers,you must assignment it,otherwise it will raise exception ,because it will call int(None).

  • netmiko's fast_cli will be converted into boolean.values of false 0 None(Case insensitive)will be converted into False,others will be converted into True。

  • others data such as city or model (any field name you can define) in the table will be host's data.

    Above table will be used as following codes and result

    from nornir import InitNornir
    
    nr = InitNornir(config_file=r'config.yml')
    for n, h in nr.inventory.hosts.items():
      print('host name:', n)
      print('host hostname:', h.hostname)
      print('host username:', h.username)
      print('host password:', h.password)
      print('host platform:', h.platform)
      print('host port:', h.port)
      print('host data:', h.data)
      print('host netmiko details:', h.connection_options.get('netmiko').dict())
      print('='*150)
    

    Results:

    host name: netdevops01
    host hostname: 192.168.137.201
    host username: netdevops
    host password: admin123!
    host platform: cisco_ios
    host port: 22
    host data: {'city': 'bj', 'model': 'catalyst3750'}
    host netmiko details: {'extras': {'timeout': 60, 'secret': 'admin1234!'}, 'hostname': None, 'port': None, 'username': None, 'password': None, 'platform': None}
    ======================================================================================================================================================
    host name: netdevops02
    host hostname: 192.168.137.202
    host username: netdevops
    host password: admin123!
    host platform: cisco_ios
    host port: 22
    host data: {'city': 'shanghai', 'model': 'catalyst3750'}
    host netmiko details: {'extras': {'timeout': 60, 'secret': 'admin1234!'}, 'hostname': None, 'port': None, 'username': None, 'password': None, 'platform':
    

    A Strong Hidden Method —— any data source as a inventory

The two inventory plugins are based on the FlatDataInventory plugin. FlatDataInventory plugin provides a way to load inventory by puthon's list,the list's member is dict. We can get some data, and transform them into form as list of dict. By this way we can combine nornir with any database or automation system. You do not need sql or csv plugin any more.

from nornir import InitNornir
from nornir_utils.plugins.functions import print_result
from nornir_netmiko import netmiko_send_command


def get_nornir_by_your_func(some_args=None, num_workers=100):
  """Use any way to get some data(such as sql or restful api), and transform them into form as follwing"""
  data = [{'name': 'netdevops01', 'hostname': '192.168.137.201',
           'platform': 'cisco_ios', 'port': 22, 'username': 'netdevops',
           'password': 'admin123!', 'city': 'bj', 'model': 'catalyst3750',
           'netmiko_timeout': 180, 'netmiko_secret': 'admin1234!',
           'netmiko_banner_timeout': '30', 'netmiko_conn_timeout': '20'},
          {'name': 'netdevops02', 'hostname': '192.168.137.202', 'platform':
              'cisco_ios', 'port': 22, 'username': 'netdevops', 'password': 'admin123!',
           'city': 'bj', 'model': 'catalyst3750', 'netmiko_timeout': 120,
           'netmiko_secret': 'admin1234!', 'netmiko_banner_timeout': 30,
           'netmiko_conn_timeout': 20}
          ]
  runner = {
      "plugin": "threaded",
      "options": {
          "num_workers": num_workers,
      },
  }
  inventory = {
      "plugin": "FlatDataInventory",
      "options": {
          "data": data,
      },
  }
  nr = InitNornir(runner=runner, inventory=inventory)
  return nr


if __name__ == '__main__':
  
  nr = get_nornir_by_your_func()
  bj_devs = nr.filter(city='bj')
  r = bj_devs.run(task=netmiko_send_command, command_string='display version')
  print_result(r)

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

ns_nornir_table_inventory-0.0.1.tar.gz (9.0 kB view details)

Uploaded Source

Built Distribution

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

ns_nornir_table_inventory-0.0.1-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

Details for the file ns_nornir_table_inventory-0.0.1.tar.gz.

File metadata

File hashes

Hashes for ns_nornir_table_inventory-0.0.1.tar.gz
Algorithm Hash digest
SHA256 85f30bf8cd4fc10ca6cca78260123ea0b960a7b84b4844d8b6dea60a46206c9c
MD5 55a2a856189dfb67eb414c48be26ef04
BLAKE2b-256 198adbe4baec742a40e759cf85d39ccb50a1ed2715ea315f5b971945fc015f60

See more details on using hashes here.

Provenance

The following attestation bundles were made for ns_nornir_table_inventory-0.0.1.tar.gz:

Publisher: publish.yml on nstamoul/ns_nornir_table_inventory

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ns_nornir_table_inventory-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for ns_nornir_table_inventory-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6c7fda053518c833eeba3eb404a83274d183fd3bd6794c6d9847f9a02890897e
MD5 f844744cdc85aae1b7912610b8e6bfd6
BLAKE2b-256 fcdec34f16344cdaf0808c2b04548f3de19a86a288937252c60c94894e75c3fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for ns_nornir_table_inventory-0.0.1-py3-none-any.whl:

Publisher: publish.yml on nstamoul/ns_nornir_table_inventory

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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