Skip to content

Commit 8084fbd

Browse files
tkn2023EagleIJoe
andauthored
#1141 Added virtual_disks to nb_inventory.py (#1188)
* Added virtual_disks to nb_inventory.py * Update nb_inventory.py formatting * Increase version * added tests * added virtual_disks to test data * Update test-inventory.yml Added virtual_disks * Update data.json added virtual_disks * Update test-inventory.json Updated virtual_disks data in inventory file * Update test-inventory.json corrected syntax error * Update test-inventory.json syntax error corrected * Update test-inventory.json No vdisks? * Update test-inventory.json removed duplicate virtual disks * Update test-inventory.json No vm disk in test enviroment test * Create data.json add virtual disks to test100-vm * Update netbox-deploy.py added virtual disks to deploy * Update test-inventory.json added to inventory * Update netbox-deploy.py changed virtual machine to id * #1141 2 (#2) * Added virtual_disks to deploy * Added virtual_disks to inventory * Update data.json with virtual disks * Update test_nb_inventory.py * Update test-inventory.yml * fix integration tests --------- Co-authored-by: = <=> * fix linting * fix unit tests * fix integration tests * fix integration tests * fix inventory result files --------- Co-authored-by: Martin Adler <[email protected]> Co-authored-by: = <=>
1 parent c039789 commit 8084fbd

16 files changed

+799
-267
lines changed

plugins/inventory/nb_inventory.py

+49-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
- Nikhil Singh Baliyan (@nikkytub)
1414
- Sander Steffann (@steffann)
1515
- Douglas Heriot (@DouglasHeriot)
16+
- Thore Knickrehm (@tkn2023)
1617
short_description: NetBox inventory source
1718
description:
1819
- Get inventory hosts from NetBox
@@ -99,6 +100,12 @@
99100
default: True
100101
type: boolean
101102
version_added: "0.2.1"
103+
virtual_disks:
104+
description:
105+
- If True, it adds the virtual disks information in host vars.
106+
default: False
107+
type: boolean
108+
version_added: "3.18.0"
102109
interfaces:
103110
description:
104111
- If True, it adds the device or virtual machine interface information in host vars.
@@ -592,7 +599,12 @@ def group_extractors(self):
592599
"services": self.extract_services,
593600
}
594601
)
595-
602+
if self.virtual_disks:
603+
extractors.update(
604+
{
605+
"virtual_disks": self.extract_virtual_disks,
606+
}
607+
)
596608
if self.interfaces:
597609
extractors.update(
598610
{
@@ -845,6 +857,15 @@ def extract_tags(self, host):
845857
except Exception:
846858
return host["tags"]
847859

860+
def extract_virtual_disks(self, host):
861+
try:
862+
virtual_disks_lookup = self.vm_virtual_disks_lookup
863+
virtual_disks = deepcopy(list(virtual_disks_lookup[host["id"]].values()))
864+
865+
return virtual_disks
866+
except Exception:
867+
return
868+
848869
def extract_interfaces(self, host):
849870
try:
850871
interfaces_lookup = (
@@ -1306,6 +1327,30 @@ def refresh_services(self):
13061327
service_id
13071328
] = service
13081329

1330+
def refresh_virtual_disks(self):
1331+
url_vm_virtual_disks = (
1332+
self.api_endpoint + "/api/virtualization/virtual-disks/?limit=0"
1333+
)
1334+
1335+
vm_virtual_disks = []
1336+
1337+
if self.fetch_all:
1338+
vm_virtual_disks = self.get_resource_list(url_vm_virtual_disks)
1339+
else:
1340+
vm_virtual_disks = self.get_resource_list_chunked(
1341+
api_url=url_vm_virtual_disks,
1342+
query_key="virtual_machine_id",
1343+
query_values=self.vms_lookup.keys(),
1344+
)
1345+
1346+
self.vm_virtual_disks_lookup = defaultdict(dict)
1347+
1348+
for virtual_disk in vm_virtual_disks:
1349+
virtual_disk_id = virtual_disk["id"]
1350+
vm_id = virtual_disk["virtual_machine"]["id"]
1351+
1352+
self.vm_virtual_disks_lookup[vm_id][virtual_disk_id] = virtual_disk
1353+
13091354
def refresh_interfaces(self):
13101355
url_device_interfaces = self.api_endpoint + "/api/dcim/interfaces/?limit=0"
13111356
url_vm_interfaces = (
@@ -1452,6 +1497,8 @@ def lookup_processes(self):
14521497
self.refresh_manufacturers_lookup,
14531498
self.refresh_clusters_lookup,
14541499
]
1500+
if self.virtual_disks:
1501+
lookups.append(self.refresh_virtual_disks)
14551502

14561503
if self.interfaces:
14571504
lookups.append(self.refresh_interfaces)
@@ -2055,6 +2102,7 @@ def parse(self, inventory, loader, path, cache=True):
20552102
self.flatten_local_context_data = self.get_option("flatten_local_context_data")
20562103
self.flatten_custom_fields = self.get_option("flatten_custom_fields")
20572104
self.plurals = self.get_option("plurals")
2105+
self.virtual_disks = self.get_option("virtual_disks")
20582106
self.interfaces = self.get_option("interfaces")
20592107
self.services = self.get_option("services")
20602108
self.site_data = self.get_option("site_data")

tests/integration/netbox-deploy.py

+9
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,15 @@ def make_netbox_calls(endpoint, payload):
466466
test101_vm = nb.virtualization.virtual_machines.get(name="test101-vm")
467467
test_spaces_vm = nb.virtualization.virtual_machines.get(name="Test VM With Spaces")
468468

469+
# Create Virtaul Disks
470+
virtual_disks = [
471+
{"name": "disk1", "size": 60, "virtual_machine": test100_vm.id},
472+
{"name": "disk2", "size": 110, "virtual_machine": test100_vm.id},
473+
]
474+
created_virtual_disks = make_netbox_calls(
475+
nb.virtualization.virtual_disks, virtual_disks
476+
)
477+
469478
## Create Virtual Machine Interfaces
470479
virtual_machines_intfs = [
471480
# Create test100-vm intfs

0 commit comments

Comments
 (0)