Welcome to Worktory’s documentation!
Worktory is a python library created with the single purpose of simplifying the inventory management of network automation scripts.
As the network automation ecosystem grows, several connection plugins and parsers are available, and several times choosing a library or a connection plugin restricts all the devices to the same connection method.
Worktory tries to solve that problem giving the developer total flexibility for choosing the connector plugin and parsers for each device, at the same time that exposes a single interface for every plugin.
Installing
Worktory is available in PyPI, to install run:
$ pip install worktory
Using worktory
Sample Inventory
devices = [
{
'name': 'sandbox-iosxr-1',
'hostname': 'sandbox-iosxr-1.cisco.com',
'platform': 'cisco_iosxr',
'username': 'admin',
'password': 'C1sco12345',
'groups': ['CORE'],
'connection_manager': 'scrapli',
'select_parsers' : 'genie',
'mode': 'async',
'transport': 'asyncssh',
},
{
'name': 'sandbox-nxos-1',
'hostname': 'sandbox-nxos-1.cisco.com',
'platform': 'cisco_nxos',
'username': 'admin',
'password': 'Admin_1234!',
'groups': ['CORE'],
'select_parsers' : 'ntc',
'connection_manager': 'scrapli',
'mode': 'async',
'transport': 'asyncssh'
},
{
'name': 'sandbox-nxos-2',
'hostname': 'sandbox-nxos-1.cisco.com',
'platform': 'nxos',
'username': 'admin',
'password': 'Admin_1234!',
'groups': ['EDGE'],
'connection_manager': 'unicon',
'mode': 'sync',
'transport': 'ssh',
'GRACEFUL_DISCONNECT_WAIT_SEC': 0,
'POST_DISCONNECT_WAIT_SEC': 0,
},
{
'name': 'sandbox-iosxr-2',
'hostname': 'sandbox-iosxr-1.cisco.com',
'platform': 'cisco_iosxr',
'username': 'admin',
'password': 'C1sco12345',
'groups': ['CORE'],
'connection_manager': 'scrapli',
'select_parsers' : 'genie',
'mode': 'sync',
},
]
Collecting Running config from async devices
from worktory import InventoryManager
import asyncio
inventory = InventoryManager(devices)
device_configs = {}
async def get_config(device):
await device.connect()
config = await device.execute("show running-config")
device_configs[device.name] = config
await device.disconnect()
async def async_main():
coros = [get_config(device) for device in inventory.filter(mode='async')]
await asyncio.gather(*coros)
loop = asyncio.get_event_loop()
loop.run_until_complete(async_main())
Collecting Running config from sync devices
from worktory import InventoryManager
from multiprocessing import Pool
inventory = InventoryManager(devices)
def get_config(device_name):
inventory = InventoryManager(devices)
device = inventory.devices[device_name]
device.connect()
config = device.execute("show running-config")
device.disconnect()
return ( device.name , config )
def main():
devs = [device.name for device in inventory.filter(mode='sync')]
with Pool(2) as p:
return p.map(get_config, devs)
output = main()
Release files for worktory 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| worktory-0.1.2.tar.gz | 10.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| worktory-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.9 kB
Release files / worktory-0.1.2.tar.gz
| Download URL | worktory-0.1.2.tar.gz |
|---|---|
| Size | 10.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
43751c1727d943d5a7bd87b8d90848da03a6932e93d02e6fc133617aa4c5beca
|
|
BLAKE2b-256 checksum How to use checksums |
b10c55a886f235719e51ebe4b9700386beabec5f1da36b2a9b31c84160070565
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.11 CPython/3.8.10 Linux/5.4.0-173-generic
|
Release files / worktory-0.1.2-py3-none-any.whl
| Download URL | worktory-0.1.2-py3-none-any.whl |
|---|---|
| Size | 13.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
639a97d12246aa0158e87f34067be66236b06f95e2400df0ed31c5126d1fb2d7
|
|
BLAKE2b-256 checksum How to use checksums |
7ea3693a72e44ddb14be66922031563b1c4177cb4e6101f6e080b3ce2b735881
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.11 CPython/3.8.10 Linux/5.4.0-173-generic
|