netbox-agent icon indicating copy to clipboard operation
netbox-agent copied to clipboard

Fix KeyError: 'pvid' in lldp.py

Open illes opened this issue 2 years ago • 3 comments

lldp.eth0.vlan.vlan-id=300
lldp.eth0.vlan.pvid=yes
lldp.eth0.vlan=VLAN300
Version: lldpd 1.0.11
Traceback (most recent call last):
  File "/root/.local/bin/netbox_agent", line 8, in <module>
    sys.exit(main())
  File "/root/.local/lib/python3.10/site-packages/netbox_agent/cli.py", line 44, in main
    return run(config)
  File "/root/.local/lib/python3.10/site-packages/netbox_agent/cli.py", line 39, in run
    server.netbox_create_or_update(config)
  File "/root/.local/lib/python3.10/site-packages/netbox_agent/server.py", line 292, in netbox_create_or_update
    self.network.create_or_update_netbox_network_cards()
  File "/root/.local/lib/python3.10/site-packages/netbox_agent/network.py", line 417, in create_or_update_netbox_network_cards
    ret, interface = self.reset_vlan_on_interface(nic, interface)
  File "/root/.local/lib/python3.10/site-packages/netbox_agent/network.py", line 234, in reset_vlan_on_interface
    pvid_vlan = [key for (key, value) in lldp_vlan.items() if value['pvid']]
  File "/root/.local/lib/python3.10/site-packages/netbox_agent/network.py", line 234, in <listcomp>
    pvid_vlan = [key for (key, value) in lldp_vlan.items() if value['pvid']]
KeyError: 'pvid'
lldp_vlan := {'300': {'pvid': True}, 'VLAN300': {}}

illes avatar Apr 26 '22 10:04 illes

Fix KeyError: 'pvid' in lldp.py #223 vid = value.replace('vlan-', '').replace('VLAN', '')

It still gives an error

Traceback (most recent call last): File "/usr/lib64/python3.6/runpy.py", line 193, in _run_module_as_main "main", mod_spec) File "/usr/lib64/python3.6/runpy.py", line 85, in _run_code exec(code, run_globals) File "/opt/netbox_agent/netbox_agent/cli.py", line 54, in main() File "/opt/netbox_agent/netbox_agent/cli.py", line 50, in main return run(config) File "/opt/netbox_agent/netbox_agent/cli.py", line 43, in run server.netbox_create_or_update(config) File "/opt/netbox_agent/netbox_agent/server.py", line 413, in netbox_create_or_update self.network.create_or_update_netbox_network_cards() File "/opt/netbox_agent/netbox_agent/network.py", line 443, in create_or_update_netbox_network_cards ret, interface = self.reset_vlan_on_interface(nic, interface) File "/opt/netbox_agent/netbox_agent/network.py", line 248, in reset_vlan_on_interface pvid_vlan = [key for (key, value) in lldp_vlan.items() if value['pvid']] File "/opt/netbox_agent/netbox_agent/network.py", line 248, in pvid_vlan = [key for (key, value) in lldp_vlan.items() if value['pvid']] KeyError: 'pvid'

rosberen avatar Apr 26 '22 20:04 rosberen

You are right that KeyError: 'pvid' can still happen, though not with the minimal example I provided. To catch that case, I added an example and tests.

illes avatar Apr 29 '22 07:04 illes

@illes @rosberen sorry for the delay, is this PR ready for you ?

cyrinux avatar Nov 14 '22 09:11 cyrinux