diff --git a/api/src/com/cloud/api/response/TemplateResponse.java b/api/src/com/cloud/api/response/TemplateResponse.java index e1c6a3ccd20..f8ee0cb5750 100755 --- a/api/src/com/cloud/api/response/TemplateResponse.java +++ b/api/src/com/cloud/api/response/TemplateResponse.java @@ -18,6 +18,7 @@ package com.cloud.api.response; import java.util.Date; +import java.util.Map; import com.cloud.api.ApiConstants; import com.cloud.api.IdentityProxy; @@ -124,6 +125,10 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the template") private String projectName; + + @SerializedName(ApiConstants.DETAILS) @Param(description="additional key/value details tied with template") + private Map details; + @Override public Long getObjectId() { @@ -265,4 +270,12 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe public void setProjectName(String projectName) { this.projectName = projectName; } + + public Map getDetails() { + return this.details; + } + + public void setDetails(Map details) { + this.details = details; + } } diff --git a/api/src/com/cloud/template/VirtualMachineTemplate.java b/api/src/com/cloud/template/VirtualMachineTemplate.java index a57cf2a3249..9b5efc814c6 100755 --- a/api/src/com/cloud/template/VirtualMachineTemplate.java +++ b/api/src/com/cloud/template/VirtualMachineTemplate.java @@ -18,6 +18,7 @@ package com.cloud.template; import java.util.Date; +import java.util.Map; import com.cloud.acl.ControlledEntity; import com.cloud.hypervisor.Hypervisor.HypervisorType; @@ -87,4 +88,6 @@ public interface VirtualMachineTemplate extends ControlledEntity { Long getSourceTemplateId(); String getTemplateTag(); + + Map getDetails(); } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index bc4bffde878..3df4b2aa1ef 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -103,6 +103,7 @@ import com.cloud.storage.dao.SnapshotDao; import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.UploadDao; import com.cloud.storage.dao.VMTemplateDao; +import com.cloud.storage.dao.VMTemplateDetailsDao; import com.cloud.storage.dao.VMTemplateHostDao; import com.cloud.storage.dao.VMTemplateSwiftDao; import com.cloud.storage.dao.VolumeDao; @@ -163,6 +164,7 @@ public class ApiDBUtils { private static SnapshotDao _snapshotDao; private static StoragePoolDao _storagePoolDao; private static VMTemplateDao _templateDao; + private static VMTemplateDetailsDao _templateDetailsDao; private static VMTemplateHostDao _templateHostDao; private static VMTemplateSwiftDao _templateSwiftDao; private static UploadDao _uploadDao; @@ -213,6 +215,7 @@ public class ApiDBUtils { _snapshotDao = locator.getDao(SnapshotDao.class); _storagePoolDao = locator.getDao(StoragePoolDao.class); _templateDao = locator.getDao(VMTemplateDao.class); + _templateDetailsDao = locator.getDao(VMTemplateDetailsDao.class); _templateHostDao = locator.getDao(VMTemplateHostDao.class); _templateSwiftDao = locator.getDao(VMTemplateSwiftDao.class); _uploadDao = locator.getDao(UploadDao.class); @@ -482,7 +485,13 @@ public class ApiDBUtils { } public static VMTemplateVO findTemplateById(Long templateId) { - return _templateDao.findByIdIncludingRemoved(templateId); + VMTemplateVO template = _templateDao.findByIdIncludingRemoved(templateId); + if(template != null) { + Map details = _templateDetailsDao.findDetails(templateId); + if(details != null && !details.isEmpty()) + template.setDetails(details); + } + return template; } public static VMTemplateHostVO findTemplateHostRef(long templateId, long zoneId) { diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index e88fcf050df..2af53cf4bbd 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -1426,6 +1426,7 @@ public class ApiResponseHelper implements ResponseGenerator { response.setFormat(result.getFormat()); response.setOsTypeId(result.getGuestOSId()); response.setOsTypeName(ApiDBUtils.findGuestOSById(result.getGuestOSId()).getDisplayName()); + response.setDetails(result.getDetails()); if (result.getFormat() == ImageFormat.ISO) { // Templates are always bootable response.setBootable(result.isBootable()); @@ -1478,6 +1479,7 @@ public class ApiResponseHelper implements ResponseGenerator { templateResponse.setPasswordEnabled(template.getEnablePassword()); templateResponse.setCrossZones(template.isCrossZones()); templateResponse.setFormat(template.getFormat()); + templateResponse.setDetails(template.getDetails()); if (template.getTemplateType() != null) { templateResponse.setTemplateType(template.getTemplateType().toString()); } @@ -1559,6 +1561,7 @@ public class ApiResponseHelper implements ResponseGenerator { templateResponse.setTemplateType(template.getTemplateType().toString()); } templateResponse.setHypervisor(template.getHypervisorType().toString()); + templateResponse.setDetails(template.getDetails()); GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId()); if (os != null) { @@ -1643,6 +1646,7 @@ public class ApiResponseHelper implements ResponseGenerator { isoResponse.setCreated(iso.getCreated()); isoResponse.setChecksum(iso.getChecksum()); isoResponse.setPasswordEnabled(false); + isoResponse.setDetails(iso.getDetails()); // add account ID and name Account owner = ApiDBUtils.findAccountById(iso.getAccountId()); @@ -1686,6 +1690,7 @@ public class ApiResponseHelper implements ResponseGenerator { isoResponse.setCrossZones(iso.isCrossZones()); isoResponse.setPublic(iso.isPublicTemplate()); isoResponse.setChecksum(iso.getChecksum()); + isoResponse.setDetails(iso.getDetails()); // TODO: implement GuestOS os = ApiDBUtils.findGuestOSById(iso.getGuestOSId()); @@ -1743,6 +1748,7 @@ public class ApiResponseHelper implements ResponseGenerator { isoResponse.setCrossZones(iso.isCrossZones()); isoResponse.setPublic(iso.isPublicTemplate()); isoResponse.setChecksum(iso.getChecksum()); + isoResponse.setDetails(iso.getDetails()); // TODO: implement GuestOS os = ApiDBUtils.findGuestOSById(iso.getGuestOSId());