From 111b62d80677fe6764e7dba0deaede25568804be Mon Sep 17 00:00:00 2001 From: fuzzbawl Date: Wed, 24 Sep 2025 19:13:17 -0400 Subject: [PATCH 1/2] Update create_vm.py Fixes bug #116, adds a VirtualDisk if a disk name is set --- scripts/create_vm.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/scripts/create_vm.py b/scripts/create_vm.py index c7f3757..45de911 100644 --- a/scripts/create_vm.py +++ b/scripts/create_vm.py @@ -7,14 +7,14 @@ https://github.com/netbox-community/netbox/issues/648 """ -from dcim.models import DeviceRole, Platform +from dcim.models import DeviceRole, Platform, MACAddress from django.core.exceptions import ObjectDoesNotExist from extras.models import Tag from ipam.choices import IPAddressStatusChoices from ipam.models import IPAddress, VRF from tenancy.models import Tenant from virtualization.choices import VirtualMachineStatusChoices -from virtualization.models import Cluster, VirtualMachine, VMInterface +from virtualization.models import Cluster, VirtualMachine, VMInterface, VirtualDisk from extras.scripts import Script, StringVar, IPAddressWithMaskVar, ObjectVar, MultiObjectVar, ChoiceVar, IntegerVar, TextVar class NewVM(Script): @@ -39,7 +39,8 @@ class Meta: mac_address = StringVar(label="MAC address", required=False) vcpus = IntegerVar(label="VCPUs", required=False) memory = IntegerVar(label="Memory (MB)", required=False) - disk = IntegerVar(label="Disk (GB)", required=False) + disk_name = StringVar(label="Disk Name", required=False) + disk_size = IntegerVar(label="Disk (MB)", required=False) comments = TextVar(label="Comments", required=False) def run(self, data, commit): @@ -51,7 +52,6 @@ def run(self, data, commit): platform=data["platform"], vcpus=data["vcpus"], memory=data["memory"], - disk=data["disk"], comments=data["comments"], tenant=data.get("tenant"), ) @@ -61,11 +61,27 @@ def run(self, data, commit): vminterface = VMInterface( name=data["interface_name"], - mac_address=data["mac_address"], virtual_machine=vm, ) vminterface.full_clean() vminterface.save() + vmmacaddr = MACAddress( + mac_address = data["mac_address"], + assigned_object = vminterface + ) + vmmacaddr.full_clean() + vmmacaddr.save() + setattr(vminterface, "primary_mac_address", vmmacaddr) + vminterface.full_clean() + vminterface.save() + if data["disk_name"]: + vmdisk = VirtualDisk( + name=data["disk_name"], + virtual_machine=vm, + size=data["disk_size"] + ) + vmdisk.full_clean() + vmdisk.save() def add_addr(addr, family): if not addr: From d5193c10f4a0c83f8eb39ed2d62ecb18d7cec43b Mon Sep 17 00:00:00 2001 From: fuzzbawl Date: Sat, 1 Nov 2025 20:10:40 -0400 Subject: [PATCH 2/2] Update create_vm.py --- scripts/create_vm.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/scripts/create_vm.py b/scripts/create_vm.py index 45de911..6a84c4e 100644 --- a/scripts/create_vm.py +++ b/scripts/create_vm.py @@ -61,19 +61,22 @@ def run(self, data, commit): vminterface = VMInterface( name=data["interface_name"], - virtual_machine=vm, + virtual_machine=vm ) vminterface.full_clean() vminterface.save() - vmmacaddr = MACAddress( - mac_address = data["mac_address"], - assigned_object = vminterface - ) - vmmacaddr.full_clean() - vmmacaddr.save() - setattr(vminterface, "primary_mac_address", vmmacaddr) - vminterface.full_clean() - vminterface.save() + + if data["mac_address"]: + vmmacaddr = MACAddress( + mac_address = data["mac_address"], + assigned_object = vminterface + ) + vmmacaddr.full_clean() + vmmacaddr.save() + setattr(vminterface, "primary_mac_address", vmmacaddr) + vminterface.full_clean() + vminterface.save() + if data["disk_name"]: vmdisk = VirtualDisk( name=data["disk_name"],