Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 16 additions & 15 deletions testcloud/domain_configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,36 +216,37 @@ 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:
raise NotImplementedError()


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'<mac address="{self.mac_address}"/>' if self.mac_address else ''
return """
<interface type='network'>
<mac address="{mac_address}"/>
{mac}
<source network='default'/>
<model type='virtio'/>
</interface>
""".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 = [
Expand All @@ -256,13 +257,14 @@ def __init__(self, mac_address, port=6666, device_type="virtio-net-pci") -> None
]

def generate(self):
mac = f'<mac address="{self.mac_address}"/>' if self.mac_address else ''
return """
<interface type='user'>
<mac address="{mac_address}"/>
{mac}
<model type='virtio'/>
</interface>
""".format(
mac_address=self.mac_address,
mac=mac,
)


Expand Down Expand Up @@ -325,6 +327,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]
Expand Down Expand Up @@ -445,7 +448,7 @@ def generate(self) -> str:
<devices>
<emulator>{emulator_path}</emulator>
{storage_devices}
{network_configuraton}
{network_configuration}
<serial type='pty'>
{serial_log_configuraton}
<target port='0'/>
Expand Down Expand Up @@ -475,7 +478,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 "",
Expand Down Expand Up @@ -510,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)
Expand All @@ -535,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")
Expand Down
10 changes: 0 additions & 10 deletions testcloud/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down