Невозможно правильно сохранить определенные выходные данные сетевого устройства lldp (LLDP) в файл JSON - PullRequest
0 голосов
/ 27 февраля 2019

Я хотел бы попросить вас о помощи моего кода ниже.У меня проблема поиска похожая, как показано ниже, но вывод 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}"}]}

I attached image the json output viewer

Выше код, который может извлекать и анализировать значения для имени хоста, 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}

lldp output from device

Я бы хотел, чтобы вывод файла 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 выше.Я ценю вашу поддержку в этом вопросе.Спасибо.

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