Skip to content

Commit 04b4b44

Browse files
authored
Merge pull request #1438 from StoffelCPR/devel
Fix netbox_inventory service query
2 parents ce2f7cb + b8e70d2 commit 04b4b44

File tree

5 files changed

+33
-11
lines changed

5 files changed

+33
-11
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
bugfixes:
2+
- nb_inventory - Fix service collection for version greater than 4.3

plugins/inventory/nb_inventory.py

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1328,6 +1328,15 @@ def refresh_services(self):
13281328

13291329
if self.fetch_all:
13301330
services = self.get_resource_list(url)
1331+
elif self.api_version >= version.parse("4.3.0"):
1332+
services = self.get_resource_list_chunked(
1333+
api_url=url,
1334+
query_key="parent_object_id",
1335+
# Query only affected devices and vms and sanitize the list to only contain every ID once
1336+
query_values=set(
1337+
chain(self.vms_lookup.keys(), self.devices_lookup.keys())
1338+
),
1339+
)
13311340
else:
13321341
device_services = self.get_resource_list_chunked(
13331342
api_url=url,
@@ -1349,15 +1358,26 @@ def refresh_services(self):
13491358
for service in services:
13501359
service_id = service["id"]
13511360

1352-
if service.get("device"):
1353-
self.device_services_lookup[service["device"]["id"]][
1354-
service_id
1355-
] = service
1361+
if self.api_version >= version.parse("4.3.0"):
1362+
if service.get("parent_object_type") == "dcim.device":
1363+
self.device_services_lookup[service["parent_object_id"]][
1364+
service_id
1365+
] = service
13561366

1357-
if service.get("virtual_machine"):
1358-
self.vm_services_lookup[service["virtual_machine"]["id"]][
1359-
service_id
1360-
] = service
1367+
if service.get("parent_object_type") == "virtualization.virtualmachine":
1368+
self.vm_services_lookup[service["parent_object_id"]][
1369+
service_id
1370+
] = service
1371+
else:
1372+
if service.get("device"):
1373+
self.device_services_lookup[service["device"]["id"]][
1374+
service_id
1375+
] = service
1376+
1377+
if service.get("virtual_machine"):
1378+
self.vm_services_lookup[service["virtual_machine"]["id"]][
1379+
service_id
1380+
] = service
13611381

13621382
def refresh_virtual_disks(self):
13631383
url_vm_virtual_disks = (

tests/integration/targets/inventory-v4.1/compare_inventory_json.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def main():
141141

142142
if result:
143143
# Dictionary is not empty - print differences
144-
print(json.dumps(result, sort_keys=True, indent=4))
144+
print(result.to_json(indent=4))
145145
sys.exit(1)
146146
else:
147147
# Success, no differences

tests/integration/targets/inventory-v4.2/compare_inventory_json.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def main():
141141

142142
if result:
143143
# Dictionary is not empty - print differences
144-
print(json.dumps(result, sort_keys=True, indent=4))
144+
print(result.to_json(indent=4))
145145
sys.exit(1)
146146
else:
147147
# Success, no differences

tests/integration/targets/inventory-v4.3/compare_inventory_json.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def main():
141141

142142
if result:
143143
# Dictionary is not empty - print differences
144-
print(json.dumps(result, sort_keys=True, indent=4))
144+
print(result.to_json(indent=4))
145145
sys.exit(1)
146146
else:
147147
# Success, no differences

0 commit comments

Comments
 (0)