diff options
| author | Simon Rettberg | 2025-03-27 14:10:08 +0100 |
|---|---|---|
| committer | Simon Rettberg | 2025-03-27 14:10:08 +0100 |
| commit | a306c5617fd1d4e09739655fa7070a300dac2b13 (patch) | |
| tree | 8576afa93831213dbbebb81d7a796cf59b5416d0 /src/main/java/org/openslx/libvirt/domain/device | |
| parent | Fix comment (diff) | |
| download | master-sync-shared-a306c5617fd1d4e09739655fa7070a300dac2b13.tar.gz master-sync-shared-a306c5617fd1d4e09739655fa7070a300dac2b13.tar.xz master-sync-shared-a306c5617fd1d4e09739655fa7070a300dac2b13.zip | |
[libvirt] Make sure VMs have at least 5 spicevmc usb ports
Diffstat (limited to 'src/main/java/org/openslx/libvirt/domain/device')
3 files changed, 56 insertions, 28 deletions
diff --git a/src/main/java/org/openslx/libvirt/domain/device/ControllerUsb.java b/src/main/java/org/openslx/libvirt/domain/device/ControllerUsb.java index 1798027..1be42e5 100644 --- a/src/main/java/org/openslx/libvirt/domain/device/ControllerUsb.java +++ b/src/main/java/org/openslx/libvirt/domain/device/ControllerUsb.java @@ -1,6 +1,7 @@ package org.openslx.libvirt.domain.device; import org.openslx.libvirt.xml.LibvirtXmlNode; +import org.openslx.util.Util; /** * A USB controller device node in a Libvirt domain XML document. @@ -136,4 +137,12 @@ public class ControllerUsb extends Controller return null; } } + + /** + * Get number of ports this controller provides. + */ + public int getPortCount() + { + return Util.parseInt( this.getXmlElementAttributeValue( "ports" ), -1 ); + } } diff --git a/src/main/java/org/openslx/libvirt/domain/device/Device.java b/src/main/java/org/openslx/libvirt/domain/device/Device.java index d743522..f391663 100644 --- a/src/main/java/org/openslx/libvirt/domain/device/Device.java +++ b/src/main/java/org/openslx/libvirt/domain/device/Device.java @@ -1,5 +1,6 @@ package org.openslx.libvirt.domain.device; +import org.apache.commons.lang3.NotImplementedException; import org.openslx.libvirt.xml.LibvirtXmlNode; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -48,7 +49,7 @@ public class Device extends LibvirtXmlNode implements HostdevAddressableTarget<H * @param deviceType type of the Libvirt XML device element. * @return created Libvirt XML device node. */ - private static LibvirtXmlNode createDeviceElement( LibvirtXmlNode xmlParentNode, Type deviceType ) + private static LibvirtXmlNode createDeviceElement( LibvirtXmlNode xmlParentNode, DeviceClass deviceType ) { // create XML element as part of the Libvirt XML document Document xmlDocument = xmlParentNode.getXmlDocument(); @@ -72,38 +73,41 @@ public class Device extends LibvirtXmlNode implements HostdevAddressableTarget<H Device createdDevice = null; if ( device instanceof Controller ) { - LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, Type.CONTROLLER ); + LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, DeviceClass.CONTROLLER ); createdDevice = Controller.createInstance( Controller.class.cast( device ), xmlNode ); } else if ( device instanceof Disk ) { - LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, Type.DISK ); + LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, DeviceClass.DISK ); createdDevice = Disk.createInstance( Disk.class.cast( device ), xmlNode ); } else if ( device instanceof FileSystem ) { - LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, Type.FILESYSTEM ); + LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, DeviceClass.FILESYSTEM ); createdDevice = FileSystem.createInstance( xmlNode ); } else if ( device instanceof Hostdev ) { - LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, Type.HOSTDEV ); + LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, DeviceClass.HOSTDEV ); createdDevice = Hostdev.createInstance( Hostdev.class.cast( device ), xmlNode ); } else if ( device instanceof Interface ) { - LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, Type.INTERFACE ); + LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, DeviceClass.INTERFACE ); createdDevice = Interface.createInstance( Interface.class.cast( device ), xmlNode ); } else if ( device instanceof Graphics ) { - LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, Type.GRAPHICS ); + LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, DeviceClass.GRAPHICS ); createdDevice = Graphics.createInstance( Graphics.class.cast( device ), xmlNode ); } else if ( device instanceof Parallel ) { - LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, Type.PARALLEL ); + LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, DeviceClass.PARALLEL ); createdDevice = Parallel.createInstance( xmlNode ); } else if ( device instanceof Serial ) { - LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, Type.SERIAL ); + LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, DeviceClass.SERIAL ); createdDevice = Serial.createInstance( xmlNode ); } else if ( device instanceof Shmem ) { - LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, Type.SHMEM ); + LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, DeviceClass.SHMEM ); createdDevice = Shmem.createInstance( xmlNode ); } else if ( device instanceof Sound ) { - LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, Type.SOUND ); + LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, DeviceClass.SOUND ); createdDevice = Sound.createInstance( xmlNode ); } else if ( device instanceof Video ) { - LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, Type.VIDEO ); + LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, DeviceClass.VIDEO ); createdDevice = Video.createInstance( xmlNode ); + } else if ( device instanceof RedirDevice ) { + LibvirtXmlNode xmlNode = Device.createDeviceElement( xmlParentNode, DeviceClass.REDIRDEV ); + createdDevice = RedirDevice.createInstance( xmlNode ); } return createdDevice; @@ -124,10 +128,10 @@ public class Device extends LibvirtXmlNode implements HostdevAddressableTarget<H return null; } else { Device device = null; - Type type = Type.fromString( element.getNodeName() ); + DeviceClass type = DeviceClass.fromString( element.getNodeName() ); if ( type == null ) { - return null; + return new Device( xmlNode ); } switch ( type ) { @@ -167,6 +171,8 @@ public class Device extends LibvirtXmlNode implements HostdevAddressableTarget<H case VIDEO: device = Video.newInstance( xmlNode ); break; + default: + throw new NotImplementedException( "Class not implemented" ); } return device; @@ -260,7 +266,23 @@ public class Device extends LibvirtXmlNode implements HostdevAddressableTarget<H return HostdevUsbDeviceAddress.valueOf( bus, port ); } - + + /** + * Returns which bus this device is connected to, or null if unknown + */ + public BusType getDeviceBusType() + { + return BusType.fromString( this.getXmlElementAttributeValue( "bus" ) ); + } + + /** + * Get class of device, i.e. enum value representing the XML tag + */ + public DeviceClass getDeviceClass() + { + return DeviceClass.fromString( this.getXmlBaseNode().getLocalName() ); + } + /** * Returns this devices USB bus/port address, or null if it doesn't have an explicit one * set, or if the address type isn't USB. @@ -275,7 +297,6 @@ public class Device extends LibvirtXmlNode implements HostdevAddressableTarget<H public void setUsbTarget( HostdevUsbDeviceAddress address ) { this.setUsbAddress( "address", address ); - this.setXmlElementAttributeValue( "address", "type", "pci" ); } /** @@ -284,7 +305,7 @@ public class Device extends LibvirtXmlNode implements HostdevAddressableTarget<H * @author Manuel Bentele * @version 1.0 */ - enum Type + public enum DeviceClass { // @formatter:off CONTROLLER( "controller" ), @@ -311,7 +332,7 @@ public class Device extends LibvirtXmlNode implements HostdevAddressableTarget<H * * @param type valid name of the virtual machine device type in a Libvirt domain XML document. */ - Type( String type ) + DeviceClass( String type ) { this.type = type; } @@ -328,9 +349,9 @@ public class Device extends LibvirtXmlNode implements HostdevAddressableTarget<H * @param type name of the virtual machine device type in a Libvirt domain XML document. * @return valid virtual machine device type. */ - public static Type fromString( String type ) + public static DeviceClass fromString( String type ) { - for ( Type t : Type.values() ) { + for ( DeviceClass t : DeviceClass.values() ) { if ( t.type.equalsIgnoreCase( type ) ) { return t; } @@ -339,4 +360,5 @@ public class Device extends LibvirtXmlNode implements HostdevAddressableTarget<H return null; } } + } diff --git a/src/main/java/org/openslx/libvirt/domain/device/RedirDevice.java b/src/main/java/org/openslx/libvirt/domain/device/RedirDevice.java index 2656bbe..d841413 100644 --- a/src/main/java/org/openslx/libvirt/domain/device/RedirDevice.java +++ b/src/main/java/org/openslx/libvirt/domain/device/RedirDevice.java @@ -42,14 +42,6 @@ public class RedirDevice extends Device { this.setXmlElementAttributeValue( "type", type.toString() ); } - - /** - * Get bus type. - */ - public BusType getBus() - { - return BusType.fromString( this.getXmlElementAttributeValue( "bus" ) ); - } /** * Creates a non-existent video device as Libvirt XML device element. @@ -126,4 +118,9 @@ public class RedirDevice extends Device return null; } } + + public void setBusType( BusType usb ) + { + this.setXmlElementAttributeValue( "bus", usb.toString() ); + } } |
