From 62b3c1b113a1d0c135c3b90f5d55a78d6231cffb Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Thu, 26 Aug 2021 18:08:01 +0530 Subject: [PATCH] Added Worker VM tags for few cloned VMs, created while performing some volume operations. Worker VM tags are missed for few cloned VMs in VMware, and so these are skipped when tracking / cleaning up of Worker VMs. Adding proper Worker VM tags to these VMs would make them trackable from CloudStack. --- .../storage/resource/VmwareStorageProcessor.java | 16 ++-------------- .../vmware/mo/HypervisorHostHelper.java | 4 +--- .../hypervisor/vmware/mo/VirtualMachineMO.java | 6 ++++++ 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java index 5c7be69c2513..0f221521f474 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java @@ -1242,20 +1242,7 @@ private Ternary createTemplateFromVolume(VmwareContext conte vmMo.createFullCloneWithSpecificDisk(templateUniqueName, dcMo.getVmFolder(), morPool, VmwareHelper.getDiskDeviceDatastore(volumeDeviceInfo.first()), volumeDeviceInfo); clonedVm = dcMo.findVm(templateUniqueName); - /* FR41 THIS IS OLD way of creating template using snapshot - if (!vmMo.createSnapshot(templateUniqueName, "Temporary snapshot for template creation", false, false)) { - String msg = "Unable to take snapshot for creating template from volume. volume path: " + volumePath; - s_logger.error(msg); - throw new Exception(msg); - } - - String hardwareVersion = String.valueOf(vmMo.getVirtualHardwareVersion()); - - // 4 MB is the minimum requirement for VM memory in VMware - Pair cloneResult = - vmMo.cloneFromCurrentSnapshot(workerVmName, 0, 4, volumeDeviceInfo.second(), VmwareHelper.getDiskDeviceDatastore(volumeDeviceInfo.first()), hardwareVersion); - clonedVm = cloneResult.first(); - * */ + clonedVm.tagAsWorkerVM(); clonedVm.exportVm(secondaryMountPoint + "/" + installPath, templateUniqueName, false, false); // Get VMDK filename @@ -1848,6 +1835,7 @@ private Pair exportVolumeToSecondaryStorage(VmwareContext cont s_logger.error(msg); throw new Exception(msg); } + clonedVm.tagAsWorkerVM(); vmMo = clonedVm; } vmMo.exportVm(exportPath, exportName, false, false); diff --git a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java index e35c37d4c9ee..aafd112b223f 100644 --- a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java +++ b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java @@ -1727,9 +1727,7 @@ public static VirtualMachineMO createWorkerVM(VmwareHypervisorHost hyperHost, Da } if (workingVM != null) { - workingVM.setCustomFieldValue(CustomFieldConstants.CLOUD_WORKER, "true"); - String workerTag = String.format("%d-%s", System.currentTimeMillis(), hyperHost.getContext().getStockObject("noderuninfo")); - workingVM.setCustomFieldValue(CustomFieldConstants.CLOUD_WORKER_TAG, workerTag); + workingVM.tagAsWorkerVM(); } return workingVM; } diff --git a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java index 0fdaa7d52ea1..0a1ad39c5594 100644 --- a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java +++ b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java @@ -3553,4 +3553,10 @@ public String acquireVncTicket() throws InvalidStateFaultMsg, RuntimeFaultFaultM VirtualMachineTicket ticket = _context.getService().acquireTicket(_mor, "webmks"); return ticket.getTicket(); } + + public void tagAsWorkerVM() throws Exception { + setCustomFieldValue(CustomFieldConstants.CLOUD_WORKER, "true"); + String workerTag = String.format("%d-%s", System.currentTimeMillis(), getContext().getStockObject("noderuninfo")); + setCustomFieldValue(CustomFieldConstants.CLOUD_WORKER_TAG, workerTag); + } }