This is an automated email from the ASF dual-hosted git repository.

dahn pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.19 by this push:
     new c24c1a5c000 Fix VM import & VM delete with custom offering (#8813)
c24c1a5c000 is described below

commit c24c1a5c000cad0c5298a6fa7e752a8c83124f9a
Author: Vishesh <[email protected]>
AuthorDate: Wed Apr 10 14:59:29 2024 +0530

    Fix VM import & VM delete with custom offering (#8813)
---
 .../main/java/com/cloud/vm/VirtualMachineProfile.java |  2 ++
 .../java/com/cloud/vm/VirtualMachineProfileImpl.java  |  4 ++--
 .../apache/cloudstack/vm/UnmanagedVMsManagerImpl.java | 19 +++++++------------
 .../cloudstack/vm/UnmanagedVMsManagerImplTest.java    |  1 +
 4 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/api/src/main/java/com/cloud/vm/VirtualMachineProfile.java 
b/api/src/main/java/com/cloud/vm/VirtualMachineProfile.java
index 62519412fdb..f2ff3da8449 100644
--- a/api/src/main/java/com/cloud/vm/VirtualMachineProfile.java
+++ b/api/src/main/java/com/cloud/vm/VirtualMachineProfile.java
@@ -60,6 +60,8 @@ public interface VirtualMachineProfile {
 
     void setConfigDriveLocation(NetworkElement.Location location);
 
+    void setServiceOffering(ServiceOffering offering);
+
     public static class Param {
 
         public static final Param VmPassword = new Param("VmPassword");
diff --git 
a/engine/components-api/src/main/java/com/cloud/vm/VirtualMachineProfileImpl.java
 
b/engine/components-api/src/main/java/com/cloud/vm/VirtualMachineProfileImpl.java
index bc689fef873..2d51c3c0870 100644
--- 
a/engine/components-api/src/main/java/com/cloud/vm/VirtualMachineProfileImpl.java
+++ 
b/engine/components-api/src/main/java/com/cloud/vm/VirtualMachineProfileImpl.java
@@ -26,7 +26,6 @@ import com.cloud.host.Host;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.network.element.NetworkElement;
 import com.cloud.offering.ServiceOffering;
-import com.cloud.service.ServiceOfferingVO;
 import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.template.VirtualMachineTemplate.BootloaderType;
 import com.cloud.user.Account;
@@ -260,7 +259,8 @@ public class VirtualMachineProfileImpl implements 
VirtualMachineProfile {
         return _params;
     }
 
-    public void setServiceOffering(ServiceOfferingVO offering) {
+    @Override
+    public void setServiceOffering(ServiceOffering offering) {
         _offering = offering;
     }
 
diff --git 
a/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java 
b/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java
index 1ed5a8f1648..069f749e359 100644
--- a/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java
+++ b/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java
@@ -896,6 +896,7 @@ public class UnmanagedVMsManagerImpl implements 
UnmanagedVMsManager {
         if (!hostSupportsServiceOffering(sourceHost, serviceOffering)) {
             LOGGER.debug(String.format("VM %s needs to be migrated", 
vm.getUuid()));
             final VirtualMachineProfile profile = new 
VirtualMachineProfileImpl(vm, template, serviceOffering, owner, null);
+            profile.setServiceOffering(serviceOfferingDao.findById(vm.getId(), 
serviceOffering.getId()));
             DeploymentPlanner.ExcludeList excludeList = new 
DeploymentPlanner.ExcludeList();
             excludeList.addHost(sourceHost.getId());
             final DataCenterDeployment plan = new 
DataCenterDeployment(sourceHost.getDataCenterId(), sourceHost.getPodId(), 
sourceHost.getClusterId(), null, null, null);
@@ -2131,11 +2132,6 @@ public class UnmanagedVMsManagerImpl implements 
UnmanagedVMsManager {
         UserVm userVm = null;
 
         Map<String, String> allDetails = new HashMap<>(details);
-        if (serviceOffering.isDynamic()) {
-            allDetails.put(VmDetailConstants.CPU_NUMBER, 
String.valueOf(serviceOffering.getCpu()));
-            allDetails.put(VmDetailConstants.MEMORY, 
String.valueOf(serviceOffering.getRamSize()));
-            allDetails.put(VmDetailConstants.CPU_SPEED, 
String.valueOf(serviceOffering.getSpeed()));
-        }
         // Check disks and supplied disk offerings
         List<UnmanagedInstanceTO.Disk> unmanagedInstanceDisks = 
unmanagedInstance.getDisks();
 
@@ -2189,6 +2185,8 @@ public class UnmanagedVMsManagerImpl implements 
UnmanagedVMsManager {
         }
 
         final VirtualMachineProfile profile = new 
VirtualMachineProfileImpl(userVm, template, serviceOffering, owner, null);
+        ServiceOfferingVO dummyOffering = 
serviceOfferingDao.findById(userVm.getId(), serviceOffering.getId());
+        profile.setServiceOffering(dummyOffering);
         DeploymentPlanner.ExcludeList excludeList = new 
DeploymentPlanner.ExcludeList();
         final DataCenterDeployment plan = new 
DataCenterDeployment(zone.getId(), null, null, null, null, null);
         DeployDestination dest = null;
@@ -2240,7 +2238,7 @@ public class UnmanagedVMsManagerImpl implements 
UnmanagedVMsManager {
             cleanupFailedImportVM(userVm);
             throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, 
String.format("Failed to import NICs while importing vm: %s. %s", instanceName, 
StringUtils.defaultString(e.getMessage())));
         }
-        publishVMUsageUpdateResourceCount(userVm, serviceOffering);
+        publishVMUsageUpdateResourceCount(userVm, dummyOffering);
         return userVm;
     }
 
@@ -2252,11 +2250,6 @@ public class UnmanagedVMsManagerImpl implements 
UnmanagedVMsManager {
         UserVm userVm = null;
 
         Map<String, String> allDetails = new HashMap<>(details);
-        if (serviceOffering.isDynamic()) {
-            allDetails.put(VmDetailConstants.CPU_NUMBER, 
String.valueOf(serviceOffering.getCpu()));
-            allDetails.put(VmDetailConstants.MEMORY, 
String.valueOf(serviceOffering.getRamSize()));
-            allDetails.put(VmDetailConstants.CPU_SPEED, 
String.valueOf(serviceOffering.getSpeed()));
-        }
 
         VirtualMachine.PowerState powerState = 
VirtualMachine.PowerState.PowerOff;
 
@@ -2323,6 +2316,8 @@ public class UnmanagedVMsManagerImpl implements 
UnmanagedVMsManager {
         DiskProfile diskProfile = 
volumeManager.allocateRawVolume(Volume.Type.ROOT, rootVolumeName, diskOffering, 
null, null, null, userVm, template, owner, null);
 
         final VirtualMachineProfile profile = new 
VirtualMachineProfileImpl(userVm, template, serviceOffering, owner, null);
+        ServiceOfferingVO dummyOffering = 
serviceOfferingDao.findById(userVm.getId(), serviceOffering.getId());
+        profile.setServiceOffering(dummyOffering);
         DeploymentPlanner.ExcludeList excludeList = new 
DeploymentPlanner.ExcludeList();
         final DataCenterDeployment plan = new 
DataCenterDeployment(zone.getId(), null, null, hostId, poolId, null);
         DeployDestination dest = null;
@@ -2374,7 +2369,7 @@ public class UnmanagedVMsManagerImpl implements 
UnmanagedVMsManager {
             throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, 
String.format("Failed to import volumes while importing vm: %s. %s", 
instanceName, StringUtils.defaultString(e.getMessage())));
         }
         networkOrchestrationService.importNic(macAddress,0,network, true, 
userVm, requestedIpPair, zone, true);
-        publishVMUsageUpdateResourceCount(userVm, serviceOffering);
+        publishVMUsageUpdateResourceCount(userVm, dummyOffering);
         return userVm;
     }
 
diff --git 
a/server/src/test/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImplTest.java
 
b/server/src/test/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImplTest.java
index 229e59b1a7a..92131e4f75c 100644
--- 
a/server/src/test/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImplTest.java
+++ 
b/server/src/test/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImplTest.java
@@ -332,6 +332,7 @@ public class UnmanagedVMsManagerImplTest {
         when(serviceOffering.getRamSize()).thenReturn(instance.getMemory());
         when(serviceOffering.getSpeed()).thenReturn(instance.getCpuSpeed());
         
when(serviceOfferingDao.findById(Mockito.anyLong())).thenReturn(serviceOffering);
+        when(serviceOfferingDao.findById(anyLong(), 
anyLong())).thenReturn(Mockito.mock(ServiceOfferingVO.class));
         DiskOfferingVO diskOfferingVO = Mockito.mock(DiskOfferingVO.class);
         
when(diskOfferingDao.findById(Mockito.anyLong())).thenReturn(diskOfferingVO);
         UserVmVO userVm = Mockito.mock(UserVmVO.class);

Reply via email to