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:
Rohit Yadav 2021-09-03 00:38:44 +05:30 committed by GitHub
parent e507b57b41
commit 2297c73c92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 15 deletions

View File

@ -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();
} }
} }
} }

View File

@ -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));