From 0692a296ce927fe5b41736b7a28bf739a52f4dd3 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Tue, 3 Sep 2024 17:33:57 +0530 Subject: [PATCH] engine-orchestration: fix issue for empty product in vm metadata (#9610) Signed-off-by: Rohit Yadav Signed-off-by: Abhishek Kumar Co-authored-by: Rohit Yadav --- .../java/com/cloud/vm/VirtualMachineManager.java | 2 +- .../java/com/cloud/vm/VirtualMachineManagerImpl.java | 2 +- .../com/cloud/vm/VirtualMachineManagerImplTest.java | 12 ++++++++++++ .../cloud/hypervisor/kvm/resource/LibvirtVMDef.java | 6 ++++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java b/engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java index 75211df5291..e8ffd86ac4f 100644 --- a/engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java +++ b/engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java @@ -96,7 +96,7 @@ public interface VirtualMachineManager extends Manager { ConfigKey VmMetadataProductName = new ConfigKey<>("Advanced", String.class, "vm.metadata.product", "", "If provided, a custom product name will be used in the instance metadata. When an empty" + - "value is set then default product name will be 'CloudStack Hypervisor'. " + + "value is set then default product name will be 'CloudStack Hypervisor'. " + "A custom product name may break cloud-init functionality with CloudStack datasource. Please " + "refer documentation", true, ConfigKey.Scope.Zone); 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 3fa27e52c09..7c107ed6f54 100755 --- a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java @@ -1108,7 +1108,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } vmTO.setMetadataManufacturer(metadataManufacturer); String metadataProduct = VmMetadataProductName.valueIn(vm.getDataCenterId()); - if (StringUtils.isBlank(metadataManufacturer)) { + if (StringUtils.isBlank(metadataProduct)) { metadataProduct = String.format("CloudStack %s Hypervisor", vm.getHypervisorType().toString()); } vmTO.setMetadataProductName(metadataProduct); diff --git a/engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java b/engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java index f2bd1095c81..906cded455e 100644 --- a/engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java +++ b/engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java @@ -1272,6 +1272,7 @@ public class VirtualMachineManagerImplTest { false, false, "Pass"); VMInstanceVO vm = Mockito.mock(VMInstanceVO.class); Mockito.when(vm.getDataCenterId()).thenReturn(1L); + Mockito.when(vm.getHypervisorType()).thenReturn(HypervisorType.KVM); return new Pair<>(virtualMachineTO, vm); } @@ -1284,6 +1285,17 @@ public class VirtualMachineManagerImplTest { Assert.assertEquals(VirtualMachineManager.VmMetadataManufacturer.defaultValue(), to.getMetadataManufacturer()); } + @Test + public void testUpdateVmMetadataManufacturerAndProductCustomManufacturerDefaultProduct() { + String manufacturer = "Custom"; + overrideVmMetadataConfigValue(manufacturer, ""); + Pair pair = getDummyVmTOAndVm(); + VirtualMachineTO to = pair.first(); + virtualMachineManagerImpl.updateVmMetadataManufacturerAndProduct(to, pair.second()); + Assert.assertEquals(manufacturer, to.getMetadataManufacturer()); + Assert.assertEquals("CloudStack KVM Hypervisor", to.getMetadataProductName()); + } + @Test public void testUpdateVmMetadataManufacturerAndProductCustomManufacturer() { String manufacturer = UUID.randomUUID().toString(); diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java index c1ea3e99717..dfd531b1a0b 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java @@ -127,6 +127,9 @@ public class LibvirtVMDef { } public String getManufacturer() { + if (StringUtils.isEmpty(manufacturer)) { + return "Apache Software Foundation"; + } return manufacturer; } @@ -135,6 +138,9 @@ public class LibvirtVMDef { } public String getProduct() { + if (StringUtils.isEmpty(product)) { + return "CloudStack KVM Hypervisor"; + } return product; }