Skip to content

Commit c24c1a5

Browse files
authored
Fix VM import & VM delete with custom offering (#8813)
1 parent c7626eb commit c24c1a5

File tree

4 files changed

+12
-14
lines changed

4 files changed

+12
-14
lines changed

api/src/main/java/com/cloud/vm/VirtualMachineProfile.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ public interface VirtualMachineProfile {
6060

6161
void setConfigDriveLocation(NetworkElement.Location location);
6262

63+
void setServiceOffering(ServiceOffering offering);
64+
6365
public static class Param {
6466

6567
public static final Param VmPassword = new Param("VmPassword");

engine/components-api/src/main/java/com/cloud/vm/VirtualMachineProfileImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import com.cloud.hypervisor.Hypervisor.HypervisorType;
2727
import com.cloud.network.element.NetworkElement;
2828
import com.cloud.offering.ServiceOffering;
29-
import com.cloud.service.ServiceOfferingVO;
3029
import com.cloud.template.VirtualMachineTemplate;
3130
import com.cloud.template.VirtualMachineTemplate.BootloaderType;
3231
import com.cloud.user.Account;
@@ -260,7 +259,8 @@ public Map<Param, Object> getParameters() {
260259
return _params;
261260
}
262261

263-
public void setServiceOffering(ServiceOfferingVO offering) {
262+
@Override
263+
public void setServiceOffering(ServiceOffering offering) {
264264
_offering = offering;
265265
}
266266

server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -896,6 +896,7 @@ private UserVm migrateImportedVM(HostVO sourceHost, VirtualMachineTemplate templ
896896
if (!hostSupportsServiceOffering(sourceHost, serviceOffering)) {
897897
LOGGER.debug(String.format("VM %s needs to be migrated", vm.getUuid()));
898898
final VirtualMachineProfile profile = new VirtualMachineProfileImpl(vm, template, serviceOffering, owner, null);
899+
profile.setServiceOffering(serviceOfferingDao.findById(vm.getId(), serviceOffering.getId()));
899900
DeploymentPlanner.ExcludeList excludeList = new DeploymentPlanner.ExcludeList();
900901
excludeList.addHost(sourceHost.getId());
901902
final DataCenterDeployment plan = new DataCenterDeployment(sourceHost.getDataCenterId(), sourceHost.getPodId(), sourceHost.getClusterId(), null, null, null);
@@ -2131,11 +2132,6 @@ private UserVm importExternalKvmVirtualMachine(final UnmanagedInstanceTO unmanag
21312132
UserVm userVm = null;
21322133

21332134
Map<String, String> allDetails = new HashMap<>(details);
2134-
if (serviceOffering.isDynamic()) {
2135-
allDetails.put(VmDetailConstants.CPU_NUMBER, String.valueOf(serviceOffering.getCpu()));
2136-
allDetails.put(VmDetailConstants.MEMORY, String.valueOf(serviceOffering.getRamSize()));
2137-
allDetails.put(VmDetailConstants.CPU_SPEED, String.valueOf(serviceOffering.getSpeed()));
2138-
}
21392135
// Check disks and supplied disk offerings
21402136
List<UnmanagedInstanceTO.Disk> unmanagedInstanceDisks = unmanagedInstance.getDisks();
21412137

@@ -2189,6 +2185,8 @@ private UserVm importExternalKvmVirtualMachine(final UnmanagedInstanceTO unmanag
21892185
}
21902186

21912187
final VirtualMachineProfile profile = new VirtualMachineProfileImpl(userVm, template, serviceOffering, owner, null);
2188+
ServiceOfferingVO dummyOffering = serviceOfferingDao.findById(userVm.getId(), serviceOffering.getId());
2189+
profile.setServiceOffering(dummyOffering);
21922190
DeploymentPlanner.ExcludeList excludeList = new DeploymentPlanner.ExcludeList();
21932191
final DataCenterDeployment plan = new DataCenterDeployment(zone.getId(), null, null, null, null, null);
21942192
DeployDestination dest = null;
@@ -2240,7 +2238,7 @@ private UserVm importExternalKvmVirtualMachine(final UnmanagedInstanceTO unmanag
22402238
cleanupFailedImportVM(userVm);
22412239
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, String.format("Failed to import NICs while importing vm: %s. %s", instanceName, StringUtils.defaultString(e.getMessage())));
22422240
}
2243-
publishVMUsageUpdateResourceCount(userVm, serviceOffering);
2241+
publishVMUsageUpdateResourceCount(userVm, dummyOffering);
22442242
return userVm;
22452243
}
22462244

@@ -2252,11 +2250,6 @@ private UserVm importKvmVirtualMachineFromDisk(final ImportSource importSource,
22522250
UserVm userVm = null;
22532251

22542252
Map<String, String> allDetails = new HashMap<>(details);
2255-
if (serviceOffering.isDynamic()) {
2256-
allDetails.put(VmDetailConstants.CPU_NUMBER, String.valueOf(serviceOffering.getCpu()));
2257-
allDetails.put(VmDetailConstants.MEMORY, String.valueOf(serviceOffering.getRamSize()));
2258-
allDetails.put(VmDetailConstants.CPU_SPEED, String.valueOf(serviceOffering.getSpeed()));
2259-
}
22602253

22612254
VirtualMachine.PowerState powerState = VirtualMachine.PowerState.PowerOff;
22622255

@@ -2323,6 +2316,8 @@ private UserVm importKvmVirtualMachineFromDisk(final ImportSource importSource,
23232316
DiskProfile diskProfile = volumeManager.allocateRawVolume(Volume.Type.ROOT, rootVolumeName, diskOffering, null, null, null, userVm, template, owner, null);
23242317

23252318
final VirtualMachineProfile profile = new VirtualMachineProfileImpl(userVm, template, serviceOffering, owner, null);
2319+
ServiceOfferingVO dummyOffering = serviceOfferingDao.findById(userVm.getId(), serviceOffering.getId());
2320+
profile.setServiceOffering(dummyOffering);
23262321
DeploymentPlanner.ExcludeList excludeList = new DeploymentPlanner.ExcludeList();
23272322
final DataCenterDeployment plan = new DataCenterDeployment(zone.getId(), null, null, hostId, poolId, null);
23282323
DeployDestination dest = null;
@@ -2374,7 +2369,7 @@ private UserVm importKvmVirtualMachineFromDisk(final ImportSource importSource,
23742369
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, String.format("Failed to import volumes while importing vm: %s. %s", instanceName, StringUtils.defaultString(e.getMessage())));
23752370
}
23762371
networkOrchestrationService.importNic(macAddress,0,network, true, userVm, requestedIpPair, zone, true);
2377-
publishVMUsageUpdateResourceCount(userVm, serviceOffering);
2372+
publishVMUsageUpdateResourceCount(userVm, dummyOffering);
23782373
return userVm;
23792374
}
23802375

server/src/test/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImplTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ public void setUp() throws Exception {
332332
when(serviceOffering.getRamSize()).thenReturn(instance.getMemory());
333333
when(serviceOffering.getSpeed()).thenReturn(instance.getCpuSpeed());
334334
when(serviceOfferingDao.findById(Mockito.anyLong())).thenReturn(serviceOffering);
335+
when(serviceOfferingDao.findById(anyLong(), anyLong())).thenReturn(Mockito.mock(ServiceOfferingVO.class));
335336
DiskOfferingVO diskOfferingVO = Mockito.mock(DiskOfferingVO.class);
336337
when(diskOfferingDao.findById(Mockito.anyLong())).thenReturn(diskOfferingVO);
337338
UserVmVO userVm = Mockito.mock(UserVmVO.class);

0 commit comments

Comments
 (0)