diff --git a/homer/netbox.py b/homer/netbox.py index 0578124..7a1c391 100644 --- a/homer/netbox.py +++ b/homer/netbox.py @@ -148,6 +148,15 @@ def _get_vlans(self) -> Dict[int, Any]: for tagged_vlan in interface.tagged_vlans: if tagged_vlan.vid not in vlans: vlans[tagged_vlan.vid] = tagged_vlan + if interface.name.startswith('irb'): + vid = int(interface.name.split('.')[1]) + if vid not in vlans: + vlan = self._api.ipam.vlans.get(vid=vid) + try: + vlans[vlan.vid] = vlan + except AttributeError as e: + raise HomerError(f'IRB interface {interface} does not match any Vlan in Netbox') from e + return vlans diff --git a/homer/tests/unit/test_netbox.py b/homer/tests/unit/test_netbox.py index 9da53fe..857bc68 100644 --- a/homer/tests/unit/test_netbox.py +++ b/homer/tests/unit/test_netbox.py @@ -210,10 +210,12 @@ def test_get_vlans(self): interface1.tagged_vlans = [NetboxObject(), NetboxObject()] interface1.tagged_vlans[0].vid = 667 interface1.tagged_vlans[1].vid = 667 + interface1.name = 'int1' interface2 = NetboxObject() # This is a fake interface object interface2.untagged_vlan = NetboxObject() # That interface have fake tagged and untagged vlans interface2.untagged_vlan.vid = 666 interface2.tagged_vlans = None + interface2.name = 'int2' self.netbox_api.dcim.interfaces.filter.return_value = [interface1, interface2] # We want the function with the fake inbound data to match the one untagged and tagged vlans assert self.netbox_data['vlans'] == {666: interface1.untagged_vlan, 667: interface1.tagged_vlans[0]}