mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
vmware: delete snapshot disk after backup to secondary storage (#5333)
* vmware: delete snapshot disk after backup to secondary storage WIP - This ensures that worker VM is destroyed along with any of its own disks that are backed up to secondary storage. Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com> * fix Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com> * fix for volume backup and confuding vm var name Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com> * change Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com> * tag as worker vm Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com> Co-authored-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
This commit is contained in:
parent
e507b57b41
commit
2297c73c92
@ -1264,7 +1264,8 @@ public class VmwareStorageProcessor implements StorageProcessor {
|
|||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
if (clonedVm != null) {
|
if (clonedVm != null) {
|
||||||
clonedVm.detachAllDisksAndDestroy();
|
s_logger.debug(String.format("Destroying cloned VM: %s with its disks", clonedVm.getName()));
|
||||||
|
clonedVm.destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1832,7 +1833,8 @@ public class VmwareStorageProcessor implements StorageProcessor {
|
|||||||
return new Pair<>(diskDevice, disks);
|
return new Pair<>(diskDevice, disks);
|
||||||
} finally {
|
} finally {
|
||||||
if (clonedVm != null) {
|
if (clonedVm != null) {
|
||||||
clonedVm.detachAllDisksAndDestroy();
|
s_logger.debug(String.format("Destroying cloned VM: %s with its disks", clonedVm.getName()));
|
||||||
|
clonedVm.destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3738,23 +3740,24 @@ public class VmwareStorageProcessor implements StorageProcessor {
|
|||||||
throw new Exception(msg);
|
throw new Exception(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
VirtualMachineMO clonedVm = null;
|
VirtualMachineMO workerVm = null;
|
||||||
try {
|
try {
|
||||||
hyperHost.importVmFromOVF(srcOVFFileName, newVolumeName, primaryDsMo, "thin", null);
|
hyperHost.importVmFromOVF(srcOVFFileName, newVolumeName, primaryDsMo, "thin", null);
|
||||||
clonedVm = hyperHost.findVmOnHyperHost(newVolumeName);
|
workerVm = hyperHost.findVmOnHyperHost(newVolumeName);
|
||||||
if (clonedVm == null) {
|
if (workerVm == null) {
|
||||||
throw new Exception("Unable to create container VM for volume creation");
|
throw new Exception("Unable to create container VM for volume creation");
|
||||||
}
|
}
|
||||||
|
workerVm.tagAsWorkerVM();
|
||||||
|
|
||||||
if(!primaryDsMo.getDatastoreType().equalsIgnoreCase("VVOL")) {
|
if(!primaryDsMo.getDatastoreType().equalsIgnoreCase("VVOL")) {
|
||||||
HypervisorHostHelper.createBaseFolderInDatastore(primaryDsMo, primaryDsMo.getDataCenterMor());
|
HypervisorHostHelper.createBaseFolderInDatastore(primaryDsMo, primaryDsMo.getDataCenterMor());
|
||||||
clonedVm.moveAllVmDiskFiles(primaryDsMo, HypervisorHostHelper.VSPHERE_DATASTORE_BASE_FOLDER, false);
|
workerVm.moveAllVmDiskFiles(primaryDsMo, HypervisorHostHelper.VSPHERE_DATASTORE_BASE_FOLDER, false);
|
||||||
}
|
}
|
||||||
clonedVm.detachAllDisks();
|
workerVm.detachAllDisks();
|
||||||
return _storage.getSize(srcOVFFileName);
|
return _storage.getSize(srcOVFFileName);
|
||||||
} finally {
|
} finally {
|
||||||
if (clonedVm != null) {
|
if (workerVm != null) {
|
||||||
clonedVm.detachAllDisksAndDestroy();
|
workerVm.detachAllDisksAndDestroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,12 +36,6 @@ import java.util.concurrent.ExecutorService;
|
|||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
import com.cloud.utils.exception.CloudRuntimeException;
|
|
||||||
import com.vmware.vim25.InvalidStateFaultMsg;
|
|
||||||
import com.vmware.vim25.RuntimeFaultFaultMsg;
|
|
||||||
import com.vmware.vim25.TaskInfo;
|
|
||||||
import com.vmware.vim25.TaskInfoState;
|
|
||||||
import com.vmware.vim25.VirtualMachineTicket;
|
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
@ -53,6 +47,7 @@ import com.cloud.utils.ActionDelegate;
|
|||||||
import com.cloud.utils.Pair;
|
import com.cloud.utils.Pair;
|
||||||
import com.cloud.utils.Ternary;
|
import com.cloud.utils.Ternary;
|
||||||
import com.cloud.utils.concurrency.NamedThreadFactory;
|
import com.cloud.utils.concurrency.NamedThreadFactory;
|
||||||
|
import com.cloud.utils.exception.CloudRuntimeException;
|
||||||
import com.cloud.utils.script.Script;
|
import com.cloud.utils.script.Script;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.vmware.vim25.ArrayOfManagedObjectReference;
|
import com.vmware.vim25.ArrayOfManagedObjectReference;
|
||||||
@ -66,6 +61,7 @@ import com.vmware.vim25.GuestOsDescriptor;
|
|||||||
import com.vmware.vim25.HttpNfcLeaseDeviceUrl;
|
import com.vmware.vim25.HttpNfcLeaseDeviceUrl;
|
||||||
import com.vmware.vim25.HttpNfcLeaseInfo;
|
import com.vmware.vim25.HttpNfcLeaseInfo;
|
||||||
import com.vmware.vim25.HttpNfcLeaseState;
|
import com.vmware.vim25.HttpNfcLeaseState;
|
||||||
|
import com.vmware.vim25.InvalidStateFaultMsg;
|
||||||
import com.vmware.vim25.ManagedObjectReference;
|
import com.vmware.vim25.ManagedObjectReference;
|
||||||
import com.vmware.vim25.ObjectContent;
|
import com.vmware.vim25.ObjectContent;
|
||||||
import com.vmware.vim25.ObjectSpec;
|
import com.vmware.vim25.ObjectSpec;
|
||||||
@ -76,6 +72,9 @@ import com.vmware.vim25.OvfFile;
|
|||||||
import com.vmware.vim25.ParaVirtualSCSIController;
|
import com.vmware.vim25.ParaVirtualSCSIController;
|
||||||
import com.vmware.vim25.PropertyFilterSpec;
|
import com.vmware.vim25.PropertyFilterSpec;
|
||||||
import com.vmware.vim25.PropertySpec;
|
import com.vmware.vim25.PropertySpec;
|
||||||
|
import com.vmware.vim25.RuntimeFaultFaultMsg;
|
||||||
|
import com.vmware.vim25.TaskInfo;
|
||||||
|
import com.vmware.vim25.TaskInfoState;
|
||||||
import com.vmware.vim25.TraversalSpec;
|
import com.vmware.vim25.TraversalSpec;
|
||||||
import com.vmware.vim25.VirtualBusLogicController;
|
import com.vmware.vim25.VirtualBusLogicController;
|
||||||
import com.vmware.vim25.VirtualCdrom;
|
import com.vmware.vim25.VirtualCdrom;
|
||||||
@ -120,6 +119,7 @@ import com.vmware.vim25.VirtualMachineRelocateSpecDiskLocator;
|
|||||||
import com.vmware.vim25.VirtualMachineRuntimeInfo;
|
import com.vmware.vim25.VirtualMachineRuntimeInfo;
|
||||||
import com.vmware.vim25.VirtualMachineSnapshotInfo;
|
import com.vmware.vim25.VirtualMachineSnapshotInfo;
|
||||||
import com.vmware.vim25.VirtualMachineSnapshotTree;
|
import com.vmware.vim25.VirtualMachineSnapshotTree;
|
||||||
|
import com.vmware.vim25.VirtualMachineTicket;
|
||||||
import com.vmware.vim25.VirtualSCSIController;
|
import com.vmware.vim25.VirtualSCSIController;
|
||||||
import com.vmware.vim25.VirtualSCSISharing;
|
import com.vmware.vim25.VirtualSCSISharing;
|
||||||
|
|
||||||
@ -771,6 +771,7 @@ public class VirtualMachineMO extends BaseMO {
|
|||||||
boolean result = _context.getVimClient().waitForTask(morTask);
|
boolean result = _context.getVimClient().waitForTask(morTask);
|
||||||
if (result) {
|
if (result) {
|
||||||
_context.waitForTaskProgressDone(morTask);
|
_context.waitForTaskProgressDone(morTask);
|
||||||
|
s_logger.debug(String.format("Cloned VM: %s as %s", getName(), cloneName));
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
s_logger.error("VMware cloneVM_Task failed due to " + TaskMO.getTaskFailureInfo(_context, morTask));
|
s_logger.error("VMware cloneVM_Task failed due to " + TaskMO.getTaskFailureInfo(_context, morTask));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user