【问题标题】:loop through a nested dictionary to connect in multiple vendor devices in Napalm循环遍历嵌套字典以连接 Napalm 中的多个供应商设备
【发布时间】:2023-06-07 03:24:01
【问题描述】:

我安装了 NAPALM,并努力一次从单个设备获取事实。但是我让事情变得有点不同,现在我正在尝试使用嵌套字典连接到我的设备,但出现错误。

import napalm
from napalm_ros import ros


database_devices={
    "cisco":{
    "hostname":"152.0.0.2",
    "type":"ios",
    "username":"cisco",
    "password":"cisco",
    "optional_args":{"secret" : "cisco"}
},
"mikrotik":{
    "hostname":"152.0.0.2",
    "type":"ros",
    "username":"mikrotik",
    "password":"mikrotik",
    "optional_args":{"port" :  "8728 "}
}
}


for key,values in database_devices.items():
    print("Connecting to " + key)
    driver=napalm.get_network_driver(values.get("type",{}))

    device=driver(
    hostname=values.get("hostname",{})
    username=values.get("username",{})
    password=values.get("password"),{})
    optional_args=values.get("optional_args",{})


    device.open()

我尝试在 device=driver 中的设备之间添加逗号,但我也无法连接。 而且我认为当我可以解决这个问题时,我会遇到另一个问题,我的 optional_args 值在 cisco 和 mikrotik 中是不同的,在 cisco 中,我的可选 arg 是我的启用密码,在 mikrotik 中是一个端口。我如何将这些值放入我的 for ? 感谢您的帮助。

【问题讨论】:

  • 你遇到了什么错误?
  • Unmatched ")" 这个错误...但是我数了一下,) 的数量还可以..
  • "driver(" 缺少一个 ")"
  • 我不认为,我尝试添加一个新的或删除,仍然是同样的错误。

标签: ios python-3.x network-programming cisco-ios napalm


【解决方案1】:

请试试这个它对我有用。让我知道 nested dictionary

for k,v in database_devices.items():
      print('hostname '+v['hostname'])
      print('type:',v['type'])
      print('username: ',v['username'])
      print('password: ',v['password'])
      print('optional_args ',v['optional_args'])

【讨论】:

    【解决方案2】:

    您可以尝试一下吗,因为您的数据在嵌套字典中 对于 database_devices.items() 中的键、值: values[1].get('hostname',{})

    【讨论】:

    • tks,我可以,但如果我这样做了,我就不能从 cisco 转到 mikrotik...我将留在同一个设备供应商。