Я хотел бы попросить вас о помощи моего кода ниже.У меня проблема поиска похожая, как показано ниже, но вывод lldp отличается, я попытался применить то же самое и не удалось.Я не могу разобрать вывод lldp устройства на файл json.Для информации я использую библиотеку netmiko для подключения по ssh к каждому устройству для получения информации об имени хоста, ip и lldp.Пока что код способен извлекать и анализировать имя хоста и значение ip из вывода устройства в файл json ниже.
json1 = {
"channel": "scanner",
"action": "device_scan",
"table": "D2",
"device":[]
}
#data = {"hostname":"","ipaddress":"","lldpinfo": []}
data = "hostname","ipaddress","lldpinfo"
Это команды, отправляемые на устройство и возвращающие выходные данные, как требуется, и сохраняемые в файл json ниже
temp[data[0]] = connection.find_prompt().rstrip('>')
temp[data[1]] = device['ip']
temp[data[2]] = connection.send_command('show lldp neighbors')
json1["device"].append(temp)
with open('devices_info.json', 'w') as fp:
json.dump(json1, fp)
Приведенная выше команда вернет вывод и сохранит в файл json, структура lldp в json не такая, как требуется.См. Изображение ниже.
{"channel":"scanner","action":"device_scan","table":"D2","device":
[{"hostname":"rtr1.wtx","ipaddress":"10.10.1.1","lldpinfo":"\nLocal
Interface
Parent Interface Chassis Id Port info System Name\ge-
2/0/0 ae0 ac:4b:c8:92:67:c0 368
apg-hp \nge-2/0/1 ae0 ac:4b:c8:92:67:c0
369 apg-hp \nge-4/0/6 -
ac:4b:c8:92:67:c0 629 wtx-dl \nge-0/0/4 -
00:23:3e:58:3e:50 138739712 TVCX-vp \nge-0/0/2 -
ac:4b:c8:92:67:c0 gei_1/5 TVCX-vp \nge-3/3/0
- ac:4b:c8:92:67:c0 gei_2/3 TVCX-vp
\nge-2/2/4 - ac:4b:c8:92:67:c0 783
rtr-02-re \n\n{master}"}]}
Выше код, который может извлекать и анализировать значения для имени хоста, ipaddress и lldpinfo, но не для lldpinfoзначение не в правильном выводе.Ниже приведен точный исходный вывод lldp, возвращаемый устройством
**********SCAN DEVICES**********
Local Interface Parent Interface Chassis Id Port info
System Name
ge-2/0/0 ae0 ac:4b:c8:92:67:c0 368
apg-hp
ge-2/0/1 ae0 ac:4b:c8:92:67:c0 369
apg-hp
ge-4/0/6 - ac:4b:c8:92:67:c0 629
wtx-dl
ge-0/0/4 - ac:4b:c8:92:67:c0 138739712
TVCX-vp
ge-0/0/2 - ac:4b:c8:92:67:c0 gei_1/5
TVCX-vp
ge-3/3/0 - ac:4b:c8:92:67:c0 gei_2/3
TVCX-vp
ge-3/3/4 - ac:4b:c8:92:67:c0 783
rtr-02-re
{master}
Я бы хотел, чтобы вывод файла json lldpinfo был в формекак показано ниже
{
"channel": "scanner",
"action": "device_scan",
"table": "D2",
"device": [
{
"hostname": "rtr1.wtx",
"ipaddress": "10.10.1.1",
"lldpifo": [
{
"local-port": "xe-3/0/4.0",
"parent-interface": "ae31.0",
"chassis-id": "b0:c6:9a:63:80:40",
"port-info": "xe-0/0/0/0.0",
"system-name": "myhost"
}
]
]
}
Я проверил его, используя список словарей, как рекомендовано ранее, но получая сообщение об ошибке и имя хоста отсутствует.На сегодняшний день мне все еще не удалось правильно проанализировать вывод lldp в файл json выше.Я ценю вашу поддержку в этом вопросе.Спасибо.