You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ed...@apache.org on 2013/08/27 01:32:50 UTC
[14/50] [abbrv] git commit: updated refs/heads/4.2 to a23322b
CLOUDSTACK-4480: Handle DestroyCommand in VmwareResource to evict
unused template from primary storage pool.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c6928f2f
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c6928f2f
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c6928f2f
Branch: refs/heads/4.2
Commit: c6928f2f5390420ea3f578ff89885aff3caff98e
Parents: 3a12718
Author: Min Chen <mi...@citrix.com>
Authored: Fri Aug 23 14:34:12 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Fri Aug 23 14:36:11 2013 -0700
----------------------------------------------------------------------
.../vmware/resource/VmwareResource.java | 45 +++++++++++++++++++-
1 file changed, 43 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c6928f2f/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
index 9cb6115..e883433 100755
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@ -6587,8 +6587,49 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
@Override
public Answer execute(DestroyCommand cmd) {
- // TODO Auto-generated method stub
- return null;
+ if (s_logger.isInfoEnabled()) {
+ s_logger.info("Executing resource DestroyCommand to evict template from storage pool: " + _gson.toJson(cmd));
+ }
+
+ try {
+ VmwareContext context = getServiceContext(null);
+ VmwareHypervisorHost hyperHost = getHyperHost(context, null);
+ VolumeTO vol = cmd.getVolume();
+
+ ManagedObjectReference morDs = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost, vol.getPoolUuid());
+ if (morDs == null) {
+ String msg = "Unable to find datastore based on volume mount point " + vol.getMountPoint();
+ s_logger.error(msg);
+ throw new Exception(msg);
+ }
+
+ ManagedObjectReference morCluster = hyperHost.getHyperHostCluster();
+ ClusterMO clusterMo = new ClusterMO(context, morCluster);
+
+ VirtualMachineMO vmMo = clusterMo.findVmOnHyperHost(vol.getPath());
+ if (vmMo != null) {
+ if (s_logger.isInfoEnabled()) {
+ s_logger.info("Destroy template volume " + vol.getPath());
+ }
+ vmMo.destroy();
+ }
+ else{
+ if (s_logger.isInfoEnabled()) {
+ s_logger.info("Template volume " + vol.getPath() + " is not found, no need to delete.");
+ }
+ }
+ return new Answer(cmd, true, "Success");
+
+ } catch (Throwable e) {
+ if (e instanceof RemoteException) {
+ s_logger.warn("Encounter remote exception to vCenter, invalidate VMware session context");
+ invalidateServiceContext(null);
+ }
+
+ String msg = "DestroyCommand failed due to " + VmwareHelper.getExceptionMessage(e);
+ s_logger.error(msg, e);
+ return new Answer(cmd, false, msg);
+ }
}
private boolean isVMWareToolsInstalled(VirtualMachineMO vmMo) throws Exception{