Skip to content

Commit ebcd240

Browse files
committed
netbox2aquilon: Add support for multiple VM disks
As added in NetBox 3.7.5.
1 parent 5d8915b commit ebcd240

File tree

2 files changed

+41
-8
lines changed

2 files changed

+41
-8
lines changed

aquilon/netbox2aquilon.py

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -153,14 +153,35 @@ def _netbox_copy_vm(self, virtual_machine):
153153
'--memory', f'{virtual_machine.memory}',
154154
])
155155

156-
cmds.append([
157-
'add_disk',
158-
'--machine', f'{virtual_machine.aq_machine_name}',
159-
'--disk', 'sda',
160-
'--controller', 'sata',
161-
'--size', f'{virtual_machine.disk}',
162-
'--boot',
163-
])
156+
# Check if VM has any new-style virtual disks defined,
157+
# If so, use them and set the first as bootable,
158+
# If not, fall back to the classic single bootable disk method.
159+
virtual_disks = self.get_disks_from_device(virtual_machine)
160+
if virtual_disks:
161+
boot = True
162+
for disk in virtual_disks:
163+
cmd = [
164+
'add_disk',
165+
'--machine', f'{virtual_machine.aq_machine_name}',
166+
'--disk', f'{disk.name}',
167+
'--controller', 'sata',
168+
'--size', f'{disk.size}',
169+
]
170+
if boot:
171+
cmd.append('--boot')
172+
boot = False
173+
if disk.description:
174+
cmd += ['--comments', f'"{disk.description}"']
175+
cmds.append(cmd)
176+
else:
177+
cmds.append([
178+
'add_disk',
179+
'--machine', f'{virtual_machine.aq_machine_name}',
180+
'--disk', 'sda',
181+
'--controller', 'sata',
182+
'--size', f'{virtual_machine.disk}',
183+
'--boot',
184+
])
164185

165186
return cmds
166187

aquilon/scd_netbox.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,15 @@ def get_addresses_from_interface(self, interface):
183183
)
184184

185185
return ipv4_addresses
186+
187+
def get_disks_from_device(self, device):
188+
"""
189+
Get all virtual disks associated with a virtual machine
190+
"""
191+
if isinstance(device, pynetbox.models.virtualization.VirtualMachines):
192+
filtered_disks = self.netbox.virtualization.virtual_disks.filter(virtual_machine_id=device.id)
193+
else:
194+
logging.error('Unsupported device type for disks "%s"', type(device))
195+
sys.exit(1)
196+
197+
return filtered_disks

0 commit comments

Comments
 (0)