mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
upgrade/systemvm: add template zone entries (#5642)
* upgrade/systemvm: add template_zone_ref entries Fixes #5641 When registering a system VM template during an upgrade, entries in cloud.template_zone_ref must be created for the new template. For a cross-zones template, entry for each zone must be added. Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com> * fix for template-zone entry create Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com> * change Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
This commit is contained in:
parent
a1942b4e8e
commit
d717d8a4cd
@ -16,6 +16,7 @@
|
|||||||
// under the License.
|
// under the License.
|
||||||
package com.cloud.upgrade;
|
package com.cloud.upgrade;
|
||||||
|
|
||||||
|
import com.cloud.dc.DataCenterVO;
|
||||||
import com.cloud.dc.dao.ClusterDao;
|
import com.cloud.dc.dao.ClusterDao;
|
||||||
import com.cloud.dc.dao.ClusterDaoImpl;
|
import com.cloud.dc.dao.ClusterDaoImpl;
|
||||||
import com.cloud.dc.dao.DataCenterDao;
|
import com.cloud.dc.dao.DataCenterDao;
|
||||||
@ -26,14 +27,18 @@ import com.cloud.storage.Storage;
|
|||||||
import com.cloud.storage.Storage.ImageFormat;
|
import com.cloud.storage.Storage.ImageFormat;
|
||||||
import com.cloud.storage.VMTemplateStorageResourceAssoc;
|
import com.cloud.storage.VMTemplateStorageResourceAssoc;
|
||||||
import com.cloud.storage.VMTemplateVO;
|
import com.cloud.storage.VMTemplateVO;
|
||||||
|
import com.cloud.storage.VMTemplateZoneVO;
|
||||||
import com.cloud.storage.dao.VMTemplateDao;
|
import com.cloud.storage.dao.VMTemplateDao;
|
||||||
import com.cloud.storage.dao.VMTemplateDaoImpl;
|
import com.cloud.storage.dao.VMTemplateDaoImpl;
|
||||||
|
import com.cloud.storage.dao.VMTemplateZoneDao;
|
||||||
|
import com.cloud.storage.dao.VMTemplateZoneDaoImpl;
|
||||||
import com.cloud.template.VirtualMachineTemplate;
|
import com.cloud.template.VirtualMachineTemplate;
|
||||||
import com.cloud.upgrade.dao.BasicTemplateDataStoreDaoImpl;
|
import com.cloud.upgrade.dao.BasicTemplateDataStoreDaoImpl;
|
||||||
import com.cloud.user.Account;
|
import com.cloud.user.Account;
|
||||||
import com.cloud.utils.DateUtil;
|
import com.cloud.utils.DateUtil;
|
||||||
import com.cloud.utils.Pair;
|
import com.cloud.utils.Pair;
|
||||||
import com.cloud.utils.UriUtils;
|
import com.cloud.utils.UriUtils;
|
||||||
|
import com.cloud.utils.db.GenericDaoBase;
|
||||||
import com.cloud.utils.db.GlobalLock;
|
import com.cloud.utils.db.GlobalLock;
|
||||||
import com.cloud.utils.db.Transaction;
|
import com.cloud.utils.db.Transaction;
|
||||||
import com.cloud.utils.db.TransactionCallbackNoReturn;
|
import com.cloud.utils.db.TransactionCallbackNoReturn;
|
||||||
@ -104,6 +109,8 @@ public class SystemVmTemplateRegistration {
|
|||||||
@Inject
|
@Inject
|
||||||
VMTemplateDao vmTemplateDao;
|
VMTemplateDao vmTemplateDao;
|
||||||
@Inject
|
@Inject
|
||||||
|
VMTemplateZoneDao vmTemplateZoneDao;
|
||||||
|
@Inject
|
||||||
TemplateDataStoreDao templateDataStoreDao;
|
TemplateDataStoreDao templateDataStoreDao;
|
||||||
@Inject
|
@Inject
|
||||||
VMInstanceDao vmInstanceDao;
|
VMInstanceDao vmInstanceDao;
|
||||||
@ -117,6 +124,7 @@ public class SystemVmTemplateRegistration {
|
|||||||
public SystemVmTemplateRegistration() {
|
public SystemVmTemplateRegistration() {
|
||||||
dataCenterDao = new DataCenterDaoImpl();
|
dataCenterDao = new DataCenterDaoImpl();
|
||||||
vmTemplateDao = new VMTemplateDaoImpl();
|
vmTemplateDao = new VMTemplateDaoImpl();
|
||||||
|
vmTemplateZoneDao = new VMTemplateZoneDaoImpl();
|
||||||
templateDataStoreDao = new BasicTemplateDataStoreDaoImpl();
|
templateDataStoreDao = new BasicTemplateDataStoreDaoImpl();
|
||||||
vmInstanceDao = new VMInstanceDaoImpl();
|
vmInstanceDao = new VMInstanceDaoImpl();
|
||||||
imageStoreDao = new ImageStoreDaoImpl();
|
imageStoreDao = new ImageStoreDaoImpl();
|
||||||
@ -435,7 +443,7 @@ public class SystemVmTemplateRegistration {
|
|||||||
return hypervisorList;
|
return hypervisorList;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Long createTemplateObjectInDB(SystemVMTemplateDetails details) {
|
private VMTemplateVO createTemplateObjectInDB(SystemVMTemplateDetails details) {
|
||||||
Long templateId = vmTemplateDao.getNextInSequence(Long.class, "id");
|
Long templateId = vmTemplateDao.getNextInSequence(Long.class, "id");
|
||||||
VMTemplateVO template = new VMTemplateVO();
|
VMTemplateVO template = new VMTemplateVO();
|
||||||
template.setUuid(details.getUuid());
|
template.setUuid(details.getUuid());
|
||||||
@ -458,10 +466,31 @@ public class SystemVmTemplateRegistration {
|
|||||||
template.setState(VirtualMachineTemplate.State.Inactive);
|
template.setState(VirtualMachineTemplate.State.Inactive);
|
||||||
template.setDeployAsIs(Hypervisor.HypervisorType.VMware.equals(details.getHypervisorType()));
|
template.setDeployAsIs(Hypervisor.HypervisorType.VMware.equals(details.getHypervisorType()));
|
||||||
template = vmTemplateDao.persist(template);
|
template = vmTemplateDao.persist(template);
|
||||||
if (template == null) {
|
return template;
|
||||||
return null;
|
}
|
||||||
|
|
||||||
|
private VMTemplateZoneVO createOrUpdateTemplateZoneEntry(long zoneId, long templateId) {
|
||||||
|
VMTemplateZoneVO templateZoneVO = vmTemplateZoneDao.findByZoneTemplate(zoneId, templateId);
|
||||||
|
if (templateZoneVO == null) {
|
||||||
|
templateZoneVO = new VMTemplateZoneVO(zoneId, templateId, new java.util.Date());
|
||||||
|
templateZoneVO = vmTemplateZoneDao.persist(templateZoneVO);
|
||||||
|
} else {
|
||||||
|
templateZoneVO.setLastUpdated(new java.util.Date());
|
||||||
|
if (vmTemplateZoneDao.update(templateZoneVO.getId(), templateZoneVO)) {
|
||||||
|
templateZoneVO = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return templateZoneVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createCrossZonesTemplateZoneRefEntries(VMTemplateVO template) {
|
||||||
|
List<DataCenterVO> dcs = dataCenterDao.listAll();
|
||||||
|
for (DataCenterVO dc : dcs) {
|
||||||
|
VMTemplateZoneVO templateZoneVO = createOrUpdateTemplateZoneEntry(dc.getId(), template.getId());
|
||||||
|
if (templateZoneVO == null) {
|
||||||
|
throw new CloudRuntimeException(String.format("Failed to create template_zone_ref record for the systemVM template for hypervisor: %s and zone: %s", template.getHypervisorType().name(), dc));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return template.getId();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createTemplateStoreRefEntry(SystemVMTemplateDetails details) {
|
private void createTemplateStoreRefEntry(SystemVMTemplateDetails details) {
|
||||||
@ -585,10 +614,12 @@ public class SystemVmTemplateRegistration {
|
|||||||
SystemVMTemplateDetails details = new SystemVMTemplateDetails(templateName, hypervisorAndTemplateName.second(), created,
|
SystemVMTemplateDetails details = new SystemVMTemplateDetails(templateName, hypervisorAndTemplateName.second(), created,
|
||||||
url, checksum, format, (int) guestOsId, hypervisor, storeId);
|
url, checksum, format, (int) guestOsId, hypervisor, storeId);
|
||||||
if (templateId == null) {
|
if (templateId == null) {
|
||||||
templateId = createTemplateObjectInDB(details);
|
VMTemplateVO template = createTemplateObjectInDB(details);
|
||||||
}
|
if (template == null) {
|
||||||
if (templateId == null) {
|
throw new CloudRuntimeException(String.format("Failed to register template for hypervisor: %s", hypervisor.name()));
|
||||||
throw new CloudRuntimeException(String.format("Failed to register template for hypervisor: %s", hypervisor.name()));
|
}
|
||||||
|
templateId = template.getId();
|
||||||
|
createCrossZonesTemplateZoneRefEntries(template);
|
||||||
}
|
}
|
||||||
details.setId(templateId);
|
details.setId(templateId);
|
||||||
String destTempFolderName = String.valueOf(templateId);
|
String destTempFolderName = String.valueOf(templateId);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user