diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java index 085fbbdb232..4950597963d 100644 --- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java @@ -61,4 +61,6 @@ public interface TemplateService { void downloadBootstrapSysTemplate(DataStore store); void addSystemVMTemplatesToSecondary(DataStore store); + + void associateCrosszoneTemplatesToZone(long dcId); } diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java index ab1f2861000..a68e40c63f3 100644 --- a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java +++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java @@ -488,6 +488,23 @@ public class TemplateServiceImpl implements TemplateService { } } + // update template_zone_ref for cross-zone template for newly added zone + @Override + public void associateCrosszoneTemplatesToZone(long dcId){ + VMTemplateZoneVO tmpltZone; + + List allTemplates = _templateDao.listAll(); + for (VMTemplateVO vt: allTemplates){ + if (vt.isCrossZones()) { + tmpltZone = _vmTemplateZoneDao.findByZoneTemplate(dcId, vt.getId()); + if (tmpltZone == null) { + VMTemplateZoneVO vmTemplateZone = new VMTemplateZoneVO(dcId, vt.getId(), new Date()); + _vmTemplateZoneDao.persist(vmTemplateZone); + } + } + } + } + private Map listTemplate(DataStore ssStore) { ListTemplateCommand cmd = new ListTemplateCommand(ssStore.getTO()); EndPoint ep = _epSelector.select(ssStore); diff --git a/server/src/com/cloud/storage/download/DownloadListener.java b/server/src/com/cloud/storage/download/DownloadListener.java index 3b6c0dd687f..e5efcb2bbd7 100755 --- a/server/src/com/cloud/storage/download/DownloadListener.java +++ b/server/src/com/cloud/storage/download/DownloadListener.java @@ -289,6 +289,8 @@ public class DownloadListener implements Listener { return; } _imageSrv.handleSysTemplateDownload(hostHyper, agent.getDataCenterId()); + // update template_zone_ref for cross-zone templates + _imageSrv.associateCrosszoneTemplatesToZone(agent.getDataCenterId()); } /* This can be removed else if ( cmd instanceof StartupStorageCommand) {