From 8678f18ef7c83d76328e6aef3498383db997c923 Mon Sep 17 00:00:00 2001 From: koalajoe23 Date: Fri, 25 Jul 2025 01:08:16 +0200 Subject: [PATCH] fix: return device's primary ip for netbox services not explicitly bound to any IP --- netbox_prometheus_sd/api/utils.py | 2 ++ netbox_prometheus_sd/tests/test_serializers.py | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/netbox_prometheus_sd/api/utils.py b/netbox_prometheus_sd/api/utils.py index 7eedfe9..2f24d97 100644 --- a/netbox_prometheus_sd/api/utils.py +++ b/netbox_prometheus_sd/api/utils.py @@ -179,6 +179,8 @@ def extract_service_ips(obj, labels: LabelDict): labels["ipaddresses"] = ",".join( [str(ipaddr.address.ip) for ipaddr in obj.ipaddresses.all()] ) + elif hasattr(obj.parent, "primary_ip") and obj.parent.primary_ip is not None: + labels["ipaddresses"] = str(IPNetwork(obj.parent.primary_ip.address).ip) def extract_service_ports(obj, labels: LabelDict): diff --git a/netbox_prometheus_sd/tests/test_serializers.py b/netbox_prometheus_sd/tests/test_serializers.py index 8970d9f..23668ce 100755 --- a/netbox_prometheus_sd/tests/test_serializers.py +++ b/netbox_prometheus_sd/tests/test_serializers.py @@ -493,6 +493,11 @@ def test_device_service_full_to_target(self): {"__meta_netbox_primary_ip6": "2001:db8:1701::2"}, data["labels"] ) ) + self.assertTrue( + utils.dictContainsSubset( + {"__meta_netbox_ipaddresses": "2001:db8:1701::2"}, data["labels"] + ) + ) def test_vm_service_full_to_target(self): vm = utils.build_vm_full("vm-full-01.example.com") @@ -576,3 +581,8 @@ def test_vm_service_full_to_target(self): {"__meta_netbox_primary_ip6": "2001:db8:1701::2"}, data["labels"] ) ) + self.assertTrue( + utils.dictContainsSubset( + {"__meta_netbox_ipaddresses": "2001:db8:1701::2"}, data["labels"] + ) + )