From 0dbed1ae0966dd499e4eb314ac3a6cff9150bbe2 Mon Sep 17 00:00:00 2001 From: nit Date: Tue, 8 Mar 2011 17:53:35 -0800 Subject: [PATCH] bug 7433: In case of multiple zones deleting a tempate from a zone doesn't prevent a user from selecting it to deploy the VM in the same zone. It was still visible in the listTemplates. Made change to check for template_zone_ref and template_host_ref removed and destroyed columns. During deployVM disallow a vm to be deployed from a template that has been removed in the zone. bug 7433: resolved fixed --- core/src/com/cloud/storage/dao/VMTemplateZoneDaoImpl.java | 2 +- server/src/com/cloud/api/commands/ListTemplatesCmd.java | 2 +- server/src/com/cloud/server/ManagementServerImpl.java | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) mode change 100644 => 100755 core/src/com/cloud/storage/dao/VMTemplateZoneDaoImpl.java mode change 100644 => 100755 server/src/com/cloud/api/commands/ListTemplatesCmd.java diff --git a/core/src/com/cloud/storage/dao/VMTemplateZoneDaoImpl.java b/core/src/com/cloud/storage/dao/VMTemplateZoneDaoImpl.java old mode 100644 new mode 100755 index b906a280534..3c493a24def --- a/core/src/com/cloud/storage/dao/VMTemplateZoneDaoImpl.java +++ b/core/src/com/cloud/storage/dao/VMTemplateZoneDaoImpl.java @@ -73,7 +73,7 @@ public class VMTemplateZoneDaoImpl extends GenericDaoBase templateHostRefsForTemplate = getManagementServer().listTemplateHostBy(template.getId(), zoneId); for (VMTemplateHostVO templateHostRef : templateHostRefsForTemplate) { - if (onlyReady && templateHostRef.getDownloadState() != Status.DOWNLOADED) { + if ((onlyReady && templateHostRef.getDownloadState() != Status.DOWNLOADED) || templateHostRef.getDestroyed()){ continue; } diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 6075589702f..ecd46465832 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -214,6 +214,7 @@ import com.cloud.storage.dao.SnapshotDao; import com.cloud.storage.dao.SnapshotPolicyDao; import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.VMTemplateDao; +import com.cloud.storage.dao.VMTemplateZoneDao; import com.cloud.storage.dao.VMTemplateDao.TemplateFilter; import com.cloud.storage.dao.VMTemplateHostDao; import com.cloud.storage.dao.VolumeDao; @@ -312,6 +313,7 @@ public class ManagementServerImpl implements ManagementServer { private final DiskOfferingDao _diskOfferingDao; private final VMTemplateDao _templateDao; private final VMTemplateHostDao _templateHostDao; + private final VMTemplateZoneDao _templateZoneDao; private final LaunchPermissionDao _launchPermissionDao; private final PricingDao _pricingDao; private final DomainDao _domainDao; @@ -410,6 +412,7 @@ public class ManagementServerImpl implements ManagementServer { _diskOfferingDao = locator.getDao(DiskOfferingDao.class); _templateDao = locator.getDao(VMTemplateDao.class); _templateHostDao = locator.getDao(VMTemplateHostDao.class); + _templateZoneDao = locator.getDao(VMTemplateZoneDao.class); _launchPermissionDao = locator.getDao(LaunchPermissionDao.class); _pricingDao = locator.getDao(PricingDao.class); _domainDao = locator.getDao(DomainDao.class); @@ -2462,6 +2465,8 @@ public class ManagementServerImpl implements ManagementServer { // Make sure a valid template ID was specified if (template == null) { throw new InvalidParameterValueException("Please specify a valid template or ISO ID."); + }if (_templateZoneDao.findByZoneTemplate(dataCenterId, templateId) != null){ + throw new InvalidParameterValueException("The template " +templateId+ " is not available for use"); } boolean isIso = Storage.ImageFormat.ISO.equals(template.getFormat());