|
13 | 13 | - Nikhil Singh Baliyan (@nikkytub)
|
14 | 14 | - Sander Steffann (@steffann)
|
15 | 15 | - Douglas Heriot (@DouglasHeriot)
|
| 16 | + - Thore Knickrehm (@tkn2023) |
16 | 17 | short_description: NetBox inventory source
|
17 | 18 | description:
|
18 | 19 | - Get inventory hosts from NetBox
|
|
99 | 100 | default: True
|
100 | 101 | type: boolean
|
101 | 102 | 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" |
102 | 109 | interfaces:
|
103 | 110 | description:
|
104 | 111 | - If True, it adds the device or virtual machine interface information in host vars.
|
@@ -592,7 +599,12 @@ def group_extractors(self):
|
592 | 599 | "services": self.extract_services,
|
593 | 600 | }
|
594 | 601 | )
|
595 |
| - |
| 602 | + if self.virtual_disks: |
| 603 | + extractors.update( |
| 604 | + { |
| 605 | + "virtual_disks": self.extract_virtual_disks, |
| 606 | + } |
| 607 | + ) |
596 | 608 | if self.interfaces:
|
597 | 609 | extractors.update(
|
598 | 610 | {
|
@@ -845,6 +857,15 @@ def extract_tags(self, host):
|
845 | 857 | except Exception:
|
846 | 858 | return host["tags"]
|
847 | 859 |
|
| 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 | + |
848 | 869 | def extract_interfaces(self, host):
|
849 | 870 | try:
|
850 | 871 | interfaces_lookup = (
|
@@ -1306,6 +1327,30 @@ def refresh_services(self):
|
1306 | 1327 | service_id
|
1307 | 1328 | ] = service
|
1308 | 1329 |
|
| 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 | + |
1309 | 1354 | def refresh_interfaces(self):
|
1310 | 1355 | url_device_interfaces = self.api_endpoint + "/api/dcim/interfaces/?limit=0"
|
1311 | 1356 | url_vm_interfaces = (
|
@@ -1452,6 +1497,8 @@ def lookup_processes(self):
|
1452 | 1497 | self.refresh_manufacturers_lookup,
|
1453 | 1498 | self.refresh_clusters_lookup,
|
1454 | 1499 | ]
|
| 1500 | + if self.virtual_disks: |
| 1501 | + lookups.append(self.refresh_virtual_disks) |
1455 | 1502 |
|
1456 | 1503 | if self.interfaces:
|
1457 | 1504 | lookups.append(self.refresh_interfaces)
|
@@ -2055,6 +2102,7 @@ def parse(self, inventory, loader, path, cache=True):
|
2055 | 2102 | self.flatten_local_context_data = self.get_option("flatten_local_context_data")
|
2056 | 2103 | self.flatten_custom_fields = self.get_option("flatten_custom_fields")
|
2057 | 2104 | self.plurals = self.get_option("plurals")
|
| 2105 | + self.virtual_disks = self.get_option("virtual_disks") |
2058 | 2106 | self.interfaces = self.get_option("interfaces")
|
2059 | 2107 | self.services = self.get_option("services")
|
2060 | 2108 | self.site_data = self.get_option("site_data")
|
|
0 commit comments