Solvik / netbox-agent

Netbox agent to run on your infrastructure's servers
Apache License 2.0
287 stars 74 forks source link

Fix KeyError: 'pvid' in lldp.py #223

Open illes opened 2 years ago

illes commented 2 years ago
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': {}}
rosberen commented 2 years ago

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'

illes commented 2 years ago

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.

cyrinux commented 1 year ago

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