-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathnornir7.py
65 lines (54 loc) · 2.65 KB
/
nornir7.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
"""
Script: Change Configuration - Nornir + Napalm + Netmiko + Netbox (API)
Author: William Prado
Email: [email protected]
"""
from nornir import InitNornir
from nornir_napalm.plugins.tasks import napalm_get
from nornir_netmiko.tasks import netmiko_send_config, netmiko_commit
from nornir_rich.functions import print_result
import requests, os
headers = {
'Content-Type': 'application/json',
'Authorization': 'Token '+str(os.getenv("NETBOX_TOKEN"))
}
def nornir_netmiko_configure(task):
try:
data_device = task.run(task=napalm_get, getters=["get_interfaces"])
data_device = data_device.result['get_interfaces']
url_netbox = str(os.getenv("NETBOX_URL"))+"/api/dcim/interfaces/?device="+str(task.host)
response_device = requests.request("GET", url_netbox, headers=headers, verify=False)
for interface_netbox in response_device.json()['results']:
configurations=["interface "+str(interface_netbox['name'])]
if data_device[interface_netbox['name']]['is_enabled'] != interface_netbox['enabled']:
if interface_netbox['enabled'] == True:
configurations.append("no shutdown")
if interface_netbox['enabled'] == False:
configurations.append("shutdown")
if data_device[interface_netbox['name']]['description'] != interface_netbox['description']:
if interface_netbox['description'] == "":
configurations.append("no description")
else:
configurations.append("description "+str(interface_netbox['description']))
if data_device[interface_netbox['name']]['mtu'] != interface_netbox['mtu']:
configurations.append("mtu "+str(interface_netbox['mtu']))
if len(configurations) > 1:
command = task.run(netmiko_send_config, config_commands=configurations)
print_result(command)
commit = task.run(netmiko_commit)
print_result(commit)
except Exception as err:
print(err)
nr = InitNornir(
runner={"plugin": "threaded", "options": {"num_workers": 20}},
inventory={
"plugin": "NetBoxInventory2",
"options": {
"nb_url": os.getenv("NETBOX_URL"),
"nb_token": os.getenv("NETBOX_TOKEN"),
"filter_parameters": {"name": "poppr-pe-ncs5501-103"},
"ssl_verify": False}})
nr.inventory.defaults.username = os.getenv("USER")
nr.inventory.defaults.password = os.getenv("PASSWORD")
nr.inventory.defaults.port = os.getenv("SSH_PORT")
nr.run(task=nornir_netmiko_configure)