diff --git a/api/src/main/java/com/cloud/agent/api/to/VirtualMachineTO.java b/api/src/main/java/com/cloud/agent/api/to/VirtualMachineTO.java index e26cc1e9f029..bdde2a3fbb62 100644 --- a/api/src/main/java/com/cloud/agent/api/to/VirtualMachineTO.java +++ b/api/src/main/java/com/cloud/agent/api/to/VirtualMachineTO.java @@ -90,6 +90,7 @@ public class VirtualMachineTO { private String metadataManufacturer; private String metadataProductName; private VirtualMachineMetadataTO metadata; + private boolean excludeMetadata; public VirtualMachineTO(long id, String instanceName, VirtualMachine.Type type, int cpus, Integer speed, long minRam, long maxRam, BootloaderType bootloader, String os, boolean enableHA, boolean limitCpuUse, String vncPassword) { @@ -503,6 +504,10 @@ public void setMetadata(VirtualMachineMetadataTO metadata) { this.metadata = metadata; } + public boolean isExcludeMetadata() { return excludeMetadata; } + + public void setExcludeMetadata(boolean excludeMetadata) { this.excludeMetadata = excludeMetadata;} + @Override public String toString() { return String.format("VM {id: \"%s\", name: \"%s\", uuid: \"%s\", type: \"%s\"}", id, name, uuid, type); diff --git a/api/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManager.java b/api/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManager.java index b6233b9c2704..235c3299f65e 100644 --- a/api/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManager.java +++ b/api/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManager.java @@ -69,6 +69,14 @@ public interface UnmanagedVMsManager extends VmImportService, UnmanageVMService, true, ConfigKey.Scope.Global, null); + ConfigKey VmUnmanageLibvirtMetadataCleanup = new ConfigKey<>(Boolean.class, + "vm.unmanage.libvirt.metadata.cleanup", + "Advanced", + "true", + "Specifies whether metadata should be cleaned up when a VM is unmanaged, applicable to the KVM hypervisor.", + true, + ConfigKey.Scope.Global, + null); static boolean isSupported(Hypervisor.HypervisorType hypervisorType) { return hypervisorType == VMware || hypervisorType == KVM; diff --git a/core/src/main/java/com/cloud/agent/api/UnmanageInstanceCommand.java b/core/src/main/java/com/cloud/agent/api/UnmanageInstanceCommand.java index dd504b9ea265..e5540c2e80de 100644 --- a/core/src/main/java/com/cloud/agent/api/UnmanageInstanceCommand.java +++ b/core/src/main/java/com/cloud/agent/api/UnmanageInstanceCommand.java @@ -28,6 +28,7 @@ public class UnmanageInstanceCommand extends Command { boolean executeInSequence = false; VirtualMachineTO vm; boolean isConfigDriveAttached; + boolean isLibvirtMetadataCleanUpEnabled; @Override public boolean executeInSequence() { @@ -58,4 +59,10 @@ public boolean isConfigDriveAttached() { public void setConfigDriveAttached(boolean configDriveAttached) { isConfigDriveAttached = configDriveAttached; } + + public boolean isLibvirtMetadataCleanupEnabled() {return isLibvirtMetadataCleanUpEnabled;} + + public void setLibvirtMetadataCleanup(boolean libvirtMetadataCleanUp) { + isLibvirtMetadataCleanUpEnabled = libvirtMetadataCleanUp; + } } diff --git a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java index b3e672e2c17d..ebd02b598364 100755 --- a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java @@ -2091,6 +2091,8 @@ Long persistDomainForKVM(VMInstanceVO vm, Long paramHostId) { unmanageInstanceCommand = new UnmanageInstanceCommand(vmName); unmanageInstanceCommand.setConfigDriveAttached(vmInstanceDetailsDao.findDetail(vm.getId(), VmDetailConstants.CONFIG_DRIVE_LOCATION) != null); } + boolean isEnabled = UnmanagedVMsManager.VmUnmanageLibvirtMetadataCleanup.value(); + unmanageInstanceCommand.setLibvirtMetadataCleanup(isEnabled); logger.debug("Selected host ID: {} to persist domain XML for Instance: {}.", agentHostId, vmName); try { diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index fbfe3ef20eb0..74b318587ba3 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -3014,7 +3014,8 @@ private void configureVM(VirtualMachineTO vmTO, LibvirtVMDef vm, Map[] getConfigKeys() { ThreadsOnMSToImportVMwareVMFiles, ThreadsOnKVMHostToImportVMwareVMFiles, ConvertVmwareInstanceToKvmExtraParamsAllowed, - ConvertVmwareInstanceToKvmExtraParamsAllowedList + ConvertVmwareInstanceToKvmExtraParamsAllowedList, + VmUnmanageLibvirtMetadataCleanup }; } }