mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
fixed several template issues
merge createtemplateresponse and createteisoresponse on UI template only show template corresponding hypervisor exists
This commit is contained in:
parent
e16e0597c9
commit
446d08187b
@ -156,13 +156,10 @@ public interface ResponseGenerator {
|
||||
|
||||
VirtualMachineTemplate findTemplateById(Long templateId);
|
||||
|
||||
void createTemplateResponse(List<TemplateResponse> responses, Pair<Long, Long> templateZonePair, boolean isAdmin,
|
||||
Account account, boolean readyOnly);
|
||||
|
||||
ListResponse<TemplateResponse> createTemplateResponse2(VirtualMachineTemplate template, Long zoneId);
|
||||
|
||||
ListResponse<TemplateResponse> createIsoResponses(VirtualMachineTemplate template, Long zoneId);
|
||||
List<TemplateResponse> createTemplateResponses(long templateId, long zoneId, boolean readyOnly);
|
||||
|
||||
List<TemplateResponse> createTemplateResponses(long templateId, Long snapshotId, Long volumeId, boolean readyOnly);
|
||||
|
||||
ListResponse<SecurityGroupResponse> createSecurityGroupResponses(List<? extends SecurityGroupRules> networkGroups);
|
||||
|
||||
SecurityGroupResponse createSecurityGroupResponseFromIngressRule(List<? extends IngressRule> ingressRules);
|
||||
@ -171,20 +168,12 @@ public interface ResponseGenerator {
|
||||
|
||||
ExtractResponse createExtractResponse(Long uploadId, Long id, Long zoneId, Long accountId, String mode);
|
||||
|
||||
TemplateResponse createTemplateResponse(VirtualMachineTemplate template, Long destZoneId);
|
||||
|
||||
TemplateResponse createIsoResponse3(VirtualMachineTemplate iso, Long destZoneId);
|
||||
|
||||
String toSerializedString(CreateCmdResponse response, String responseType);
|
||||
|
||||
AsyncJobResponse createAsyncJobResponse(AsyncJob job);
|
||||
|
||||
TemplateResponse createTemplateResponse(VirtualMachineTemplate template, Long snapshotId, Long volumeId);
|
||||
|
||||
EventResponse createEventResponse(Event event);
|
||||
|
||||
ListResponse<TemplateResponse> createIsoResponse(Set<Pair<Long,Long>> isoZonePairSet, boolean onlyReady, Account account, Boolean isBootable, boolean readyOnly);
|
||||
|
||||
TemplateResponse createIsoResponse(VirtualMachineTemplate result);
|
||||
|
||||
List<CapacityResponse> createCapacityResponse(List<? extends Capacity> result, DecimalFormat format);
|
||||
@ -203,4 +192,6 @@ public interface ResponseGenerator {
|
||||
|
||||
Long getSecurityGroupId(String groupName, long accountId);
|
||||
|
||||
List<TemplateResponse> createIsoResponses(long isoId, long zoneId, boolean readyOnly);
|
||||
|
||||
}
|
||||
|
||||
@ -18,6 +18,8 @@
|
||||
|
||||
package com.cloud.api.commands;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.api.ApiConstants;
|
||||
@ -26,6 +28,7 @@ import com.cloud.api.BaseCmd;
|
||||
import com.cloud.api.Implementation;
|
||||
import com.cloud.api.Parameter;
|
||||
import com.cloud.api.ServerApiException;
|
||||
import com.cloud.api.response.ListResponse;
|
||||
import com.cloud.api.response.TemplateResponse;
|
||||
import com.cloud.async.AsyncJob;
|
||||
import com.cloud.event.EventTypes;
|
||||
@ -115,10 +118,16 @@ public class CopyTemplateCmd extends BaseAsyncCmd {
|
||||
public void execute() throws ResourceAllocationException{
|
||||
try {
|
||||
VirtualMachineTemplate template = _templateService.copyTemplate(this);
|
||||
TemplateResponse templateResponse = _responseGenerator.createTemplateResponse(template, destZoneId);
|
||||
templateResponse.setResponseName(getCommandName());
|
||||
|
||||
this.setResponseObject(templateResponse);
|
||||
if (template != null){
|
||||
ListResponse<TemplateResponse> response = new ListResponse<TemplateResponse>();
|
||||
List<TemplateResponse> templateResponses = _responseGenerator.createTemplateResponses(template.getId(), getDestinationZoneId(), false);
|
||||
response.setResponses(templateResponses);
|
||||
response.setResponseName(getCommandName());
|
||||
this.setResponseObject(response);
|
||||
} else {
|
||||
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to copy template");
|
||||
}
|
||||
} catch (StorageUnavailableException ex) {
|
||||
s_logger.warn("Exception: ", ex);
|
||||
throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage());
|
||||
|
||||
@ -18,6 +18,8 @@
|
||||
|
||||
package com.cloud.api.commands;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.api.ApiConstants;
|
||||
@ -26,6 +28,7 @@ import com.cloud.api.BaseCmd;
|
||||
import com.cloud.api.Implementation;
|
||||
import com.cloud.api.Parameter;
|
||||
import com.cloud.api.ServerApiException;
|
||||
import com.cloud.api.response.ListResponse;
|
||||
import com.cloud.api.response.StoragePoolResponse;
|
||||
import com.cloud.api.response.TemplateResponse;
|
||||
import com.cloud.async.AsyncJob;
|
||||
@ -183,12 +186,15 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd {
|
||||
@Override
|
||||
public void execute() {
|
||||
VirtualMachineTemplate template = _userVmService.createPrivateTemplate(this);
|
||||
if (template != null) {
|
||||
TemplateResponse response = _responseGenerator.createTemplateResponse(template, snapshotId, volumeId);
|
||||
response.setResponseName(getCommandName());
|
||||
if (template != null){
|
||||
ListResponse<TemplateResponse> response = new ListResponse<TemplateResponse>();
|
||||
List<TemplateResponse> templateResponses = _responseGenerator.createTemplateResponses(template.getId(), snapshotId, volumeId, false);
|
||||
response.setResponses(templateResponses);
|
||||
response.setResponseName(getCommandName());
|
||||
this.setResponseObject(response);
|
||||
} else {
|
||||
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create template");
|
||||
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create private template");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
|
||||
package com.cloud.api.commands;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@ -126,8 +127,6 @@ public class ListIsosCmd extends BaseListCmd {
|
||||
}
|
||||
|
||||
public boolean listInReadyState() {
|
||||
return true;
|
||||
/*
|
||||
Account account = UserContext.current().getCaller();
|
||||
// It is account specific if account is admin type and domainId and accountName are not null
|
||||
boolean isAccountSpecific = (account == null || isAdmin(account.getType())) && (getAccountName() != null) && (getDomainId() != null);
|
||||
@ -136,7 +135,6 @@ public class ListIsosCmd extends BaseListCmd {
|
||||
boolean onlyReady = (templateFilter == TemplateFilter.featured) || (templateFilter == TemplateFilter.selfexecutable) || (templateFilter == TemplateFilter.sharedexecutable)
|
||||
|| (templateFilter == TemplateFilter.executable && isAccountSpecific) || (templateFilter == TemplateFilter.community);
|
||||
return onlyReady;
|
||||
*/
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
@ -155,27 +153,15 @@ public class ListIsosCmd extends BaseListCmd {
|
||||
@Override
|
||||
public void execute(){
|
||||
Set<Pair<Long, Long>> isoZonePairSet = _mgr.listIsos(this);
|
||||
TemplateFilter isoFilterObj = null;
|
||||
ListResponse<TemplateResponse> response = new ListResponse<TemplateResponse>();
|
||||
List<TemplateResponse> templateResponses = new ArrayList<TemplateResponse>();
|
||||
|
||||
try {
|
||||
if (isoFilter == null) {
|
||||
isoFilterObj = TemplateFilter.selfexecutable;
|
||||
} else {
|
||||
isoFilterObj = TemplateFilter.valueOf(isoFilter);
|
||||
}
|
||||
} catch (IllegalArgumentException e) {
|
||||
// how did we get this far? The request should've been rejected already before the response stage...
|
||||
isoFilterObj = TemplateFilter.selfexecutable;
|
||||
for (Pair<Long, Long> iso : isoZonePairSet) {
|
||||
List<TemplateResponse> responses = new ArrayList<TemplateResponse>();
|
||||
responses = _responseGenerator.createIsoResponses(iso.first(), iso.second(), listInReadyState());
|
||||
templateResponses.addAll(responses);
|
||||
}
|
||||
|
||||
boolean isAdmin = false;
|
||||
Account account = UserContext.current().getCaller();
|
||||
if ((account == null) || BaseCmd.isAdmin(account.getType())) {
|
||||
isAdmin = true;
|
||||
}
|
||||
|
||||
ListResponse<TemplateResponse> response = _responseGenerator.createIsoResponse(isoZonePairSet, isAdmin, account, bootable, listInReadyState());
|
||||
response.setResponses(templateResponses);
|
||||
response.setResponseName(getCommandName());
|
||||
this.setResponseObject(response);
|
||||
}
|
||||
}
|
||||
|
||||
@ -107,8 +107,7 @@ public class ListTemplatesCmd extends BaseListCmd {
|
||||
}
|
||||
|
||||
public boolean listInReadyState() {
|
||||
return true;
|
||||
/*
|
||||
|
||||
Account account = UserContext.current().getCaller();
|
||||
// It is account specific if account is admin type and domainId and accountName are not null
|
||||
boolean isAccountSpecific = (account == null || isAdmin(account.getType())) && (getAccountName() != null) && (getDomainId() != null);
|
||||
@ -117,7 +116,6 @@ public class ListTemplatesCmd extends BaseListCmd {
|
||||
boolean onlyReady = (templateFilter == TemplateFilter.featured) || (templateFilter == TemplateFilter.selfexecutable) || (templateFilter == TemplateFilter.sharedexecutable)
|
||||
|| (templateFilter == TemplateFilter.executable && isAccountSpecific) || (templateFilter == TemplateFilter.community);
|
||||
return onlyReady;
|
||||
*/
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
@ -136,18 +134,14 @@ public class ListTemplatesCmd extends BaseListCmd {
|
||||
@Override
|
||||
public void execute(){
|
||||
Set<Pair<Long, Long>> templateZonePairSet = _mgr.listTemplates(this);
|
||||
|
||||
boolean isAdmin = false;
|
||||
Account account = UserContext.current().getCaller();
|
||||
if ((account == null) || BaseCmd.isAdmin(account.getType())) {
|
||||
isAdmin = true;
|
||||
}
|
||||
|
||||
ListResponse<TemplateResponse> response = new ListResponse<TemplateResponse>();
|
||||
List<TemplateResponse> templateResponses = new ArrayList<TemplateResponse>();
|
||||
|
||||
for (Pair<Long, Long> template : templateZonePairSet) {
|
||||
_responseGenerator.createTemplateResponse(templateResponses, template, isAdmin, account, listInReadyState());
|
||||
List<TemplateResponse> responses = new ArrayList<TemplateResponse>();
|
||||
responses = _responseGenerator.createTemplateResponses(template.first(), template.second(), listInReadyState());
|
||||
templateResponses.addAll(responses);
|
||||
}
|
||||
|
||||
response.setResponses(templateResponses);
|
||||
|
||||
@ -17,6 +17,8 @@
|
||||
*/
|
||||
package com.cloud.api.commands;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.api.ApiConstants;
|
||||
@ -153,9 +155,11 @@ public class RegisterIsoCmd extends BaseCmd {
|
||||
@Override
|
||||
public void execute() throws ResourceAllocationException{
|
||||
VirtualMachineTemplate template = _templateService.registerIso(this);
|
||||
if (template != null) {
|
||||
ListResponse<TemplateResponse> response = _responseGenerator.createIsoResponses(template, zoneId);
|
||||
response.setResponseName(getCommandName());
|
||||
if (template != null) {
|
||||
ListResponse<TemplateResponse> response = new ListResponse<TemplateResponse>();
|
||||
List<TemplateResponse> templateResponses = _responseGenerator.createIsoResponses(template.getId(), zoneId, false);
|
||||
response.setResponses(templateResponses);
|
||||
response.setResponseName(getCommandName());
|
||||
this.setResponseObject(response);
|
||||
} else {
|
||||
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to register iso");
|
||||
|
||||
@ -18,6 +18,8 @@
|
||||
package com.cloud.api.commands;
|
||||
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
@ -34,6 +36,7 @@ import com.cloud.exception.ResourceAllocationException;
|
||||
import com.cloud.template.VirtualMachineTemplate;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.user.UserContext;
|
||||
import com.cloud.utils.Pair;
|
||||
|
||||
@Implementation(description="Registers an existing template into the Cloud.com cloud. ", responseObject=TemplateResponse.class)
|
||||
public class RegisterTemplateCmd extends BaseCmd {
|
||||
@ -196,9 +199,10 @@ public class RegisterTemplateCmd extends BaseCmd {
|
||||
try {
|
||||
VirtualMachineTemplate template = _templateService.registerTemplate(this);
|
||||
if (template != null){
|
||||
ListResponse<TemplateResponse> response = _responseGenerator.createTemplateResponse2(template, zoneId);
|
||||
response.setResponseName(getCommandName());
|
||||
|
||||
ListResponse<TemplateResponse> response = new ListResponse<TemplateResponse>();
|
||||
List<TemplateResponse> templateResponses = _responseGenerator.createTemplateResponses(template.getId(), zoneId, false);
|
||||
response.setResponses(templateResponses);
|
||||
response.setResponseName(getCommandName());
|
||||
this.setResponseObject(response);
|
||||
} else {
|
||||
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to register template");
|
||||
|
||||
@ -425,13 +425,17 @@ public class ApiDBUtils {
|
||||
public static VMTemplateVO findTemplateById(Long templateId) {
|
||||
return _templateDao.findByIdIncludingRemoved(templateId);
|
||||
}
|
||||
|
||||
|
||||
public static VMTemplateHostVO findTemplateHostRef(long templateId, long zoneId) {
|
||||
return findTemplateHostRef(templateId, zoneId, false);
|
||||
}
|
||||
|
||||
public static VMTemplateHostVO findTemplateHostRef(long templateId, long zoneId, boolean readyOnly) {
|
||||
VMTemplateVO vmTemplate = findTemplateById(templateId);
|
||||
if (vmTemplate.getHypervisorType() == HypervisorType.BareMetal) {
|
||||
return _templateHostDao.listByTemplateId(templateId).get(0);
|
||||
} else {
|
||||
return _storageMgr.getTemplateHostRef(zoneId, templateId);
|
||||
return _storageMgr.getTemplateHostRef(zoneId, templateId, readyOnly);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1447,225 +1447,209 @@ public class ApiResponseHelper implements ResponseGenerator {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createTemplateResponse(List<TemplateResponse> responses, Pair<Long, Long> templateZonePair, boolean isAdmin, Account account, boolean readyOnly) {
|
||||
List<VMTemplateHostVO> templateHostRefsForTemplate = ApiDBUtils.listTemplateHostBy(templateZonePair.first(), templateZonePair.second(), readyOnly);
|
||||
VMTemplateVO template = ApiDBUtils.findTemplateById(templateZonePair.first());
|
||||
public List<TemplateResponse> createTemplateResponses(long templateId, long zoneId, boolean readyOnly) {
|
||||
VirtualMachineTemplate template = findTemplateById(templateId);
|
||||
List<TemplateResponse> responses = new ArrayList<TemplateResponse>();
|
||||
VMTemplateHostVO templateHostRef = ApiDBUtils.findTemplateHostRef(templateId, zoneId, readyOnly);
|
||||
if (templateHostRef == null) {
|
||||
return responses;
|
||||
}
|
||||
|
||||
for (VMTemplateHostVO templateHostRef : templateHostRefsForTemplate) {
|
||||
|
||||
if (readyOnly) {
|
||||
if (templateHostRef.getDownloadState() != Status.DOWNLOADED) {
|
||||
continue;
|
||||
}
|
||||
boolean foundTheSameTemplate = false;
|
||||
for (TemplateResponse res : responses) {
|
||||
if (res.getId() == templateHostRef.getTemplateId() && res.getZoneId() == templateZonePair.second()) {
|
||||
foundTheSameTemplate = true;
|
||||
continue;
|
||||
HostVO host = ApiDBUtils.findHostById(templateHostRef.getHostId());
|
||||
if (host.getType() == Host.Type.LocalSecondaryStorage && host.getStatus() != com.cloud.host.Status.Up) {
|
||||
return responses;
|
||||
}
|
||||
|
||||
TemplateResponse templateResponse = new TemplateResponse();
|
||||
templateResponse.setId(template.getId());
|
||||
templateResponse.setName(template.getName());
|
||||
templateResponse.setDisplayText(template.getDisplayText());
|
||||
templateResponse.setPublic(template.isPublicTemplate());
|
||||
templateResponse.setCreated(templateHostRef.getCreated());
|
||||
|
||||
templateResponse.setReady(templateHostRef.getDownloadState() == Status.DOWNLOADED);
|
||||
templateResponse.setFeatured(template.isFeatured());
|
||||
templateResponse.setExtractable(template.isExtractable() && !(template.getTemplateType() == TemplateType.SYSTEM));
|
||||
templateResponse.setPasswordEnabled(template.getEnablePassword());
|
||||
templateResponse.setCrossZones(template.isCrossZones());
|
||||
templateResponse.setFormat(template.getFormat());
|
||||
if (template.getTemplateType() != null) {
|
||||
templateResponse.setTemplateType(template.getTemplateType().toString());
|
||||
}
|
||||
templateResponse.setHypervisor(template.getHypervisorType().toString());
|
||||
|
||||
GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId());
|
||||
if (os != null) {
|
||||
templateResponse.setOsTypeId(os.getId());
|
||||
templateResponse.setOsTypeName(os.getDisplayName());
|
||||
} else {
|
||||
templateResponse.setOsTypeId(-1L);
|
||||
templateResponse.setOsTypeName("");
|
||||
}
|
||||
|
||||
// add account ID and name
|
||||
Account owner = ApiDBUtils.findAccountById(template.getAccountId());
|
||||
if (owner != null) {
|
||||
templateResponse.setAccount(owner.getAccountName());
|
||||
templateResponse.setDomainId(owner.getDomainId());
|
||||
templateResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName());
|
||||
}
|
||||
|
||||
|
||||
|
||||
DataCenterVO datacenter = ApiDBUtils.findZoneById(zoneId);
|
||||
|
||||
// Add the zone ID
|
||||
templateResponse.setZoneId(zoneId);
|
||||
templateResponse.setZoneName(datacenter.getName());
|
||||
|
||||
Account account = UserContext.current().getCaller();
|
||||
boolean isAdmin = false;
|
||||
if ((account == null) || BaseCmd.isAdmin(account.getType())) {
|
||||
isAdmin = true;
|
||||
}
|
||||
|
||||
// If the user is an Admin, add the template download status
|
||||
if (isAdmin || account.getId() == template.getAccountId()) {
|
||||
// add download status
|
||||
if (templateHostRef.getDownloadState() != Status.DOWNLOADED) {
|
||||
String templateStatus = "Processing";
|
||||
if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) {
|
||||
if (templateHostRef.getDownloadPercent() == 100) {
|
||||
templateStatus = "Installing Template";
|
||||
} else {
|
||||
templateStatus = templateHostRef.getDownloadPercent() + "% Downloaded";
|
||||
}
|
||||
} else {
|
||||
templateStatus = templateHostRef.getErrorString();
|
||||
}
|
||||
if (foundTheSameTemplate) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
HostVO host = ApiDBUtils.findHostById(templateHostRef.getHostId());
|
||||
if (host.getType() == Host.Type.LocalSecondaryStorage && host.getStatus() != com.cloud.host.Status.Up) {
|
||||
continue;
|
||||
}
|
||||
|
||||
TemplateResponse templateResponse = new TemplateResponse();
|
||||
templateResponse.setId(template.getId());
|
||||
templateResponse.setName(template.getName());
|
||||
templateResponse.setDisplayText(template.getDisplayText());
|
||||
templateResponse.setPublic(template.isPublicTemplate());
|
||||
templateResponse.setCreated(templateHostRef.getCreated());
|
||||
|
||||
templateResponse.setReady(templateHostRef.getDownloadState() == Status.DOWNLOADED);
|
||||
templateResponse.setFeatured(template.isFeatured());
|
||||
templateResponse.setExtractable(template.isExtractable() && !(template.getTemplateType() == TemplateType.SYSTEM));
|
||||
templateResponse.setPasswordEnabled(template.getEnablePassword());
|
||||
templateResponse.setCrossZones(template.isCrossZones());
|
||||
templateResponse.setFormat(template.getFormat());
|
||||
if (template.getTemplateType() != null) {
|
||||
templateResponse.setTemplateType(template.getTemplateType().toString());
|
||||
}
|
||||
templateResponse.setHypervisor(template.getHypervisorType().toString());
|
||||
|
||||
GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId());
|
||||
if (os != null) {
|
||||
templateResponse.setOsTypeId(os.getId());
|
||||
templateResponse.setOsTypeName(os.getDisplayName());
|
||||
templateResponse.setStatus(templateStatus);
|
||||
} else if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) {
|
||||
templateResponse.setStatus("Download Complete");
|
||||
} else {
|
||||
templateResponse.setOsTypeId(-1L);
|
||||
templateResponse.setOsTypeName("");
|
||||
templateResponse.setStatus("Successfully Installed");
|
||||
}
|
||||
}
|
||||
|
||||
// add account ID and name
|
||||
Account owner = ApiDBUtils.findAccountById(template.getAccountId());
|
||||
Long templateSize = templateHostRef.getSize();
|
||||
if (templateSize > 0) {
|
||||
templateResponse.setSize(templateSize);
|
||||
}
|
||||
|
||||
templateResponse.setChecksum(template.getChecksum());
|
||||
templateResponse.setSourceTemplateId(template.getSourceTemplateId());
|
||||
|
||||
templateResponse.setChecksum(template.getChecksum());
|
||||
|
||||
templateResponse.setObjectName("template");
|
||||
responses.add(templateResponse);
|
||||
return responses;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<TemplateResponse> createIsoResponses(long isoId, long zoneId, boolean readyOnly) {
|
||||
VirtualMachineTemplate iso = findTemplateById(isoId);
|
||||
List<TemplateResponse> isoResponses = new ArrayList<TemplateResponse>();
|
||||
if ( iso.getTemplateType() == TemplateType.PERHOST) {
|
||||
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.setReady(true);
|
||||
isoResponse.setBootable(iso.isBootable());
|
||||
isoResponse.setFeatured(iso.isFeatured());
|
||||
isoResponse.setCrossZones(iso.isCrossZones());
|
||||
isoResponse.setPublic(iso.isPublicTemplate());
|
||||
isoResponse.setCreated(iso.getCreated());
|
||||
isoResponse.setPasswordEnabled(false);
|
||||
Account owner = ApiDBUtils.findAccountById(iso.getAccountId());
|
||||
if (owner != null) {
|
||||
templateResponse.setAccount(owner.getAccountName());
|
||||
templateResponse.setDomainId(owner.getDomainId());
|
||||
templateResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName());
|
||||
isoResponse.setAccount(owner.getAccountName());
|
||||
isoResponse.setDomainId(owner.getDomainId());
|
||||
isoResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName());
|
||||
}
|
||||
isoResponse.setObjectName("iso");
|
||||
isoResponses.add(isoResponse);
|
||||
|
||||
templateResponse.setHostId(host.getId());
|
||||
templateResponse.setHostName(host.getName());
|
||||
|
||||
DataCenterVO datacenter = ApiDBUtils.findZoneById(host.getDataCenterId());
|
||||
|
||||
} 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
|
||||
templateResponse.setZoneId(host.getDataCenterId());
|
||||
templateResponse.setZoneName(datacenter.getName());
|
||||
|
||||
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() == template.getAccountId()) {
|
||||
if (isAdmin || account.getId() == iso.getAccountId()) {
|
||||
// add download status
|
||||
if (templateHostRef.getDownloadState() != Status.DOWNLOADED) {
|
||||
String templateStatus = "Processing";
|
||||
if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) {
|
||||
if (templateHostRef.getDownloadPercent() == 100) {
|
||||
templateStatus = "Installing Template";
|
||||
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 {
|
||||
templateStatus = templateHostRef.getDownloadPercent() + "% Downloaded";
|
||||
isoStatus = isoHost.getDownloadPercent() + "% Downloaded";
|
||||
}
|
||||
} else {
|
||||
templateStatus = templateHostRef.getErrorString();
|
||||
isoStatus = isoHost.getErrorString();
|
||||
}
|
||||
templateResponse.setStatus(templateStatus);
|
||||
} else if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) {
|
||||
templateResponse.setStatus("Download Complete");
|
||||
isoResponse.setStatus(isoStatus);
|
||||
} else {
|
||||
templateResponse.setStatus("Successfully Installed");
|
||||
isoResponse.setStatus("Successfully Installed");
|
||||
}
|
||||
}
|
||||
|
||||
Long templateSize = templateHostRef.getSize();
|
||||
if (templateSize > 0) {
|
||||
templateResponse.setSize(templateSize);
|
||||
|
||||
Long isoSize = isoHost.getSize();
|
||||
if (isoSize > 0) {
|
||||
isoResponse.setSize(isoSize);
|
||||
}
|
||||
|
||||
templateResponse.setChecksum(template.getChecksum());
|
||||
templateResponse.setSourceTemplateId(template.getSourceTemplateId());
|
||||
|
||||
templateResponse.setChecksum(template.getChecksum());
|
||||
|
||||
templateResponse.setObjectName("template");
|
||||
responses.add(templateResponse);
|
||||
|
||||
isoResponse.setObjectName("iso");
|
||||
isoResponses.add(isoResponse);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListResponse<TemplateResponse> createTemplateResponse2(VirtualMachineTemplate template, Long zoneId) {
|
||||
ListResponse<TemplateResponse> response = new ListResponse<TemplateResponse>();
|
||||
List<TemplateResponse> responses = new ArrayList<TemplateResponse>();
|
||||
List<DataCenterVO> zones = null;
|
||||
|
||||
if ((zoneId != null) && (zoneId != -1)) {
|
||||
zones = new ArrayList<DataCenterVO>();
|
||||
zones.add(ApiDBUtils.findZoneById(zoneId));
|
||||
} else {
|
||||
zones = ApiDBUtils.listZones();
|
||||
}
|
||||
|
||||
for (DataCenterVO zone : zones) {
|
||||
TemplateResponse templateResponse = new TemplateResponse();
|
||||
templateResponse.setId(template.getId());
|
||||
templateResponse.setName(template.getName());
|
||||
templateResponse.setDisplayText(template.getDisplayText());
|
||||
templateResponse.setPublic(template.isPublicTemplate());
|
||||
templateResponse.setExtractable(template.isExtractable());
|
||||
templateResponse.setCrossZones(template.isCrossZones());
|
||||
|
||||
VMTemplateHostVO isoHostRef = ApiDBUtils.findTemplateHostRef(template.getId(), zone.getId());
|
||||
if (isoHostRef != null) {
|
||||
templateResponse.setCreated(isoHostRef.getCreated());
|
||||
templateResponse.setReady(isoHostRef.getDownloadState() == Status.DOWNLOADED);
|
||||
}
|
||||
|
||||
templateResponse.setFeatured(template.isFeatured());
|
||||
templateResponse.setPasswordEnabled(template.getEnablePassword());
|
||||
templateResponse.setFormat(template.getFormat());
|
||||
templateResponse.setStatus("Processing");
|
||||
|
||||
GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId());
|
||||
if (os != null) {
|
||||
templateResponse.setOsTypeId(os.getId());
|
||||
templateResponse.setOsTypeName(os.getDisplayName());
|
||||
} else {
|
||||
templateResponse.setOsTypeId(-1L);
|
||||
templateResponse.setOsTypeName("");
|
||||
}
|
||||
|
||||
Account owner = ApiDBUtils.findAccountById(template.getAccountId());
|
||||
if (owner != null) {
|
||||
templateResponse.setAccountId(owner.getId());
|
||||
templateResponse.setAccount(owner.getAccountName());
|
||||
templateResponse.setDomainId(owner.getDomainId());
|
||||
templateResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName());
|
||||
}
|
||||
|
||||
templateResponse.setZoneId(zone.getId());
|
||||
templateResponse.setZoneName(zone.getName());
|
||||
templateResponse.setHypervisor(template.getHypervisorType().toString());
|
||||
templateResponse.setObjectName("template");
|
||||
templateResponse.setChecksum(template.getChecksum());
|
||||
templateResponse.setSourceTemplateId(template.getSourceTemplateId());
|
||||
|
||||
responses.add(templateResponse);
|
||||
}
|
||||
response.setResponses(responses);
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListResponse<TemplateResponse> createIsoResponses(VirtualMachineTemplate template, Long zoneId) {
|
||||
ListResponse<TemplateResponse> response = new ListResponse<TemplateResponse>();
|
||||
List<TemplateResponse> responses = new ArrayList<TemplateResponse>();
|
||||
List<DataCenterVO> zones = null;
|
||||
|
||||
if ((zoneId != null) && (zoneId != -1)) {
|
||||
zones = new ArrayList<DataCenterVO>();
|
||||
zones.add(ApiDBUtils.findZoneById(zoneId));
|
||||
} else {
|
||||
zones = ApiDBUtils.listZones();
|
||||
}
|
||||
|
||||
for (DataCenterVO zone : zones) {
|
||||
TemplateResponse templateResponse = new TemplateResponse();
|
||||
templateResponse.setId(template.getId());
|
||||
templateResponse.setName(template.getName());
|
||||
templateResponse.setDisplayText(template.getDisplayText());
|
||||
templateResponse.setPublic(template.isPublicTemplate());
|
||||
|
||||
VMTemplateHostVO isoHostRef = ApiDBUtils.findTemplateHostRef(template.getId(), zone.getId());
|
||||
if (isoHostRef != null) {
|
||||
templateResponse.setCreated(isoHostRef.getCreated());
|
||||
templateResponse.setReady(isoHostRef.getDownloadState() == Status.DOWNLOADED);
|
||||
}
|
||||
|
||||
templateResponse.setFeatured(template.isFeatured());
|
||||
templateResponse.setExtractable(template.isExtractable());
|
||||
templateResponse.setBootable(template.isBootable());
|
||||
templateResponse.setOsTypeId(template.getGuestOSId());
|
||||
templateResponse.setOsTypeName(ApiDBUtils.findGuestOSById(template.getGuestOSId()).getDisplayName());
|
||||
|
||||
Account owner = ApiDBUtils.findAccountById(template.getAccountId());
|
||||
if (owner != null) {
|
||||
templateResponse.setAccountId(owner.getId());
|
||||
templateResponse.setAccount(owner.getAccountName());
|
||||
templateResponse.setDomainId(owner.getDomainId());
|
||||
templateResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName());
|
||||
}
|
||||
|
||||
templateResponse.setZoneId(zone.getId());
|
||||
templateResponse.setZoneName(zone.getName());
|
||||
templateResponse.setObjectName("iso");
|
||||
|
||||
responses.add(templateResponse);
|
||||
}
|
||||
response.setResponses(responses);
|
||||
return response;
|
||||
return isoResponses;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -1757,154 +1741,6 @@ public class ApiResponseHelper implements ResponseGenerator {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public TemplateResponse createTemplateResponse(VirtualMachineTemplate template, Long destZoneId) {
|
||||
TemplateResponse templateResponse = new TemplateResponse();
|
||||
if (template != null) {
|
||||
templateResponse.setId(template.getId());
|
||||
templateResponse.setName(template.getName());
|
||||
templateResponse.setDisplayText(template.getDisplayText());
|
||||
templateResponse.setPublic(template.isPublicTemplate());
|
||||
templateResponse.setBootable(template.isBootable());
|
||||
templateResponse.setFeatured(template.isFeatured());
|
||||
templateResponse.setCrossZones(template.isCrossZones());
|
||||
templateResponse.setCreated(template.getCreated());
|
||||
templateResponse.setFormat(template.getFormat());
|
||||
templateResponse.setPasswordEnabled(template.getEnablePassword());
|
||||
templateResponse.setZoneId(destZoneId);
|
||||
templateResponse.setZoneName(ApiDBUtils.findZoneById(destZoneId).getName());
|
||||
templateResponse.setSourceTemplateId(template.getSourceTemplateId());
|
||||
templateResponse.setChecksum(template.getChecksum());
|
||||
|
||||
GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId());
|
||||
if (os != null) {
|
||||
templateResponse.setOsTypeId(os.getId());
|
||||
templateResponse.setOsTypeName(os.getDisplayName());
|
||||
} else {
|
||||
templateResponse.setOsTypeId(-1L);
|
||||
templateResponse.setOsTypeName("");
|
||||
}
|
||||
|
||||
// add account ID and name
|
||||
Account owner = ApiDBUtils.findAccountById(template.getAccountId());
|
||||
if (owner != null) {
|
||||
templateResponse.setAccount(owner.getAccountName());
|
||||
templateResponse.setDomainId(owner.getDomainId());
|
||||
templateResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName());
|
||||
}
|
||||
|
||||
// set status
|
||||
Account account = UserContext.current().getCaller();
|
||||
boolean isAdmin = false;
|
||||
if ((account == null) || BaseCmd.isAdmin(account.getType())) {
|
||||
isAdmin = true;
|
||||
}
|
||||
|
||||
// Return download status for admin users
|
||||
VMTemplateHostVO templateHostRef = ApiDBUtils.findTemplateHostRef(template.getId(), destZoneId);
|
||||
|
||||
if (isAdmin || template.getAccountId() == account.getId()) {
|
||||
if (templateHostRef.getDownloadState() != Status.DOWNLOADED) {
|
||||
String templateStatus = "Processing";
|
||||
if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) {
|
||||
if (templateHostRef.getDownloadPercent() == 100) {
|
||||
templateStatus = "Installing Template";
|
||||
} else {
|
||||
templateStatus = templateHostRef.getDownloadPercent() + "% Downloaded";
|
||||
}
|
||||
} else {
|
||||
templateStatus = templateHostRef.getErrorString();
|
||||
}
|
||||
templateResponse.setStatus(templateStatus);
|
||||
} else if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) {
|
||||
templateResponse.setStatus("Download Complete");
|
||||
} else {
|
||||
templateResponse.setStatus("Successfully Installed");
|
||||
}
|
||||
}
|
||||
|
||||
templateResponse.setReady(templateHostRef != null && templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED);
|
||||
|
||||
} else {
|
||||
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to copy template");
|
||||
}
|
||||
|
||||
templateResponse.setObjectName("template");
|
||||
return templateResponse;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TemplateResponse createIsoResponse3(VirtualMachineTemplate iso, Long destZoneId) {
|
||||
TemplateResponse isoResponse = new TemplateResponse();
|
||||
if (iso != null) {
|
||||
isoResponse.setId(iso.getId());
|
||||
isoResponse.setName(iso.getName());
|
||||
isoResponse.setDisplayText(iso.getDisplayText());
|
||||
isoResponse.setPublic(iso.isPublicTemplate());
|
||||
isoResponse.setBootable(iso.isBootable());
|
||||
isoResponse.setFeatured(iso.isFeatured());
|
||||
isoResponse.setCrossZones(iso.isCrossZones());
|
||||
isoResponse.setCreated(iso.getCreated());
|
||||
isoResponse.setZoneId(destZoneId);
|
||||
isoResponse.setZoneName(ApiDBUtils.findZoneById(destZoneId).getName());
|
||||
|
||||
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());
|
||||
isoResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName());
|
||||
}
|
||||
|
||||
// set status
|
||||
Account account = UserContext.current().getCaller();
|
||||
boolean isAdmin = false;
|
||||
if ((account == null) || BaseCmd.isAdmin(account.getType())) {
|
||||
isAdmin = true;
|
||||
}
|
||||
|
||||
// Return download status for admin users
|
||||
VMTemplateHostVO templateHostRef = ApiDBUtils.findTemplateHostRef(iso.getId(), destZoneId);
|
||||
|
||||
if (isAdmin || iso.getAccountId() == account.getId()) {
|
||||
if (templateHostRef.getDownloadState() != Status.DOWNLOADED) {
|
||||
String templateStatus = "Processing";
|
||||
if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) {
|
||||
if (templateHostRef.getDownloadPercent() == 100) {
|
||||
templateStatus = "Installing Template";
|
||||
} else {
|
||||
templateStatus = templateHostRef.getDownloadPercent() + "% Downloaded";
|
||||
}
|
||||
} else {
|
||||
templateStatus = templateHostRef.getErrorString();
|
||||
}
|
||||
isoResponse.setStatus(templateStatus);
|
||||
} else if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) {
|
||||
isoResponse.setStatus("Download Complete");
|
||||
} else {
|
||||
isoResponse.setStatus("Successfully Installed");
|
||||
}
|
||||
}
|
||||
|
||||
isoResponse.setReady(templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED);
|
||||
|
||||
} else {
|
||||
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to copy iso");
|
||||
}
|
||||
|
||||
isoResponse.setObjectName("iso");
|
||||
return isoResponse;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toSerializedString(CreateCmdResponse response, String responseType) {
|
||||
return ApiResponseSerializer.toSerializedString(response, responseType);
|
||||
@ -1933,16 +1769,8 @@ public class ApiResponseHelper implements ResponseGenerator {
|
||||
}
|
||||
|
||||
@Override
|
||||
public TemplateResponse createTemplateResponse(VirtualMachineTemplate template, Long snapshotId, Long volumeId) {
|
||||
TemplateResponse response = new TemplateResponse();
|
||||
response.setId(template.getId());
|
||||
response.setName(template.getName());
|
||||
response.setDisplayText(template.getDisplayText());
|
||||
response.setPublic(template.isPublicTemplate());
|
||||
response.setPasswordEnabled(template.getEnablePassword());
|
||||
response.setCrossZones(template.isCrossZones());
|
||||
response.setChecksum(template.getChecksum());
|
||||
|
||||
public List<TemplateResponse> createTemplateResponses(long templateId, Long snapshotId, Long volumeId, boolean readyOnly) {
|
||||
Long zoneId = null;
|
||||
VolumeVO volume = null;
|
||||
if (snapshotId != null) {
|
||||
Snapshot snapshot = ApiDBUtils.findSnapshotById(snapshotId);
|
||||
@ -1950,38 +1778,7 @@ public class ApiResponseHelper implements ResponseGenerator {
|
||||
} else {
|
||||
volume = findVolumeById(volumeId);
|
||||
}
|
||||
|
||||
VMTemplateHostVO templateHostRef = ApiDBUtils.findTemplateHostRef(template.getId(), volume.getDataCenterId());
|
||||
response.setCreated(templateHostRef.getCreated());
|
||||
response.setReady(templateHostRef != null && templateHostRef.getDownloadState() == Status.DOWNLOADED);
|
||||
|
||||
GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId());
|
||||
if (os != null) {
|
||||
response.setOsTypeId(os.getId());
|
||||
response.setOsTypeName(os.getDisplayName());
|
||||
} else {
|
||||
response.setOsTypeId(-1L);
|
||||
response.setOsTypeName("");
|
||||
}
|
||||
|
||||
Account owner = ApiDBUtils.findAccountById(template.getAccountId());
|
||||
if (owner != null) {
|
||||
response.setAccount(owner.getAccountName());
|
||||
response.setDomainId(owner.getDomainId());
|
||||
response.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName());
|
||||
}
|
||||
|
||||
DataCenter zone = ApiDBUtils.findZoneById(volume.getDataCenterId());
|
||||
if (zone != null) {
|
||||
response.setZoneId(zone.getId());
|
||||
response.setZoneName(zone.getName());
|
||||
}
|
||||
|
||||
response.setSourceTemplateId(template.getSourceTemplateId());
|
||||
|
||||
response.setObjectName("template");
|
||||
return response;
|
||||
|
||||
return createTemplateResponses(templateId, volume.getDataCenterId(), readyOnly);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -2006,137 +1803,6 @@ public class ApiResponseHelper implements ResponseGenerator {
|
||||
return responseEvent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListResponse<TemplateResponse> createIsoResponse(Set<Pair<Long, Long>> isoZonePairSet, boolean isAdmin, Account account, Boolean isBootable, boolean readyOnly) {
|
||||
|
||||
ListResponse<TemplateResponse> response = new ListResponse<TemplateResponse>();
|
||||
List<TemplateResponse> isoResponses = new ArrayList<TemplateResponse>();
|
||||
|
||||
for (Pair<Long, Long> isoZonePair : isoZonePairSet) {
|
||||
VMTemplateVO iso = ApiDBUtils.findTemplateById(isoZonePair.first());
|
||||
if ((isBootable == null || !isBootable) && iso.getTemplateType() == TemplateType.PERHOST) {
|
||||
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.setReady(true);
|
||||
isoResponse.setBootable(iso.isBootable());
|
||||
isoResponse.setFeatured(iso.isFeatured());
|
||||
isoResponse.setCrossZones(iso.isCrossZones());
|
||||
isoResponse.setPublic(iso.isPublicTemplate());
|
||||
isoResponse.setCreated(iso.getCreated());
|
||||
isoResponse.setPasswordEnabled(false);
|
||||
Account owner = ApiDBUtils.findAccountById(iso.getAccountId());
|
||||
if (owner != null) {
|
||||
isoResponse.setAccount(owner.getAccountName());
|
||||
isoResponse.setDomainId(owner.getDomainId());
|
||||
isoResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName());
|
||||
}
|
||||
isoResponse.setObjectName("iso");
|
||||
isoResponses.add(isoResponse);
|
||||
response.setResponses(isoResponses);
|
||||
|
||||
if (isBootable != null && !isBootable) {
|
||||
continue; // fetch only non-bootable isos and return (for now only xen tools iso)
|
||||
}
|
||||
}
|
||||
|
||||
List<VMTemplateHostVO> isoHosts = ApiDBUtils.listTemplateHostBy(iso.getId(), isoZonePair.second(), readyOnly);
|
||||
for (VMTemplateHostVO isoHost : isoHosts) {
|
||||
|
||||
if (readyOnly) {
|
||||
if (isoHost.getDownloadState() != Status.DOWNLOADED) {
|
||||
continue;
|
||||
}
|
||||
boolean foundTheSameTemplate = false;
|
||||
for (TemplateResponse res : isoResponses) {
|
||||
if (res.getId() == isoHost.getTemplateId() && res.getZoneId() == isoZonePair.second()) {
|
||||
foundTheSameTemplate = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (foundTheSameTemplate) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
// Add the zone ID
|
||||
// TODO: implement
|
||||
HostVO host = ApiDBUtils.findHostById(isoHost.getHostId());
|
||||
DataCenterVO datacenter = ApiDBUtils.findZoneById(host.getDataCenterId());
|
||||
isoResponse.setZoneId(host.getDataCenterId());
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
response.setResponses(isoResponses);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
private List<CapacityVO> sumCapacities(List<? extends Capacity> hostCapacities) {
|
||||
Map<String, Long> totalCapacityMap = new HashMap<String, Long>();
|
||||
|
||||
@ -142,7 +142,7 @@ public interface HostDao extends GenericDao<HostVO, Long> {
|
||||
|
||||
HostVO findConsoleProxyHost(String name, Type type);
|
||||
|
||||
List<HypervisorType> getAvailHypervisorInZone(long hostId, long zoneId);
|
||||
List<HypervisorType> getAvailHypervisorInZone(Long hostId, Long zoneId);
|
||||
|
||||
/**
|
||||
* Returns a list of host ids given the conditions.
|
||||
|
||||
@ -828,10 +828,14 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HypervisorType> getAvailHypervisorInZone(long hostId, long zoneId) {
|
||||
public List<HypervisorType> getAvailHypervisorInZone(Long hostId, Long zoneId) {
|
||||
SearchCriteria<HostVO> sc = AvailHypevisorInZone.create();
|
||||
sc.setParameters("zoneId", zoneId);
|
||||
sc.setParameters("hostId", hostId);
|
||||
if ( zoneId != null ) {
|
||||
sc.setParameters("zoneId", zoneId);
|
||||
}
|
||||
if ( hostId != null ) {
|
||||
sc.setParameters("hostId", hostId);
|
||||
}
|
||||
sc.setParameters("type", Host.Type.Routing);
|
||||
List<HostVO> hosts = listBy(sc);
|
||||
List<HypervisorType> hypers = new ArrayList<HypervisorType>(4);
|
||||
|
||||
@ -1655,6 +1655,8 @@ public class ManagementServerImpl implements ManagementServer {
|
||||
private Set<Pair<Long, Long>> listTemplates(Long templateId, String name, String keyword, TemplateFilter templateFilter, boolean isIso, Boolean bootable, Long accountId, Long pageSize,
|
||||
Long startIndex, Long zoneId, HypervisorType hyperType, boolean isAccountSpecific, boolean showDomr, boolean onlyReady) {
|
||||
|
||||
|
||||
|
||||
Account caller = UserContext.current().getCaller();
|
||||
VMTemplateVO template = null;
|
||||
if (templateId != null) {
|
||||
@ -1680,11 +1682,14 @@ public class ManagementServerImpl implements ManagementServer {
|
||||
} else {
|
||||
domain = _domainDao.findById(DomainVO.ROOT_DOMAIN);
|
||||
}
|
||||
|
||||
List<HypervisorType> hypers = null;
|
||||
if( ! isIso ) {
|
||||
hypers = _hostDao.getAvailHypervisorInZone(null, null);
|
||||
}
|
||||
Set<Pair<Long, Long>> templateZonePairSet = new HashSet<Pair<Long, Long>>();
|
||||
|
||||
if (template == null) {
|
||||
templateZonePairSet = _templateDao.searchTemplates(name, keyword, templateFilter, isIso, bootable, account, domain, pageSize, startIndex, zoneId, hyperType, onlyReady, showDomr);
|
||||
templateZonePairSet = _templateDao.searchTemplates(name, keyword, templateFilter, isIso, hypers, bootable, account, domain, pageSize, startIndex, zoneId, hyperType, onlyReady, showDomr);
|
||||
} else {
|
||||
// if template is not public, perform permission check here
|
||||
if (!template.isPublicTemplate() && caller.getType() != Account.ACCOUNT_TYPE_ADMIN) {
|
||||
|
||||
@ -205,5 +205,5 @@ public interface StorageManager extends Manager {
|
||||
|
||||
StoragePoolVO findLocalStorageOnHost(long hostId);
|
||||
|
||||
VMTemplateHostVO getTemplateHostRef(long zoneId, long tmpltId);
|
||||
VMTemplateHostVO getTemplateHostRef(long zoneId, long tmpltId, boolean readyOnly);
|
||||
}
|
||||
|
||||
@ -981,7 +981,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag
|
||||
}
|
||||
|
||||
@Override
|
||||
public VMTemplateHostVO getTemplateHostRef(long zoneId, long tmpltId) {
|
||||
public VMTemplateHostVO getTemplateHostRef(long zoneId, long tmpltId, boolean readyOnly) {
|
||||
List<HostVO> hosts = _hostDao.listSecondaryStorageHosts(zoneId);
|
||||
if( hosts == null || hosts.size() == 0) {
|
||||
return null;
|
||||
|
||||
@ -59,7 +59,7 @@ public interface VMTemplateDao extends GenericDao<VMTemplateVO, Long> {
|
||||
public List<VMTemplateVO> findIsosByIdAndPath(Long domainId, Long accountId, String path);
|
||||
public List<VMTemplateVO> listReadyTemplates();
|
||||
public List<VMTemplateVO> listByAccountId(long accountId);
|
||||
public Set<Pair<Long, Long>> searchTemplates(String name, String keyword, TemplateFilter templateFilter, boolean isIso, Boolean bootable,
|
||||
public Set<Pair<Long, Long>> searchTemplates(String name, String keyword, TemplateFilter templateFilter, boolean isIso, List<HypervisorType> hypers, Boolean bootable,
|
||||
Account account, DomainVO domain, Long pageSize, Long startIndex, Long zoneId, HypervisorType hyperType, boolean onlyReady, boolean showDomr);
|
||||
|
||||
public long addTemplateToZone(VMTemplateVO tmplt, long zoneId);
|
||||
|
||||
@ -305,7 +305,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Pair<Long, Long>> searchTemplates(String name, String keyword, TemplateFilter templateFilter, boolean isIso, Boolean bootable, Account account, DomainVO domain, Long pageSize, Long startIndex, Long zoneId, HypervisorType hyperType, boolean onlyReady,boolean showDomr) {
|
||||
public Set<Pair<Long, Long>> searchTemplates(String name, String keyword, TemplateFilter templateFilter, boolean isIso, List<HypervisorType> hypers, Boolean bootable, Account account, DomainVO domain, Long pageSize, Long startIndex, Long zoneId, HypervisorType hyperType, boolean onlyReady,boolean showDomr) {
|
||||
Transaction txn = Transaction.currentTxn();
|
||||
txn.start();
|
||||
|
||||
@ -332,10 +332,25 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
|
||||
if ((templateFilter == TemplateFilter.featured) || (templateFilter == TemplateFilter.community)) {
|
||||
dataCenterJoin = " INNER JOIN data_center dc on (h.data_center_id = dc.id)";
|
||||
}
|
||||
|
||||
|
||||
sql += guestOSJoin + templateHostRefJoin + dataCenterJoin;
|
||||
String whereClause = "";
|
||||
|
||||
if ( !isIso ) {
|
||||
if ( hypers.isEmpty() ) {
|
||||
return templateZonePairList;
|
||||
} else {
|
||||
StringBuilder relatedHypers = new StringBuilder();
|
||||
for (HypervisorType hyper : hypers ) {
|
||||
relatedHypers.append("'");
|
||||
relatedHypers.append(hyper.toString());
|
||||
relatedHypers.append("'");
|
||||
relatedHypers.append(",");
|
||||
}
|
||||
relatedHypers.setLength(relatedHypers.length()-1);
|
||||
whereClause += " AND t.hypervisor_type IN (" + relatedHypers + ")";
|
||||
}
|
||||
}
|
||||
if (account != null) {
|
||||
accountType = account.getType();
|
||||
accountId = Long.toString(account.getId());
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user