Merge remote-tracking branch 'origin/4.18'

This commit is contained in:
Rohit Yadav 2023-08-28 12:54:36 +05:30
commit 7362e5338c
4 changed files with 28 additions and 23 deletions

View File

@ -323,8 +323,8 @@ public class DeployVMCmd extends BaseAsyncCreateCustomIdCmd implements SecurityG
customparameterMap.put(getBootType().toString(), getBootMode().toString()); customparameterMap.put(getBootType().toString(), getBootMode().toString());
} }
if (rootdisksize != null && !customparameterMap.containsKey("rootdisksize")) { if (rootdisksize != null && !customparameterMap.containsKey(VmDetailConstants.ROOT_DISK_SIZE)) {
customparameterMap.put("rootdisksize", rootdisksize.toString()); customparameterMap.put(VmDetailConstants.ROOT_DISK_SIZE, rootdisksize.toString());
} }
IoDriverPolicy ioPolicy = getIoDriverPolicy(); IoDriverPolicy ioPolicy = getIoDriverPolicy();

View File

@ -509,13 +509,12 @@ public class SystemVmTemplateRegistration {
} }
} }
public void updateTemplateDetails(SystemVMTemplateDetails details, boolean updateTemplateDetails) { public void updateTemplateDetails(SystemVMTemplateDetails details) {
VMTemplateVO template = vmTemplateDao.findById(details.getId()); VMTemplateVO template = vmTemplateDao.findById(details.getId());
if (updateTemplateDetails) { template.setSize(details.getSize());
template.setSize(details.getSize()); template.setState(VirtualMachineTemplate.State.Active);
template.setState(VirtualMachineTemplate.State.Active); vmTemplateDao.update(template.getId(), template);
vmTemplateDao.update(template.getId(), template);
}
TemplateDataStoreVO templateDataStoreVO = templateDataStoreDao.findByStoreTemplate(details.getStoreId(), template.getId()); TemplateDataStoreVO templateDataStoreVO = templateDataStoreDao.findByStoreTemplate(details.getStoreId(), template.getId());
templateDataStoreVO.setSize(details.getSize()); templateDataStoreVO.setSize(details.getSize());
templateDataStoreVO.setPhysicalSize(details.getPhysicalSize()); templateDataStoreVO.setPhysicalSize(details.getPhysicalSize());
@ -613,7 +612,7 @@ public class SystemVmTemplateRegistration {
private Long performTemplateRegistrationOperations(Pair<Hypervisor.HypervisorType, String> hypervisorAndTemplateName, private Long performTemplateRegistrationOperations(Pair<Hypervisor.HypervisorType, String> hypervisorAndTemplateName,
String url, String checksum, ImageFormat format, long guestOsId, String url, String checksum, ImageFormat format, long guestOsId,
Long storeId, Long templateId, String filePath, boolean updateTmpltDetails) { Long storeId, Long templateId, String filePath, TemplateDataStoreVO templateDataStoreVO) {
Hypervisor.HypervisorType hypervisor = hypervisorAndTemplateName.first(); Hypervisor.HypervisorType hypervisor = hypervisorAndTemplateName.first();
String templateName = UUID.randomUUID().toString(); String templateName = UUID.randomUUID().toString();
Date created = new Date(DateUtil.currentGMTTime().getTime()); Date created = new Date(DateUtil.currentGMTTime().getTime());
@ -631,21 +630,24 @@ public class SystemVmTemplateRegistration {
String destTempFolderName = String.valueOf(templateId); String destTempFolderName = String.valueOf(templateId);
String destTempFolder = filePath + PARTIAL_TEMPLATE_FOLDER + destTempFolderName; String destTempFolder = filePath + PARTIAL_TEMPLATE_FOLDER + destTempFolderName;
details.setInstallPath(PARTIAL_TEMPLATE_FOLDER + destTempFolderName + File.separator + templateName + "." + hypervisorImageFormat.get(hypervisor).getFileExtension()); details.setInstallPath(PARTIAL_TEMPLATE_FOLDER + destTempFolderName + File.separator + templateName + "." + hypervisorImageFormat.get(hypervisor).getFileExtension());
createTemplateStoreRefEntry(details); if (templateDataStoreVO == null) {
createTemplateStoreRefEntry(details);
}
setupTemplate(templateName, hypervisorAndTemplateName, destTempFolder); setupTemplate(templateName, hypervisorAndTemplateName, destTempFolder);
readTemplateProperties(destTempFolder + "/template.properties", details); readTemplateProperties(destTempFolder + "/template.properties", details);
details.setUpdated(new Date(DateUtil.currentGMTTime().getTime())); details.setUpdated(new Date(DateUtil.currentGMTTime().getTime()));
updateTemplateDetails(details, updateTmpltDetails); updateTemplateDetails(details);
return templateId; return templateId;
} }
public void registerTemplate(Pair<Hypervisor.HypervisorType, String> hypervisorAndTemplateName, public void registerTemplate(Pair<Hypervisor.HypervisorType, String> hypervisorAndTemplateName,
Pair<String, Long> storeUrlAndId, VMTemplateVO templateVO, String filePath) { Pair<String, Long> storeUrlAndId, VMTemplateVO templateVO,
TemplateDataStoreVO templateDataStoreVO, String filePath) {
Long templateId = null; Long templateId = null;
try { try {
templateId = templateVO.getId(); templateId = templateVO.getId();
performTemplateRegistrationOperations(hypervisorAndTemplateName, templateVO.getUrl(), templateVO.getChecksum(), performTemplateRegistrationOperations(hypervisorAndTemplateName, templateVO.getUrl(), templateVO.getChecksum(),
templateVO.getFormat(), templateVO.getGuestOSId(), storeUrlAndId.second(), templateId, filePath, false); templateVO.getFormat(), templateVO.getGuestOSId(), storeUrlAndId.second(), templateId, filePath, templateDataStoreVO);
} catch (Exception e) { } catch (Exception e) {
String errMsg = String.format("Failed to register template for hypervisor: %s", hypervisorAndTemplateName.first()); String errMsg = String.format("Failed to register template for hypervisor: %s", hypervisorAndTemplateName.first());
LOGGER.error(errMsg, e); LOGGER.error(errMsg, e);
@ -662,7 +664,7 @@ public class SystemVmTemplateRegistration {
try { try {
Hypervisor.HypervisorType hypervisor = hypervisorAndTemplateName.first(); Hypervisor.HypervisorType hypervisor = hypervisorAndTemplateName.first();
templateId = performTemplateRegistrationOperations(hypervisorAndTemplateName, NewTemplateUrl.get(hypervisor), NewTemplateChecksum.get(hypervisor), templateId = performTemplateRegistrationOperations(hypervisorAndTemplateName, NewTemplateUrl.get(hypervisor), NewTemplateChecksum.get(hypervisor),
hypervisorImageFormat.get(hypervisor), hypervisorGuestOsMap.get(hypervisor), storeUrlAndId.second(), null, filePath, true); hypervisorImageFormat.get(hypervisor), hypervisorGuestOsMap.get(hypervisor), storeUrlAndId.second(), null, filePath, null);
Map<String, String> configParams = new HashMap<>(); Map<String, String> configParams = new HashMap<>();
configParams.put(RouterTemplateConfigurationNames.get(hypervisorAndTemplateName.first()), hypervisorAndTemplateName.second()); configParams.put(RouterTemplateConfigurationNames.get(hypervisorAndTemplateName.first()), hypervisorAndTemplateName.second());
configParams.put("minreq.sysvmtemplate.version", getSystemVmTemplateVersion()); configParams.put("minreq.sysvmtemplate.version", getSystemVmTemplateVersion());
@ -783,7 +785,7 @@ public class SystemVmTemplateRegistration {
if (validateIfSeeded(storeUrlAndId.first(), installPath)) { if (validateIfSeeded(storeUrlAndId.first(), installPath)) {
continue; continue;
} else if (templateVO != null) { } else if (templateVO != null) {
registerTemplate(hypervisorAndTemplateName, storeUrlAndId, templateVO, filePath); registerTemplate(hypervisorAndTemplateName, storeUrlAndId, templateVO, templateDataStoreVO, filePath);
continue; continue;
} }
} }

View File

@ -2917,7 +2917,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
} }
SystemVmTemplateRegistration.mountStore(storeUrlAndId.first(), filePath); SystemVmTemplateRegistration.mountStore(storeUrlAndId.first(), filePath);
if (templateVO != null && vmTemplateVO != null) { if (templateVO != null && vmTemplateVO != null) {
systemVmTemplateRegistration.registerTemplate(hypervisorAndTemplateName, storeUrlAndId, vmTemplateVO, filePath); systemVmTemplateRegistration.registerTemplate(hypervisorAndTemplateName, storeUrlAndId, vmTemplateVO, templateVO, filePath);
} else { } else {
systemVmTemplateRegistration.registerTemplate(hypervisorAndTemplateName, storeUrlAndId, filePath); systemVmTemplateRegistration.registerTemplate(hypervisorAndTemplateName, storeUrlAndId, filePath);
} }

View File

@ -3949,7 +3949,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
rootDiskOfferingId = diskOfferingId; rootDiskOfferingId = diskOfferingId;
diskOfferingId = null; diskOfferingId = null;
} }
if (!customParameters.containsKey(VmDetailConstants.ROOT_DISK_SIZE)) { if (!customParameters.containsKey(VmDetailConstants.ROOT_DISK_SIZE) && diskSize != null) {
customParameters.put(VmDetailConstants.ROOT_DISK_SIZE, String.valueOf(diskSize)); customParameters.put(VmDetailConstants.ROOT_DISK_SIZE, String.valueOf(diskSize));
} }
} }
@ -4336,7 +4336,14 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
*/ */
protected long configureCustomRootDiskSize(Map<String, String> customParameters, VMTemplateVO template, HypervisorType hypervisorType, DiskOfferingVO rootDiskOffering) { protected long configureCustomRootDiskSize(Map<String, String> customParameters, VMTemplateVO template, HypervisorType hypervisorType, DiskOfferingVO rootDiskOffering) {
verifyIfHypervisorSupportsRootdiskSizeOverride(hypervisorType); verifyIfHypervisorSupportsRootdiskSizeOverride(hypervisorType);
long rootDiskSizeInBytes = verifyAndGetDiskSize(rootDiskOffering, NumbersUtil.parseLong(customParameters.get(VmDetailConstants.ROOT_DISK_SIZE), -1)); Long rootDiskSizeCustomParam = null;
if (customParameters.containsKey(VmDetailConstants.ROOT_DISK_SIZE)) {
rootDiskSizeCustomParam = NumbersUtil.parseLong(customParameters.get(VmDetailConstants.ROOT_DISK_SIZE), -1);
if (rootDiskSizeCustomParam <= 0) {
throw new InvalidParameterValueException("Root disk size should be a positive number.");
}
}
long rootDiskSizeInBytes = verifyAndGetDiskSize(rootDiskOffering, rootDiskSizeCustomParam);
if (rootDiskSizeInBytes > 0) { //if the size at DiskOffering is not zero then the Service Offering had it configured, it holds priority over the User custom size if (rootDiskSizeInBytes > 0) { //if the size at DiskOffering is not zero then the Service Offering had it configured, it holds priority over the User custom size
_volumeService.validateVolumeSizeInBytes(rootDiskSizeInBytes); _volumeService.validateVolumeSizeInBytes(rootDiskSizeInBytes);
long rootDiskSizeInGiB = rootDiskSizeInBytes / GiB_TO_BYTES; long rootDiskSizeInGiB = rootDiskSizeInBytes / GiB_TO_BYTES;
@ -4345,11 +4352,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
} }
if (customParameters.containsKey(VmDetailConstants.ROOT_DISK_SIZE)) { if (customParameters.containsKey(VmDetailConstants.ROOT_DISK_SIZE)) {
Long rootDiskSize = NumbersUtil.parseLong(customParameters.get(VmDetailConstants.ROOT_DISK_SIZE), -1); Long rootDiskSize = rootDiskSizeCustomParam * GiB_TO_BYTES;
if (rootDiskSize <= 0) {
throw new InvalidParameterValueException("Root disk size should be a positive number.");
}
rootDiskSize *= GiB_TO_BYTES;
_volumeService.validateVolumeSizeInBytes(rootDiskSize); _volumeService.validateVolumeSizeInBytes(rootDiskSize);
return rootDiskSize; return rootDiskSize;
} else { } else {