My code below is to enter a configuration on the device or check if the device has a configuration.
driver = get_network_driver("ios")
device = driver(hostname= X.X.X.X,
username='username',
password='password',
optional_args={'port': 22})
device.open()
print("Accesing device")
device.load_merge_candidate(filename="syslog.txt")
diffs = device.compare_config()
if len(diffs) > 0:
print(diffs)
device.commit_config()
else:
print("no changes required")
device.discard_config()
device.close()
I was able to make this code for a single IP. Which Threading method would you recommend I use for multiple processes with NAPALM?
I made a few edits to your code. You can run the below code.
from napalm import get_network_driver
from netmiko import NetMikoAuthenticationException
from netmiko.ssh_exception import NetMikoTimeoutException
from paramiko.ssh_exception import SSHException
from getpass import getpass
import json
from termcolor import colored
import time
start = time.time()
username = input('username: ')
password = getpass('password:')
driver = get_network_driver('ios')
with open('devices.txt', 'r') as router_ips:
for ip in router_ips:
print('connecting to', ip)
optional_args = {'secret': 'cisco'}
try:
device = driver(ip, username, password, optional_args={'global_delay_factor': 4})
device.open()
except NetMikoAuthenticationException:
print(colored('Authentication Error!!!', 'red'))
username = input('username: ')
password = getpass('password:')
device = driver(ip, username, password, optional_args={'global_delay_factor': 4})
except NetMikoTimeoutException:
username = input('username: ')
password = getpass('password:')
device = driver(ip, username, password, optional_args={'global_delay_factor': 4})
print(colored('Time exceed!!!', 'red'))
except SSHException:
print(colored('Transport error with ssh or authentication', 'red'))
else:
device.load_merge_candidate('syslog.txt')
diff = device.compare_config()
print('Below configuration will be push on device')
print((diff))
while True:
if len(diff) > 0:
userinp = input('Do you want to commit changes on device, hit Y or N: ').lower().strip()
if userinp == 'y':
device.commit_config()
print(colored('\nCommitting changes on devise', 'yellow'))
print('#' * 50)
print(colored('\nCommit confirm...', 'green'))
break
elif userinp == 'n':
print(colored('\nDiscard the changes', 'red'))
device.discard_config()
break
else:
print(colored('\ninvalid input detected', 'blue'))
device.close()
end = time.time()
print(f'Total time during execution is:', colored(end - start, 'red'))