From 9bd2d82999eac1d27c6fc14ebe6e0e298435b2b6 Mon Sep 17 00:00:00 2001
From: Manuel Bentele
Date: Wed, 10 Nov 2021 09:41:56 +0100
Subject: Enumerate target names of disk devices correctly
---
.../VirtualizationConfigurationQemuUtils.java | 40 +++++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)
(limited to 'src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationQemuUtils.java')
diff --git a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationQemuUtils.java b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationQemuUtils.java
index 06091c0..1befdc4 100644
--- a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationQemuUtils.java
+++ b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationQemuUtils.java
@@ -1,9 +1,11 @@
package org.openslx.virtualization.configuration;
import java.util.ArrayList;
+import java.util.function.Predicate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.openslx.libvirt.domain.Domain;
import org.openslx.libvirt.domain.device.Disk;
import org.openslx.libvirt.domain.device.Disk.BusType;
import org.openslx.virtualization.Version;
@@ -109,7 +111,7 @@ public class VirtualizationConfigurationQemuUtils
* @param deviceNumber number of the device.
* @return alphabetical device name.
*/
- public static String createAlphabeticalDeviceName( String devicePrefix, int deviceNumber )
+ private static String createAlphabeticalDeviceName( String devicePrefix, int deviceNumber )
{
if ( deviceNumber < 0 || deviceNumber >= ( 'z' - 'a' ) ) {
String errorMsg = new String( "Device number is out of range to be able to create a valid device name." );
@@ -119,6 +121,42 @@ public class VirtualizationConfigurationQemuUtils
return devicePrefix + Character.valueOf( (char) ( 'a' + deviceNumber ) ).toString();
}
+ /**
+ * Creates an alphabetical device name for a disk device with a bus type that is unique in
+ * a Libvirt domain XML configuration.
+ *
+ * @param config Libvirt domain XML configuration.
+ * @param type device type for device name.
+ * @return alphabetical device name.
+ */
+ public static String createDeviceName( final Domain config, final BusType type ) throws IllegalArgumentException
+ {
+ final String devicePrefix;
+ final int deviceNumber;
+
+ switch ( type ) {
+ case FDC:
+ devicePrefix = "fd";
+ break;
+ case IDE:
+ devicePrefix = "hd";
+ break;
+ case SATA:
+ devicePrefix = "sd";
+ break;
+ case VIRTIO:
+ devicePrefix = "vd";
+ break;
+ default:
+ return null;
+ }
+
+ final Predicate bySpecifiedBusType = d -> d.getBusType() == type;
+ deviceNumber = Long.valueOf( config.getDiskDevices().stream().filter( bySpecifiedBusType ).count() ).intValue();
+
+ return VirtualizationConfigurationQemuUtils.createAlphabeticalDeviceName( devicePrefix, deviceNumber );
+ }
+
/**
* Data container to store a Libvirt/QEMU machine name with version information.
*
--
cgit v1.2.3-55-g7522