#python #dictionary
Вопрос:
device_total={}
user_n="Cisco"
pwd= "test"
count=1
for i in range(0,31):
ip_addr= input('Please enter the device IP address' ' : ')
dev_type = input (" Enter device type" ' : ')
dsum = {'device type':dev_type,'host':ip_addr,'username':user_n,'password':pwd}
device_total[i] = dsum
i 1
query_user=input('Do you want to add additional devices? (y/n)' )
if query_user != 'y':
break
print(device_total)
Я пытаюсь динамически создавать несколько словарей на основе пользовательского ввода, который будет использоваться для настройки сетевых устройств с помощью Netmiko, словари построены, но каждый из них пронумерован, что вызывает ошибку строки, когда функции Netmiko пытаются использовать их для входа в систему и внесения изменений в конфигурацию. Пожалуйста, дайте мне знать, если есть способ создать словарь без них. Я хотел бы создать отдельный словарь для каждого устройства, введенного пользователем, а не один с несколькими записями. Спасибо.
См. Пример ниже:
{0: {'device type': 'cisco', 'host': '1.1.1.1', 'username': 'Cisco', 'password': 'test'}, 1: {'device type': 'Arista', 'host': '2.2.2.2', 'username': 'Cisco', 'password': 'test'}}
Комментарии:
1. Я подозреваю, что вам вообще нужен не словарь, а список. Я предлагаю
device_total=[]
, а затемdevice_total.append( dsum )
вместо этогоdevice_total[i] = dsum
.2. Спасибо, но мне действительно нужен словарь. Название было неправильным , потому что мой вопрос был неправильным, я пытаюсь разделить словари, как только они вложены. Я искал решение в Интернете, и, похоже, никто никогда не сталкивался с этой проблемой.
3. Поскольку вы не показали нам, как будете использовать эту информацию, мы мало что можем сделать. Обратите внимание, что
device_total.values()
это вернет все значения без их ключей.
Ответ №1:
device_total=[]
user_n="Cisco"
pwd= "test"
count=1
for i in range(0,31):
ip_addr= input('Please enter the device IP address' ' : ')
dev_type = input (" Enter device type" ' : ')
dsum = {'device type':dev_type,'host':ip_addr,'username':user_n,'password':pwd}
device_total.append( dsum)
i 1
query_user=input('Do you want to add additional devices? (y/n)' )
if query_user != 'y':
break
print(device_total)
Ответ №2:
Вот решение, которое я придумал для всех, кто может оказаться в такой же ситуации и застрять.
from getpass import getpass
from netmiko import ConnectHandler
from netmiko import NetmikoAuthenticationException
def user_input():
""" Getting user credentials """
usr_n = input("username: ")
pwd = getpass()
cred = (usr_n, pwd)
return cred
def net_devices():
login_info = user_input()
username = login_info[0]
password = login_info[1]
with open("districts devices.txt") as f:
net_devices = f.read().splitlines()
for device in net_devices:
try:
netw_devices = {"device_type": 'cisco_ios', 'host': device, 'username': username, 'password': password}
net_connect = ConnectHandler(**netw_devices)
except NetmikoAuthenticationException:
print(f"Unable to login to {device}. Verify you have the right credentials or it is added to ISE.")
continue
""" Verifying the access-list has been applied to the device. """
print('Verifying ACL the is on: ' device)
verification = net_connect.send_command('show run | b line vty')
if "access-class" not in verification:
print("nThe access-class is missing from this device's configuration. Configuring the ACL on: "
device)
acl_cmds = ['service password-encryption', 'ip access-list standard Sample-ONLY',
'permit 10.0.0.0 0.255.255.255',
' permit 172.16.0.0 0.0.255.255', 'line vty 0 15', 'transport in ssh',
'access-class sample in', 'do write memory']
commands = net_connect.send_config_set(acl_cmds)
print(commands)
else:
print("nNo update necessary.n")
# print(" nVerifying the ACL is now in place.")
# re_verification = net_connect.send_command('nshow run | b line vty')
# print(re_verification)
net_connect.disconnect()
net_devices()