diff --git a/api/src/com/cloud/api/ResponseGenerator.java b/api/src/com/cloud/api/ResponseGenerator.java index c8d411d2c24..f0cabb417f4 100644 --- a/api/src/com/cloud/api/ResponseGenerator.java +++ b/api/src/com/cloud/api/ResponseGenerator.java @@ -156,6 +156,7 @@ public interface ResponseGenerator { VirtualMachineTemplate findTemplateById(Long templateId); + List createTemplateResponses(long templateId, Long zoneId, boolean readyOnly); List createTemplateResponses(long templateId, long zoneId, boolean readyOnly); List createTemplateResponses(long templateId, Long snapshotId, Long volumeId, boolean readyOnly); @@ -193,5 +194,6 @@ public interface ResponseGenerator { Long getSecurityGroupId(String groupName, long accountId); List createIsoResponses(long isoId, Long zoneId, boolean readyOnly); + List createIsoResponses(VirtualMachineTemplate iso, long zoneId, boolean readyOnly); } diff --git a/api/src/com/cloud/api/commands/ListTemplatesCmd.java b/api/src/com/cloud/api/commands/ListTemplatesCmd.java index 39410c34e8b..725d54171cc 100755 --- a/api/src/com/cloud/api/commands/ListTemplatesCmd.java +++ b/api/src/com/cloud/api/commands/ListTemplatesCmd.java @@ -140,7 +140,7 @@ public class ListTemplatesCmd extends BaseListCmd { for (Pair template : templateZonePairSet) { List responses = new ArrayList(); - responses = _responseGenerator.createTemplateResponses(template.first(), template.second(), listInReadyState()); + responses = _responseGenerator.createTemplateResponses(template.first().longValue(), template.second(), listInReadyState()); templateResponses.addAll(responses); } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 371ccc0a69e..0d0a8d32dd6 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -1260,6 +1260,21 @@ public class ApiResponseHelper implements ResponseGenerator { return response; } + @Override + public List createTemplateResponses(long templateId, Long zoneId, boolean readyOnly) { + List dcs = new ArrayList(); + if (zoneId == null) { + dcs.addAll(ApiDBUtils.listZones()); + List response = new ArrayList(); + for (DataCenterVO dc : dcs ) { + response.addAll(createTemplateResponses(templateId, dc.getId(), readyOnly)); + } + return response; + } else { + return createTemplateResponses(templateId, zoneId.longValue(), readyOnly); + } + } + @Override public List createTemplateResponses(long templateId, long zoneId, boolean readyOnly) { VirtualMachineTemplate template = findTemplateById(templateId); @@ -1359,12 +1374,10 @@ public class ApiResponseHelper implements ResponseGenerator { responses.add(templateResponse); return responses; } - - @Override public List createIsoResponses(long isoId, Long zoneId, boolean readyOnly) { - VirtualMachineTemplate iso = findTemplateById(isoId); List isoResponses = new ArrayList(); + VirtualMachineTemplate iso = findTemplateById(isoId); if ( iso.getTemplateType() == TemplateType.PERHOST) { TemplateResponse isoResponse = new TemplateResponse(); isoResponse.setId(iso.getId()); @@ -1387,82 +1400,97 @@ public class ApiResponseHelper implements ResponseGenerator { } isoResponse.setObjectName("iso"); isoResponses.add(isoResponse); - + return isoResponses; } else { - - VMTemplateHostVO isoHost = ApiDBUtils.findTemplateHostRef(isoId, zoneId, readyOnly); - TemplateResponse isoResponse = new TemplateResponse(); - isoResponse.setId(iso.getId()); - isoResponse.setName(iso.getName()); - isoResponse.setDisplayText(iso.getDisplayText()); - isoResponse.setPublic(iso.isPublicTemplate()); - isoResponse.setExtractable(iso.isExtractable() && !(iso.getTemplateType() == TemplateType.PERHOST)); - isoResponse.setCreated(isoHost.getCreated()); - isoResponse.setReady(isoHost.getDownloadState() == Status.DOWNLOADED); - isoResponse.setBootable(iso.isBootable()); - isoResponse.setFeatured(iso.isFeatured()); - isoResponse.setCrossZones(iso.isCrossZones()); - isoResponse.setPublic(iso.isPublicTemplate()); - - // TODO: implement - GuestOS os = ApiDBUtils.findGuestOSById(iso.getGuestOSId()); - if (os != null) { - isoResponse.setOsTypeId(os.getId()); - isoResponse.setOsTypeName(os.getDisplayName()); - } else { - isoResponse.setOsTypeId(-1L); - isoResponse.setOsTypeName(""); - } - - // add account ID and name - Account owner = ApiDBUtils.findAccountById(iso.getAccountId()); - if (owner != null) { - isoResponse.setAccount(owner.getAccountName()); - isoResponse.setDomainId(owner.getDomainId()); - // TODO: implement - isoResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName()); - } - - Account account = UserContext.current().getCaller(); - boolean isAdmin = false; - if ((account == null) || BaseCmd.isAdmin(account.getType())) { - isAdmin = true; - } - // Add the zone ID - DataCenterVO datacenter = ApiDBUtils.findZoneById(zoneId); - isoResponse.setZoneId(zoneId); - isoResponse.setZoneName(datacenter.getName()); - - // If the user is an admin, add the template download status - if (isAdmin || account.getId() == iso.getAccountId()) { - // add download status - if (isoHost.getDownloadState() != Status.DOWNLOADED) { - String isoStatus = "Processing"; - if (isoHost.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) { - isoStatus = "Download Complete"; - } else if (isoHost.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) { - if (isoHost.getDownloadPercent() == 100) { - isoStatus = "Installing ISO"; - } else { - isoStatus = isoHost.getDownloadPercent() + "% Downloaded"; - } - } else { - isoStatus = isoHost.getErrorString(); - } - isoResponse.setStatus(isoStatus); - } else { - isoResponse.setStatus("Successfully Installed"); + List dcs = new ArrayList(); + if (zoneId == null) { + dcs.addAll(ApiDBUtils.listZones()); + for (DataCenterVO dc : dcs ) { + isoResponses.addAll(createIsoResponses(iso, dc.getId(), readyOnly)); } + return isoResponses; + } else { + return createIsoResponses(iso, zoneId, readyOnly); } - - Long isoSize = isoHost.getSize(); - if (isoSize > 0) { - isoResponse.setSize(isoSize); - } - - isoResponse.setObjectName("iso"); - isoResponses.add(isoResponse); } + } + + @Override + public List createIsoResponses(VirtualMachineTemplate iso, long zoneId, boolean readyOnly) { + long isoId = iso.getId(); + List isoResponses = new ArrayList(); + VMTemplateHostVO isoHost = ApiDBUtils.findTemplateHostRef(isoId, zoneId, readyOnly); + TemplateResponse isoResponse = new TemplateResponse(); + isoResponse.setId(iso.getId()); + isoResponse.setName(iso.getName()); + isoResponse.setDisplayText(iso.getDisplayText()); + isoResponse.setPublic(iso.isPublicTemplate()); + isoResponse.setExtractable(iso.isExtractable() && !(iso.getTemplateType() == TemplateType.PERHOST)); + isoResponse.setCreated(isoHost.getCreated()); + isoResponse.setReady(isoHost.getDownloadState() == Status.DOWNLOADED); + isoResponse.setBootable(iso.isBootable()); + isoResponse.setFeatured(iso.isFeatured()); + isoResponse.setCrossZones(iso.isCrossZones()); + isoResponse.setPublic(iso.isPublicTemplate()); + + // TODO: implement + GuestOS os = ApiDBUtils.findGuestOSById(iso.getGuestOSId()); + if (os != null) { + isoResponse.setOsTypeId(os.getId()); + isoResponse.setOsTypeName(os.getDisplayName()); + } else { + isoResponse.setOsTypeId(-1L); + isoResponse.setOsTypeName(""); + } + + // add account ID and name + Account owner = ApiDBUtils.findAccountById(iso.getAccountId()); + if (owner != null) { + isoResponse.setAccount(owner.getAccountName()); + isoResponse.setDomainId(owner.getDomainId()); + // TODO: implement + isoResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName()); + } + + Account account = UserContext.current().getCaller(); + boolean isAdmin = false; + if ((account == null) || BaseCmd.isAdmin(account.getType())) { + isAdmin = true; + } + // Add the zone ID + DataCenterVO datacenter = ApiDBUtils.findZoneById(zoneId); + isoResponse.setZoneId(zoneId); + isoResponse.setZoneName(datacenter.getName()); + + // If the user is an admin, add the template download status + if (isAdmin || account.getId() == iso.getAccountId()) { + // add download status + if (isoHost.getDownloadState() != Status.DOWNLOADED) { + String isoStatus = "Processing"; + if (isoHost.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) { + isoStatus = "Download Complete"; + } else if (isoHost.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) { + if (isoHost.getDownloadPercent() == 100) { + isoStatus = "Installing ISO"; + } else { + isoStatus = isoHost.getDownloadPercent() + "% Downloaded"; + } + } else { + isoStatus = isoHost.getErrorString(); + } + isoResponse.setStatus(isoStatus); + } else { + isoResponse.setStatus("Successfully Installed"); + } + } + + Long isoSize = isoHost.getSize(); + if (isoSize > 0) { + isoResponse.setSize(isoSize); + } + + isoResponse.setObjectName("iso"); + isoResponses.add(isoResponse); return isoResponses; }