Вложенный словарь с Netmiko - PullRequest
       7

Вложенный словарь с Netmiko

0 голосов
/ 26 сентября 2019

На мой первоначальный вопрос ответили, но теперь я столкнулся с другой проблемой.

Получить индексное имя списка, составленного из словарей

Я пытался получить имясловаря из списка и использовать его в цикле for, но кажется, что это невозможно сделать.Вложенные словари были решением моей проблемы.

Теперь я могу успешно отправлять команды на сетевые устройства, используя Netmiko, но, похоже, он использует только последнюю запись в словаре.Вот код:

from netmiko import ConnectHandler 

site1_switches = {
    'visw0102' : {
        'device_type': 'hp_comware',
        'ip': '192.168.0.241',
        'username': 'admin',
        'password': 'password'
    },
    'visw0103' : {
        'device_type': 'hp_comware',
        'ip': '192.168.0.242',
        'username': 'admin',
        'password': 'password'
    },
    'visw0105' : {
        'device_type': 'hp_comware',
        'ip': '192.168.0.244',
        'username': 'admin',
        'password': 'password'
    }
}

vlans = {
    '300': 'TEST1',
    '310': 'TEST2',
    '320': 'TEST3',
    '330': 'TEST4',
    '340': 'TEST5'
}


for key, values in site1_switches.items():
  device_type = values.get('device_type', {})
  ip_address = values.get('ip', {})
  username = values.get('username', {})
  password = values.get('password', {})


net_connect = ConnectHandler(device_type=device_type, host=ip_address, username=username, password=password)

output = net_connect.send_command_timing(
    'y', 
    strip_prompt=False, 
    strip_command=False
)
output = net_connect.send_command_timing(
    '_cmdline-mode on', 
    strip_prompt=False, 
    strip_command=False
)
print (output)
if 'Continue' in output:
    output += net_connect.send_command_timing(
        'y', 
        strip_prompt=False, 
        strip_command=False
    )
print (output)
if 'ssword' in output:
    net_connect.send_command_timing(
        '512900',
        strip_prompt=False, 
        strip_command=False
    )
print (output)
output = net_connect.send_command_timing(
    'system-view',
    strip_prompt=False,
    strip_command=False
    )
print (output)

for tag, vlan_name in vlans.items():

    output = net_connect.send_command_timing(
            'vlan' + ' ' + tag,
            strip_prompt=False,
            strip_command=False
            )
    print (output)

    output = net_connect.send_command_timing(
            'description' + ' ' + vlan_name,
            strip_prompt=False,
            strip_command=False
            )
    print (output)

Команды выполнены успешно, но только для последней записи во вложенном словаре (VISW0105).Вот вывод:

administrator@vimgmt0103:~$ python3 test_netmiko.py
_cmdline-mode on
All commands can be displayed and executed. Continue? [Y/N]
_cmdline-mode on
All commands can be displayed and executed. Continue? [Y/N]y
Please input password:
_cmdline-mode on
All commands can be displayed and executed. Continue? [Y/N]y
Please input password:
system-view
System View: return to User View with Ctrl+Z.
[VISW0105]            <-- This is the last entry (switch) in the disctionary
vlan 300
[VISW0105-vlan300]
description TEST1
[VISW0105-vlan300]
vlan 310
[VISW0105-vlan310]
description TEST2
[VISW0105-vlan310]
vlan 320
[VISW0105-vlan320]
description TEST3
[VISW0105-vlan320]
vlan 330
[VISW0105-vlan330]
description TEST4
[VISW0105-vlan330]
vlan 340
[VISW0105-vlan340]
description TEST5
[VISW0105-vlan340]
administrator@vimgmt0103:~$

Я пытаюсь выяснить, почему он пропускает другие записи.Есть идеи?

Спасибо!

1 Ответ

0 голосов
/ 26 сентября 2019

Цикл выглядит следующим образом:

for key, values in site1_switches.items():
  device_type = values.get('device_type', {})
  ip_address = values.get('ip', {})
  username = values.get('username', {})
  password = values.get('password', {})

Все, что после этого не находится в цикле, потому что вы его не отступили.

Итак, с того момента, как цикл заканчивается, все относитсяк последнему элементу в site1_switches (потому что это элемент, на котором мы завершили цикл).

Попробуйте просто сделать отступ для всего, что ниже этого,

(то есть

for key, values in site1_switches.items():
  device_type = values.get('device_type', {})
  ip_address = values.get('ip', {})
  username = values.get('username', {})
  password = values.get('password', {})


  net_connect = ConnectHandler(device_type=device_type, host=ip_address, username=username, password=password)

и т. д.)

и посмотрите, что получится!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...