nornir inventory plugin,support managing inventory by csv or excel file
Project description
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 fileExcelInventory
manages inventory by excel(xlsx) fileFlatDataInventory
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 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 callint(None)
. -
netmiko's
fast_cli
will be converted into boolean.values offalse 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
Built Distribution
File details
Details for the file nornir_table_inventory-0.4.3.tar.gz
.
File metadata
- Download URL: nornir_table_inventory-0.4.3.tar.gz
- Upload date:
- Size: 10.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.2 CPython/3.9.13 Windows/10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 665adb48c36d77fbfe3b4d30c44688a887d8461e92e3e24582334db5ce30d74f |
|
MD5 | 0d737df0194582ac12a108cb71b95af5 |
|
BLAKE2b-256 | 354de839ad676cc488b5f8c7ca84b593e832a1ecbc1ff6f92398436a9c4663b2 |
File details
Details for the file nornir_table_inventory-0.4.3-py3-none-any.whl
.
File metadata
- Download URL: nornir_table_inventory-0.4.3-py3-none-any.whl
- Upload date:
- Size: 10.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.2 CPython/3.9.13 Windows/10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6b8bea957b0c6ca9cc457e70ed4d2269bbf1ffa4eef4e1f0eccb25f24baa47f2 |
|
MD5 | c6e84996ba5e531716bf67877cb57925 |
|
BLAKE2b-256 | efce3e3fe41fa76ced87ad5048b8942014866b6e0de9fb918b4bd58b9e71ff8a |