From 7adc73299222fcb60ad704a19743022ee734cffe Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Mon, 13 Jan 2025 09:28:18 +0100 Subject: [PATCH] upgrade: consider multiple hypervisors and secondary storages (#10046) --- .../upgrade/SystemVmTemplateRegistration.java | 23 +++++++++++++------ .../com/cloud/storage/StorageManagerImpl.java | 2 +- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/engine/schema/src/main/java/com/cloud/upgrade/SystemVmTemplateRegistration.java b/engine/schema/src/main/java/com/cloud/upgrade/SystemVmTemplateRegistration.java index 671fb8c95d5..40a8cb4b11f 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/SystemVmTemplateRegistration.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/SystemVmTemplateRegistration.java @@ -794,12 +794,16 @@ public class SystemVmTemplateRegistration { Long templateId = getRegisteredTemplateId(hypervisorAndTemplateName); if (templateId != null) { VMTemplateVO templateVO = vmTemplateDao.findById(templateId); - TemplateDataStoreVO templateDataStoreVO = templateDataStoreDao.findByTemplate(templateId, DataStoreRole.Image); - String installPath = templateDataStoreVO.getInstallPath(); - if (validateIfSeeded(storeUrlAndId.first(), installPath, nfsVersion)) { - continue; - } else if (templateVO != null) { + TemplateDataStoreVO templateDataStoreVO = templateDataStoreDao.findByStoreTemplate(storeUrlAndId.second(), templateId); + if (templateDataStoreVO != null) { + String installPath = templateDataStoreVO.getInstallPath(); + if (validateIfSeeded(storeUrlAndId.first(), installPath, nfsVersion)) { + continue; + } + } + if (templateVO != null) { registerTemplate(hypervisorAndTemplateName, storeUrlAndId, templateVO, templateDataStoreVO, filePath); + updateRegisteredTemplateDetails(templateId, hypervisorAndTemplateName); continue; } } @@ -823,6 +827,11 @@ public class SystemVmTemplateRegistration { } private void updateRegisteredTemplateDetails(Long templateId, Map.Entry hypervisorAndTemplateName) { + Pair entry = new Pair<>(hypervisorAndTemplateName.getKey(), hypervisorAndTemplateName.getValue()); + updateRegisteredTemplateDetails(templateId, entry); + } + + private void updateRegisteredTemplateDetails(Long templateId, Pair hypervisorAndTemplateName) { VMTemplateVO templateVO = vmTemplateDao.findById(templateId); templateVO.setTemplateType(Storage.TemplateType.SYSTEM); boolean updated = vmTemplateDao.update(templateVO.getId(), templateVO); @@ -832,11 +841,11 @@ public class SystemVmTemplateRegistration { throw new CloudRuntimeException(errMsg); } - updateSystemVMEntries(templateId, hypervisorAndTemplateName.getKey()); + updateSystemVMEntries(templateId, hypervisorAndTemplateName.first()); // Change value of global configuration parameter router.template.* for the corresponding hypervisor and minreq.sysvmtemplate.version for the ACS version Map configParams = new HashMap<>(); - configParams.put(RouterTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()), hypervisorAndTemplateName.getValue()); + configParams.put(RouterTemplateConfigurationNames.get(hypervisorAndTemplateName.first()), hypervisorAndTemplateName.second()); configParams.put("minreq.sysvmtemplate.version", getSystemVmTemplateVersion()); updateConfigurationParams(configParams); } diff --git a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java index f966098c959..36e0f582df8 100644 --- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java @@ -3441,7 +3441,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C TemplateDataStoreVO templateVO = null; if (templateId != null) { vmTemplateVO = _templateDao.findById(templateId); - templateVO = _templateStoreDao.findByTemplate(templateId, DataStoreRole.Image); + templateVO = _templateStoreDao.findByStoreTemplate(store.getId(), templateId); if (templateVO != null) { try { if (SystemVmTemplateRegistration.validateIfSeeded(