modules/plugins/virt/pom.xml | 2
modules/plugins/virt/src/main/java/org/rhq/plugins/virt/LibVirtConnection.java | 36 +++++++---
modules/plugins/virt/src/main/java/org/rhq/plugins/virt/VirtualizationDomainComponent.java | 22 ++----
modules/plugins/virt/src/main/java/org/rhq/plugins/virt/VirtualizationDomainDiscoveryComponent.java | 1
modules/plugins/virt/src/main/resources/META-INF/rhq-plugin.xml | 6 +
5 files changed, 44 insertions(+), 23 deletions(-)
New commits:
commit 7a6feaf85bd7ecc5ca9e26a1b62aa79e96519bf0
Author: Bryan Kearney <bkearney(a)redhat.com>
Date: Fri Jan 29 13:24:23 2010 -0500
Can delete and destroy virtual machines now
diff --git a/modules/plugins/virt/pom.xml b/modules/plugins/virt/pom.xml
index f3ff3f6..37d2f9f 100644
--- a/modules/plugins/virt/pom.xml
+++ b/modules/plugins/virt/pom.xml
@@ -22,7 +22,7 @@
<properties>
<scm.module.path>modules/plugins/virt/</scm.module.path>
- <libvirt-java.version>0.3.2</libvirt-java.version>
+ <libvirt-java.version>0.4.1</libvirt-java.version>
</properties>
<dependencies>
diff --git a/modules/plugins/virt/src/main/java/org/rhq/plugins/virt/LibVirtConnection.java b/modules/plugins/virt/src/main/java/org/rhq/plugins/virt/LibVirtConnection.java
index 6d71936..fd54ef8 100644
--- a/modules/plugins/virt/src/main/java/org/rhq/plugins/virt/LibVirtConnection.java
+++ b/modules/plugins/virt/src/main/java/org/rhq/plugins/virt/LibVirtConnection.java
@@ -22,6 +22,8 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import com.sun.jna.Pointer;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.libvirt.Connect;
@@ -30,6 +32,8 @@ import org.libvirt.DomainBlockStats;
import org.libvirt.DomainInterfaceStats;
import org.libvirt.LibvirtException;
import org.libvirt.Network;
+import org.libvirt.DomainInfo.DomainState;
+import org.libvirt.jna.virError;
/**
* Represents a connection, via libVirt to domain management.
@@ -48,11 +52,10 @@ public class LibVirtConnection {
public LibVirtConnection(String uri) throws LibvirtException {
try {
- //Connect.setErrorCallback(Logger.INSTANCE);
- //Connect.setErrorCallback(null);
+ Connect.setErrorCallback(Logger.INSTANCE);
connection = new Connect(uri);
connected = true;
- //connection.setConnectionErrorCallback(Logger.INSTANCE);
+ connection.setConnectionErrorCallback(Logger.INSTANCE);
} catch (LibvirtException e) {
log.warn("Can not obtain an instance of libvirt");
connection = null;
@@ -66,7 +69,7 @@ public class LibVirtConnection {
throw ie;
}*/
} finally {
- //Connect.setErrorCallback(null);
+ Connect.setErrorCallback(null);
}
}
@@ -157,11 +160,28 @@ public class LibVirtConnection {
return SUCCESS;
}
+ public int domainDestroy(String domainName) throws LibvirtException {
+ Domain domain = connection.domainLookupByName(domainName);
+ domain.destroy() ;
+ return SUCCESS;
+ }
+
+ public int domainDelete(String domainName) throws LibvirtException {
+ Domain domain = connection.domainLookupByName(domainName);
+ DomainState state = domain.getInfo().state ;
+
+ if ((state != DomainState.VIR_DOMAIN_SHUTDOWN) && (state != DomainState.VIR_DOMAIN_SHUTOFF)) {
+ domain.destroy() ;
+ }
+ domain.undefine() ;
+ return SUCCESS;
+ }
+
public int domainSave(String domainName, String toPath) throws LibvirtException {
Domain domain = connection.domainLookupByName(domainName);
domain.save(toPath);
return SUCCESS;
- }
+ }
public int domainResume(String domainName) throws LibvirtException {
Domain domain = connection.domainLookupByName(domainName);
@@ -327,7 +347,7 @@ public class LibVirtConnection {
}
}
//TODO Put the callbacks in
-/* Comment this out untilt he callbacks get in
+/* Comment this out untilt he callbacks get in*/
class Logger extends org.libvirt.ErrorCallback {
// Make this static so the callback will always have an object
@@ -338,6 +358,6 @@ class Logger extends org.libvirt.ErrorCallback {
@Override
public void errorCallback(Pointer arg0, virError arg1) {
- log.warn(arg1.message);
+ log.warn("Libvirt Error: " + arg1.message);
}
-} */
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/modules/plugins/virt/src/main/java/org/rhq/plugins/virt/VirtualizationDomainComponent.java b/modules/plugins/virt/src/main/java/org/rhq/plugins/virt/VirtualizationDomainComponent.java
index ccb006a..a67d5c3 100644
--- a/modules/plugins/virt/src/main/java/org/rhq/plugins/virt/VirtualizationDomainComponent.java
+++ b/modules/plugins/virt/src/main/java/org/rhq/plugins/virt/VirtualizationDomainComponent.java
@@ -35,6 +35,7 @@ import org.rhq.core.pluginapi.configuration.ConfigurationFacet;
import org.rhq.core.pluginapi.configuration.ConfigurationUpdateReport;
import org.rhq.core.pluginapi.inventory.CreateChildResourceFacet;
import org.rhq.core.pluginapi.inventory.CreateResourceReport;
+import org.rhq.core.pluginapi.inventory.DeleteResourceFacet;
import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
import org.rhq.core.pluginapi.inventory.ResourceComponent;
import org.rhq.core.pluginapi.inventory.ResourceContext;
@@ -49,7 +50,7 @@ import org.rhq.core.pluginapi.operation.OperationResult;
* @author Greg Hinkle
*/
public class VirtualizationDomainComponent implements ResourceComponent<VirtualizationHostComponent>, MeasurementFacet,
- OperationFacet, ConfigurationFacet, CreateChildResourceFacet {
+ OperationFacet, ConfigurationFacet, CreateChildResourceFacet, DeleteResourceFacet {
private Log log = LogFactory.getLog(VirtualizationDomainComponent.class);
private String domainName;
@@ -131,8 +132,10 @@ public class VirtualizationDomainComponent implements ResourceComponent<Virtuali
result = virt.domainShutdown(this.domainName);
} else if (name.equals("suspend")) {
result = virt.domainSuspend(this.domainName);
- } else if (name.equals("create")) {
+ } else if (name.equals("start")) {
result = virt.domainCreate(this.domainName);
+ } else if (name.equals("destroy")) {
+ result = virt.domainDestroy(this.domainName);
}
if (result < 0) {
@@ -144,16 +147,6 @@ public class VirtualizationDomainComponent implements ResourceComponent<Virtuali
public Configuration loadResourceConfiguration() throws LibvirtException {
LibVirtConnection virt = getConnection();
- /*Configuration config = new Configuration();
- DomainInfo info = virt.getDomainInfo(domainName);
- //TODO Type
- //TODO Lifecycle Actions
- config.put(new PropertySimple("name", info.name));
- config.put(new PropertySimple("uuid", info.uuid));
- config.put(new PropertySimple("vcpu", info.domainInfo.nrVirtCpu));
- config.put(new PropertySimple("memory", info.domainInfo.maxMem));
- config.put(new PropertySimple("currentMemory", info.domainInfo.memory));
- return config;*/
String xml = virt.getDomainXML(this.domainName);
return XMLEditor.getDomainConfiguration(xml);
@@ -218,4 +211,9 @@ public class VirtualizationDomainComponent implements ResourceComponent<Virtuali
public String getDomainName() {
return this.domainName;
}
+
+ public void deleteResource() throws Exception {
+ LibVirtConnection virt = this.getConnection() ;
+ virt.domainDelete(domainName) ;
+ }
}
\ No newline at end of file
diff --git a/modules/plugins/virt/src/main/java/org/rhq/plugins/virt/VirtualizationDomainDiscoveryComponent.java b/modules/plugins/virt/src/main/java/org/rhq/plugins/virt/VirtualizationDomainDiscoveryComponent.java
index 6059db5..eb0c089 100644
--- a/modules/plugins/virt/src/main/java/org/rhq/plugins/virt/VirtualizationDomainDiscoveryComponent.java
+++ b/modules/plugins/virt/src/main/java/org/rhq/plugins/virt/VirtualizationDomainDiscoveryComponent.java
@@ -26,6 +26,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.pluginapi.inventory.DeleteResourceFacet;
import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
diff --git a/modules/plugins/virt/src/main/resources/META-INF/rhq-plugin.xml b/modules/plugins/virt/src/main/resources/META-INF/rhq-plugin.xml
index 18cd70a..39d0cf9 100644
--- a/modules/plugins/virt/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/virt/src/main/resources/META-INF/rhq-plugin.xml
@@ -42,7 +42,7 @@
class="VirtualizationDomainComponent"
createDeletePolicy="both" creationDataType="configuration">
- <operation name="create"
+ <operation name="start"
description="Launch a defined domain. If the call succeed the domain moves from the defined to the running domains pools."/>
<operation name="reboot"
description="Reboot a domain, the domain object is still usable there after but the domain OS is being stopped for a restart. Note that the guest OS may ignore the request."/>
@@ -62,7 +62,9 @@
</parameters>
</operation>
<operation name="shutdown"
- description="Shutdown a domain, the domain object is still usable there after but the domain OS is being stopped. Note that the guest OS may ignore the request. TODO: should we add an option for reboot, knowing it may not be doable in the general case ?"/>
+ description="Shutdown a domain, the domain object is still usable there after but the domain OS is being stopped. Note that the guest OS may ignore the request. "/>
+ <operation name="destroy"
+ description="Force a shutdown right now."/>
<metric property="cpuPercentage" displayName="CPU Usage" units="percentage" displayType="summary"/>
<metric property="memoryUsage" displayName="Memory Usage" units="kilobytes" displayType="summary"/>