From eaa3dc163444e8d656825da9f66caf0ae823a750 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Thu, 22 May 2025 11:44:02 +0200 Subject: [PATCH 1/3] Fix typo in variable name network_configuraton --- testcloud/domain_configuration.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/testcloud/domain_configuration.py b/testcloud/domain_configuration.py index e73b680..8a9fad5 100644 --- a/testcloud/domain_configuration.py +++ b/testcloud/domain_configuration.py @@ -445,7 +445,7 @@ def generate(self) -> str: {emulator_path} {storage_devices} - {network_configuraton} + {network_configuration} {serial_log_configuraton} @@ -475,7 +475,7 @@ def generate(self) -> str: system_architecture=self.system_architecture.generate(), emulator_path=self.get_emulator(), storage_devices=self.generate_storage_devices(), - network_configuraton=self.generate_network_devices(), + network_configuration=self.generate_network_devices(), serial_log_configuraton=self.generate_serial_log_conf(), tpm=self.tpm_configuration.generate() if self.tpm_configuration else "", virtiofs_head=self.generate_virtiofs_head() if self.virtiofs_configuration else "", From 17893a269c69a54220e180e84ef4c198b4ef1bc6 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Thu, 22 May 2025 11:44:20 +0200 Subject: [PATCH 2/3] Add type hint to network_devices --- testcloud/domain_configuration.py | 1 + 1 file changed, 1 insertion(+) diff --git a/testcloud/domain_configuration.py b/testcloud/domain_configuration.py index 8a9fad5..e31bee7 100644 --- a/testcloud/domain_configuration.py +++ b/testcloud/domain_configuration.py @@ -325,6 +325,7 @@ class DomainConfiguration: system_architecture: Optional[ArchitectureConfiguration] storage_devices: list[StorageDeviceConfiguration] network_configuration: Optional[NetworkConfiguration] + network_devices: list[NetworkConfiguration] tpm_configuration: Optional[TPMConfiguration] virtiofs_configuration: list[VIRTIOFSConfiguration] iommu_configuration: Optional[IOMMUConfiguration] From b9e446e2b135218c17d3e8693e0e0f192a277617 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Thu, 22 May 2025 11:48:40 +0200 Subject: [PATCH 3/3] Make mac address generation optional libvirt will generate a mac address if it's unspecified. --- testcloud/domain_configuration.py | 26 +++++++++++++------------- testcloud/util.py | 10 ---------- 2 files changed, 13 insertions(+), 23 deletions(-) diff --git a/testcloud/domain_configuration.py b/testcloud/domain_configuration.py index e31bee7..f07bd06 100644 --- a/testcloud/domain_configuration.py +++ b/testcloud/domain_configuration.py @@ -216,11 +216,11 @@ def generate(self): class NetworkConfiguration: - mac_address: str + mac_address: Optional[str] additional_qemu_args: list[str] def __init__(self) -> None: - self.mac_address = "" + self.mac_address = None self.additional_qemu_args = [] def generate(self) -> str: @@ -228,24 +228,25 @@ def generate(self) -> str: class SystemNetworkConfiguration(NetworkConfiguration): - def __init__(self, mac_address) -> None: + def __init__(self, mac_address=None) -> None: super().__init__() self.mac_address = mac_address def generate(self): + mac = f'' if self.mac_address else '' return """ - + {mac} """.format( - mac_address=self.mac_address, + mac=mac, ) class UserNetworkConfiguration(NetworkConfiguration): - def __init__(self, mac_address, port=6666, device_type="virtio-net-pci") -> None: + def __init__(self, mac_address=None, port=6666, device_type="virtio-net-pci") -> None: super().__init__() self.mac_address = mac_address self.additional_qemu_args = [ @@ -256,13 +257,14 @@ def __init__(self, mac_address, port=6666, device_type="virtio-net-pci") -> None ] def generate(self): + mac = f'' if self.mac_address else '' return """ - + {mac} """.format( - mac_address=self.mac_address, + mac=mac, ) @@ -511,7 +513,7 @@ def _get_default_domain_conf( desired_arch = desired_arch or platform.machine() vcpus = vcpus or config_data.VCPUS ram = ram or config_data.RAM - mac_address = mac_address or util.generate_mac_address() + mac_address = mac_address kvm = True if (desired_arch == platform.machine() and os.path.exists("/dev/kvm")) else False domain_configuration = DomainConfiguration(name) @@ -536,17 +538,15 @@ def _get_default_domain_conf( if connection == "qemu:///system": domain_configuration.network_devices.append(SystemNetworkConfiguration(mac_address=mac_address)) for i in range(nic_count - 1): - mac_address = util.generate_mac_address() - domain_configuration.network_devices.append(SystemNetworkConfiguration(mac_address=mac_address)) + domain_configuration.network_devices.append(SystemNetworkConfiguration()) elif connection == "qemu:///session": port = util.spawn_instance_port_file(name) device_type = "virtio-net-pci" if not util.needs_legacy_net(backingstore_image.name) else "e1000" domain_configuration.network_devices.append(UserNetworkConfiguration(mac_address=mac_address, port=port, device_type=device_type)) for i in range(nic_count - 1): - mac_address = util.generate_mac_address() domain_configuration.network_devices.append( - UserNetworkConfiguration(mac_address=mac_address, port=port, device_type=device_type) + UserNetworkConfiguration(port=port, device_type=device_type) ) else: raise TestcloudInstanceError("Unsupported connection type") diff --git a/testcloud/util.py b/testcloud/util.py index f7feafa..1726883 100644 --- a/testcloud/util.py +++ b/testcloud/util.py @@ -104,16 +104,6 @@ def spawn_instance_port_file(instance_name): return port -def generate_mac_address(): - """Create a workable mac address for our instances.""" - - hex_mac = [0x52, 0x54, 0x00] # These 3 are the prefix libvirt uses - hex_mac += [random.randint(0x00, 0xFF) for x in range(3)] - mac = ":".join(hex(x)[2:] for x in hex_mac) - - return mac - - def verify_url(url: str) -> str: if not url: raise exceptions.TestcloudImageError