summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/libvirt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/libvirt')
-rw-r--r--src/main/java/org/openslx/libvirt/domain/Domain.java44
-rw-r--r--src/main/java/org/openslx/libvirt/xml/LibvirtXmlEditable.java2
-rw-r--r--src/main/java/org/openslx/libvirt/xml/LibvirtXmlNode.java8
3 files changed, 49 insertions, 5 deletions
diff --git a/src/main/java/org/openslx/libvirt/domain/Domain.java b/src/main/java/org/openslx/libvirt/domain/Domain.java
index 9dc7200..a8b57ff 100644
--- a/src/main/java/org/openslx/libvirt/domain/Domain.java
+++ b/src/main/java/org/openslx/libvirt/domain/Domain.java
@@ -731,6 +731,22 @@ public class Domain extends LibvirtXmlDocument
}
/**
+ * Returns if the CPU migratable flag is set in the Libvirt domain XML document.
+ */
+ public boolean getCpuMigratable()
+ {
+ return this.getRootXmlNode().getXmlElementAttributeValueAsBool( "cpu", "migratable" );
+ }
+
+ /**
+ * Sets if vCPU is migratable in the Libvirt domain XML document.
+ */
+ public void setCpuMigratable( boolean migratable )
+ {
+ this.getRootXmlNode().setXmlElementAttributeValueOnOff( "cpu", "migratable", migratable );
+ }
+
+ /**
* CPU checks specifiable for a virtual machine in the Libvirt domain XML document.
*
* @author Manuel Bentele
@@ -1689,4 +1705,32 @@ public class Domain extends LibvirtXmlDocument
interfaceDevice.setSource( "" );
}
}
+
+ /**
+ * Remove any existing CPU pinning and numa config
+ */
+ public void resetCpuPin()
+ {
+ this.getRootXmlNode().removeXmlElement( "cputune" );
+ this.getRootXmlNode().removeXmlElement( "numatune" );
+ }
+
+ public void addCpuPin( int virtualCore, int hostCore )
+ {
+ final Element rootElement = Element.class.cast( this.getRootXmlNode().getXmlBaseNode() );
+ final Document xmlDocument = this.getRootXmlNode().getXmlDocument();
+ Node cpuTune = this.getRootXmlNode().getXmlElement( "cputune" );
+ if ( cpuTune == null ) {
+ cpuTune = xmlDocument.createElement( "cputune" );
+ rootElement.appendChild( cpuTune );
+ }
+ Element pin = xmlDocument.createElement( "vcpupin" );
+ pin.setAttribute( "vcpu", Integer.toString( virtualCore ) );
+ pin.setAttribute( "cpuset", Integer.toString( hostCore ) );
+ cpuTune.appendChild( pin );
+ Node vcpuNode = this.getRootXmlNode().getXmlElement( "vcpu" );
+ if ( vcpuNode instanceof Element ) {
+ ( (Element)vcpuNode ).setAttribute( "placement", "static" );
+ }
+ }
}
diff --git a/src/main/java/org/openslx/libvirt/xml/LibvirtXmlEditable.java b/src/main/java/org/openslx/libvirt/xml/LibvirtXmlEditable.java
index 5834e58..c97af59 100644
--- a/src/main/java/org/openslx/libvirt/xml/LibvirtXmlEditable.java
+++ b/src/main/java/org/openslx/libvirt/xml/LibvirtXmlEditable.java
@@ -133,7 +133,7 @@ public interface LibvirtXmlEditable
public default boolean getXmlElementAttributeValueAsBool( String attributeName )
{
final String attributeValue = this.getXmlElementAttributeValue( attributeName );
- return "yes".equals( attributeValue ) || "on".equals( attributeValue );
+ return "yes".equals( attributeValue ) || "on".equals( attributeValue ) || "true".equals( attributeName );
}
/**
diff --git a/src/main/java/org/openslx/libvirt/xml/LibvirtXmlNode.java b/src/main/java/org/openslx/libvirt/xml/LibvirtXmlNode.java
index c4ad2c3..a941acb 100644
--- a/src/main/java/org/openslx/libvirt/xml/LibvirtXmlNode.java
+++ b/src/main/java/org/openslx/libvirt/xml/LibvirtXmlNode.java
@@ -183,7 +183,7 @@ public class LibvirtXmlNode implements LibvirtXmlCreatable, LibvirtXmlEditable
}
@Override
- public Node getXmlElement( String expression )
+ public Element getXmlElement( String expression )
{
String completeExpression = null;
@@ -196,7 +196,7 @@ public class LibvirtXmlNode implements LibvirtXmlCreatable, LibvirtXmlEditable
Node node = this.getXmlNode( completeExpression );
if ( node != null && node.getNodeType() == Node.ELEMENT_NODE ) {
- return node;
+ return (Element)node;
} else {
return null;
}
@@ -216,8 +216,8 @@ public class LibvirtXmlNode implements LibvirtXmlCreatable, LibvirtXmlEditable
currentNode = this.getXmlNode( partialExpression );
if ( currentNode == null ) {
- parentNode.appendChild( this.xmlDocument.createElement( nodeNames[i] ) );
- currentNode = parentNode.getLastChild();
+ currentNode = this.xmlDocument.createElement( nodeNames[i] );
+ parentNode.appendChild( currentNode );
}
parentNode = currentNode;