mirror of https://github.com/apache/cloudstack.git
Populate system vm template to template_store_ref in adding an image
store.
This commit is contained in:
parent
881165e5d3
commit
3c6b7c2a01
|
|
@ -50,4 +50,5 @@ public interface TemplateService {
|
|||
void handleSysTemplateDownload(HypervisorType hostHyper, Long dcId);
|
||||
void handleTemplateSync(DataStore store);
|
||||
void downloadBootstrapSysTemplate(DataStore store);
|
||||
void addSystemVMTemplatesToSecondary(DataStore store);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ public class ImageStoreVO implements ImageStore {
|
|||
private String providerName;
|
||||
|
||||
@Column(name = "data_center_id")
|
||||
private long dcId;
|
||||
private Long dcId;
|
||||
|
||||
@Column(name = "scope")
|
||||
@Enumerated(value = EnumType.STRING)
|
||||
|
|
@ -117,7 +117,7 @@ public class ImageStoreVO implements ImageStore {
|
|||
return this.protocol;
|
||||
}
|
||||
|
||||
public void setDataCenterId(long dcId) {
|
||||
public void setDataCenterId(Long dcId) {
|
||||
this.dcId = dcId;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -190,6 +190,26 @@ public class TemplateDataStoreVO implements StateObject<ObjectInDataStoreStateMa
|
|||
this.jobId = jobId;
|
||||
this.installPath = installPath;
|
||||
this.setDownloadUrl(downloadUrl);
|
||||
switch (downloadState) {
|
||||
case DOWNLOADED:
|
||||
this.state = ObjectInDataStoreStateMachine.State.Ready;
|
||||
break;
|
||||
case CREATING:
|
||||
case DOWNLOAD_IN_PROGRESS:
|
||||
case UPLOAD_IN_PROGRESS:
|
||||
this.state = ObjectInDataStoreStateMachine.State.Creating2;
|
||||
break;
|
||||
case DOWNLOAD_ERROR:
|
||||
case UPLOAD_ERROR:
|
||||
this.state = ObjectInDataStoreStateMachine.State.Failed;
|
||||
break;
|
||||
case ABANDONED:
|
||||
this.state = ObjectInDataStoreStateMachine.State.Destroyed;
|
||||
break;
|
||||
default:
|
||||
this.state = ObjectInDataStoreStateMachine.State.Allocated;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public TemplateDataStoreVO() {
|
||||
|
|
|
|||
|
|
@ -18,8 +18,10 @@
|
|||
*/
|
||||
package org.apache.cloudstack.storage.image;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
|
@ -55,6 +57,7 @@ import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
|
|||
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
|
||||
import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao;
|
||||
import org.apache.cloudstack.storage.image.store.TemplateObject;
|
||||
import com.cloud.storage.template.TemplateConstants;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
|
@ -549,4 +552,19 @@ public class TemplateServiceImpl implements TemplateService {
|
|||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void addSystemVMTemplatesToSecondary(DataStore store){
|
||||
long storeId = store.getId();
|
||||
List<VMTemplateVO> rtngTmplts = _templateDao.listAllSystemVMTemplates();
|
||||
for ( VMTemplateVO tmplt : rtngTmplts ) {
|
||||
TemplateDataStoreVO tmpltStore = this._vmTemplateStoreDao.findByStoreTemplate(storeId, tmplt.getId());
|
||||
if ( tmpltStore == null ) {
|
||||
tmpltStore = new TemplateDataStoreVO(storeId, tmplt.getId(), new Date(), 100, Status.DOWNLOADED, null, null, null, TemplateConstants.DEFAULT_SYSTEM_VM_TEMPLATE_PATH + tmplt.getId() + File.separator, tmplt.getUrl());
|
||||
tmpltStore.setSize(0);
|
||||
tmpltStore.setPhysicalSize(0); // no size information for pre-seeded system vm templates
|
||||
_vmTemplateStoreDao.persist(tmpltStore);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ public class ImageStoreHelper {
|
|||
store.setProtocol((String)params.get("protocol"));
|
||||
store.setProviderName((String)params.get("providerName"));
|
||||
store.setScope((ScopeType)params.get("scope"));
|
||||
store.setDataCenterId((Long)params.get("zoneId"));
|
||||
store.setUuid((String)params.get("uuid"));
|
||||
store.setUrl((String)params.get("url"));
|
||||
store.setRole((DataStoreRole)params.get("role"));
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@ import javax.ejb.Local;
|
|||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.agent.AgentManager;
|
||||
|
|
@ -97,6 +99,7 @@ import com.google.gson.Gson;
|
|||
import com.vmware.vim25.AboutInfo;
|
||||
import com.vmware.vim25.HostConnectSpec;
|
||||
import com.vmware.vim25.ManagedObjectReference;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;;
|
||||
|
||||
|
||||
@Local(value = {VmwareManager.class})
|
||||
|
|
@ -120,6 +123,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
|||
@Inject CommandExecLogDao _cmdExecLogDao;
|
||||
@Inject ClusterManager _clusterMgr;
|
||||
@Inject SecondaryStorageVmManager _ssvmMgr;
|
||||
@Inject DataStoreManager _dataStoreMgr;
|
||||
@Inject CiscoNexusVSMDeviceDao _nexusDao;
|
||||
@Inject ClusterVSMMapDao _vsmMapDao;
|
||||
@Inject ConfigurationDao _configDao;
|
||||
|
|
@ -426,9 +430,9 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
|||
@Override
|
||||
public String getSecondaryStorageStoreUrl(long dcId) {
|
||||
|
||||
List<HostVO> secStorageHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId);
|
||||
if(secStorageHosts.size() > 0)
|
||||
return secStorageHosts.get(0).getStorageUrl();
|
||||
DataStore secStore = this._dataStoreMgr.getImageStore(dcId);
|
||||
if(secStore != null)
|
||||
return secStore.getUri();
|
||||
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2665,7 +2665,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
|
|||
}
|
||||
|
||||
if (onlyReady){
|
||||
sc.addAnd("downlaadState", SearchCriteria.Op.EQ, Status.DOWNLOADED);
|
||||
sc.addAnd("downloadState", SearchCriteria.Op.EQ, Status.DOWNLOADED);
|
||||
sc.addAnd("destroyed", SearchCriteria.Op.EQ, false);
|
||||
}
|
||||
|
||||
|
|
@ -2675,7 +2675,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
|
|||
|
||||
if (!showDomr){
|
||||
// excluding system template
|
||||
sc.addAnd("type", SearchCriteria.Op.NEQ, Storage.TemplateType.SYSTEM);
|
||||
sc.addAnd("templateType", SearchCriteria.Op.NEQ, Storage.TemplateType.SYSTEM);
|
||||
}
|
||||
|
||||
// search unique templates and find details by Ids
|
||||
|
|
|
|||
|
|
@ -1521,18 +1521,22 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
|
|||
sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId);
|
||||
}
|
||||
|
||||
List<HostVO> hosts = new ArrayList<HostVO>();
|
||||
List<Long> hosts = new ArrayList<Long>();
|
||||
if (hostId != null) {
|
||||
hosts.add(ApiDBUtils.findHostById(hostId));
|
||||
hosts.add(hostId);
|
||||
} else {
|
||||
hosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(zoneId);
|
||||
}
|
||||
List<DataStore> stores = this._dataStoreMgr.getImageStoresByScope(new ZoneScope(zoneId));
|
||||
if (stores != null){
|
||||
for (DataStore store : stores){
|
||||
hosts.add(store.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CapacityVO capacity = new CapacityVO(hostId, zoneId, null, null, 0, 0,
|
||||
CapacityVO.CAPACITY_TYPE_SECONDARY_STORAGE);
|
||||
for (HostVO host : hosts) {
|
||||
StorageStats stats = ApiDBUtils.getSecondaryStorageStatistics(host
|
||||
.getId());
|
||||
for (Long id : hosts) {
|
||||
StorageStats stats = ApiDBUtils.getSecondaryStorageStatistics(id);
|
||||
if (stats == null) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -1916,6 +1920,9 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
|
|||
if (((ImageStoreProvider) storeProvider).needDownloadSysTemplate()) {
|
||||
// trigger system vm template download
|
||||
this._imageSrv.downloadBootstrapSysTemplate(store);
|
||||
} else {
|
||||
// populate template_store_ref table
|
||||
this._imageSrv.addSystemVMTemplatesToSecondary(store);
|
||||
}
|
||||
|
||||
return (ImageStore) _dataStoreMgr.getDataStore(store.getId(), DataStoreRole.Image);
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@ import javax.naming.ConfigurationException;
|
|||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.cloudstack.api.command.admin.storage.AddS3Cmd;
|
||||
import org.apache.cloudstack.api.command.admin.storage.ListS3sCmd;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
|
@ -116,8 +118,9 @@ public class S3ManagerImpl extends ManagerBase implements S3Manager {
|
|||
@Inject
|
||||
private HostDao hostDao;
|
||||
|
||||
|
||||
@Inject
|
||||
private SecondaryStorageVmManager secondaryStorageVMManager;
|
||||
private DataStoreManager dataStoreManager;
|
||||
|
||||
public S3ManagerImpl() {
|
||||
}
|
||||
|
|
@ -319,11 +322,10 @@ public class S3ManagerImpl extends ManagerBase implements S3Manager {
|
|||
return errorMessage;
|
||||
}
|
||||
|
||||
final HostVO secondaryStorageHost = secondaryStorageVMManager
|
||||
.findSecondaryStorageHost(dataCenterId);
|
||||
if (secondaryStorageHost == null) {
|
||||
final DataStore secondaryStore = this.dataStoreManager.getImageStore(dataCenterId);
|
||||
if (secondaryStore == null) {
|
||||
final String errorMessage = format(
|
||||
"Unable to find secondary storage host for zone id %1$s.",
|
||||
"Unable to find secondary storage for zone id %1$s.",
|
||||
dataCenterId);
|
||||
LOGGER.error(errorMessage);
|
||||
throw new CloudRuntimeException(errorMessage);
|
||||
|
|
@ -331,7 +333,7 @@ public class S3ManagerImpl extends ManagerBase implements S3Manager {
|
|||
|
||||
final long accountId = template.getAccountId();
|
||||
final DownloadTemplateFromS3ToSecondaryStorageCommand cmd = new DownloadTemplateFromS3ToSecondaryStorageCommand(
|
||||
s3, accountId, templateId, secondaryStorageHost.getName(),
|
||||
s3, accountId, templateId, secondaryStore.getName(),
|
||||
primaryStorageDownloadWait);
|
||||
|
||||
try {
|
||||
|
|
@ -358,7 +360,7 @@ public class S3ManagerImpl extends ManagerBase implements S3Manager {
|
|||
asList("template", "tmpl", accountId,
|
||||
templateId), File.separator);
|
||||
final VMTemplateHostVO tmpltHost = new VMTemplateHostVO(
|
||||
secondaryStorageHost.getId(), templateId,
|
||||
secondaryStore.getId(), templateId,
|
||||
now(), 100, Status.DOWNLOADED, null, null,
|
||||
null, installPath, template.getUrl());
|
||||
tmpltHost.setSize(templateS3VO.getSize());
|
||||
|
|
|
|||
|
|
@ -508,8 +508,8 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar
|
|||
}
|
||||
|
||||
protected Map<String, Object> createSecStorageVmInstance(long dataCenterId, SecondaryStorageVm.Role role) {
|
||||
HostVO secHost = findSecondaryStorageHost(dataCenterId);
|
||||
if (secHost == null) {
|
||||
DataStore secStore = this._dataStoreMgr.getImageStore(dataCenterId);
|
||||
if (secStore == null) {
|
||||
String msg = "No secondary storage available in zone " + dataCenterId + ", cannot create secondary storage vm";
|
||||
s_logger.warn(msg);
|
||||
throw new CloudRuntimeException(msg);
|
||||
|
|
@ -1019,8 +1019,8 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar
|
|||
Map<String, String> details = _vmDetailsDao.findDetails(vm.getId());
|
||||
vm.setDetails(details);
|
||||
|
||||
HostVO secHost = _ssvmMgr.findSecondaryStorageHost(dest.getDataCenter().getId());
|
||||
assert (secHost != null);
|
||||
DataStore secStore = this._dataStoreMgr.getImageStore(dest.getDataCenter().getId());
|
||||
assert (secStore != null);
|
||||
|
||||
StringBuilder buf = profile.getBootArgsBuilder();
|
||||
buf.append(" template=domP type=secstorage");
|
||||
|
|
@ -1265,9 +1265,9 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar
|
|||
List<SecondaryStorageVmVO> ssVms = _secStorageVmDao.getSecStorageVmListInStates(SecondaryStorageVm.Role.templateProcessor, dataCenterId, State.Running, State.Migrating,
|
||||
State.Starting, State.Stopped, State.Stopping );
|
||||
int vmSize = (ssVms == null)? 0 : ssVms.size();
|
||||
List<HostVO> ssHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dataCenterId);
|
||||
int hostSize = (ssHosts == null)? 0 : ssHosts.size();
|
||||
if ( hostSize > vmSize ) {
|
||||
List<DataStore> ssStores = this._dataStoreMgr.getImageStoresByScope(new ZoneScope(dataCenterId));
|
||||
int storeSize = (ssStores == null)? 0 : ssStores.size();
|
||||
if ( storeSize > vmSize ) {
|
||||
s_logger.info("No secondary storage vms found in datacenter id=" + dataCenterId + ", starting a new one");
|
||||
return new Pair<AfterScanAction, Object>(AfterScanAction.expand, SecondaryStorageVm.Role.templateProcessor);
|
||||
}
|
||||
|
|
@ -1356,19 +1356,6 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HostVO findSecondaryStorageHost(long dcId) {
|
||||
SearchCriteriaService<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class);
|
||||
sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.SecondaryStorage);
|
||||
sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dcId);
|
||||
List<HostVO> storageHosts = sc.list();
|
||||
if (storageHosts == null || storageHosts.size() < 1) {
|
||||
return null;
|
||||
} else {
|
||||
Collections.shuffle(storageHosts);
|
||||
return storageHosts.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HostVO> listSecondaryStorageHostsInAllZones() {
|
||||
|
|
@ -1377,29 +1364,7 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar
|
|||
return sc.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HostVO> listSecondaryStorageHostsInOneZone(long dataCenterId) {
|
||||
SearchCriteriaService<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class);
|
||||
sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dataCenterId);
|
||||
sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.SecondaryStorage);
|
||||
return sc.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HostVO> listLocalSecondaryStorageHostsInOneZone(long dataCenterId) {
|
||||
SearchCriteriaService<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class);
|
||||
sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dataCenterId);
|
||||
sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.LocalSecondaryStorage);
|
||||
return sc.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HostVO> listAllTypesSecondaryStorageHostsInOneZone(long dataCenterId) {
|
||||
SearchCriteriaService<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class);
|
||||
sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dataCenterId);
|
||||
sc.addAnd(sc.getEntity().getType(), Op.IN, Host.Type.LocalSecondaryStorage, Host.Type.SecondaryStorage);
|
||||
return sc.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HostVO> listUpAndConnectingSecondaryStorageVmHost(Long dcId) {
|
||||
|
|
|
|||
|
|
@ -18,8 +18,6 @@ package com.cloud.storage.secondary;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
import com.cloud.agent.api.StartupCommand;
|
||||
import com.cloud.host.HostVO;
|
||||
|
|
@ -47,12 +45,7 @@ public interface SecondaryStorageVmManager extends Manager {
|
|||
|
||||
public Pair<HostVO, SecondaryStorageVmVO> assignSecStorageVm(long zoneId, Command cmd);
|
||||
boolean generateSetupCommand(Long hostId);
|
||||
//boolean deleteHost(Long hostId);
|
||||
public HostVO findSecondaryStorageHost(long dcId);
|
||||
public List<HostVO> listSecondaryStorageHostsInAllZones();
|
||||
public List<HostVO> listSecondaryStorageHostsInOneZone(long dataCenterId);
|
||||
public List<HostVO> listLocalSecondaryStorageHostsInOneZone(long dataCenterId);
|
||||
public List<HostVO> listAllTypesSecondaryStorageHostsInOneZone(long dataCenterId);
|
||||
public List<HostVO> listUpAndConnectingSecondaryStorageVmHost(Long dcId);
|
||||
public HostVO pickSsvmHost(HostVO ssHost);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd;
|
|||
import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd;
|
||||
import org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd;
|
||||
import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
|
||||
|
|
@ -47,38 +46,24 @@ import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
|
|||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.storage.DeleteTemplateCommand;
|
||||
import com.cloud.alert.AlertManager;
|
||||
import com.cloud.configuration.Resource.ResourceType;
|
||||
import com.cloud.dc.DataCenterVO;
|
||||
import com.cloud.event.EventTypes;
|
||||
import com.cloud.event.UsageEventUtils;
|
||||
import com.cloud.exception.InvalidParameterValueException;
|
||||
import com.cloud.exception.ResourceAllocationException;
|
||||
import com.cloud.host.HostVO;
|
||||
import com.cloud.storage.ScopeType;
|
||||
import com.cloud.storage.Storage.ImageFormat;
|
||||
import com.cloud.storage.Storage.TemplateType;
|
||||
import com.cloud.storage.DataStoreRole;
|
||||
import com.cloud.storage.TemplateProfile;
|
||||
import com.cloud.storage.VMTemplateHostVO;
|
||||
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
|
||||
import com.cloud.storage.VMTemplateVO;
|
||||
import com.cloud.storage.VMTemplateZoneVO;
|
||||
import com.cloud.storage.download.DownloadMonitor;
|
||||
import com.cloud.storage.secondary.SecondaryStorageVmManager;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.utils.UriUtils;
|
||||
import com.cloud.utils.db.DB;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.vm.UserVmVO;
|
||||
|
||||
@Local(value=TemplateAdapter.class)
|
||||
public class HypervisorTemplateAdapter extends TemplateAdapterBase implements TemplateAdapter {
|
||||
private final static Logger s_logger = Logger.getLogger(HypervisorTemplateAdapter.class);
|
||||
@Inject DownloadMonitor _downloadMonitor;
|
||||
@Inject SecondaryStorageVmManager _ssvmMgr;
|
||||
@Inject AgentManager _agentMgr;
|
||||
|
||||
@Inject DataStoreManager storeMgr;
|
||||
|
|
@ -196,10 +181,10 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase implements Te
|
|||
.createTemplateAsync(tmpl, imageStore, caller);
|
||||
}
|
||||
_resourceLimitMgr.incrementResourceCount(profile.getAccountId(), ResourceType.template);
|
||||
|
||||
|
||||
return template;
|
||||
}
|
||||
|
||||
|
||||
private class CreateTemplateContext<T> extends AsyncRpcConext<T> {
|
||||
final TemplateInfo template;
|
||||
public CreateTemplateContext(AsyncCompletionCallback<T> callback, TemplateInfo template) {
|
||||
|
|
@ -207,15 +192,15 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase implements Te
|
|||
this.template = template;
|
||||
}
|
||||
}
|
||||
|
||||
protected Void createTemplateAsyncCallBack(AsyncCallbackDispatcher<HypervisorTemplateAdapter,
|
||||
|
||||
protected Void createTemplateAsyncCallBack(AsyncCallbackDispatcher<HypervisorTemplateAdapter,
|
||||
TemplateApiResult> callback, CreateTemplateContext<TemplateApiResult> context) {
|
||||
TemplateInfo template = context.template;
|
||||
VMTemplateVO tmplt = this._tmpltDao.findById(template.getId());
|
||||
long accountId = tmplt.getAccountId();
|
||||
_resourceLimitMgr.incrementResourceCount(accountId, ResourceType.secondary_storage,
|
||||
template.getSize());
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -280,7 +265,8 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase implements Te
|
|||
|
||||
}
|
||||
|
||||
public TemplateProfile prepareDelete(DeleteTemplateCmd cmd) {
|
||||
@Override
|
||||
public TemplateProfile prepareDelete(DeleteTemplateCmd cmd) {
|
||||
TemplateProfile profile = super.prepareDelete(cmd);
|
||||
VMTemplateVO template = (VMTemplateVO)profile.getTemplate();
|
||||
Long zoneId = profile.getZoneId();
|
||||
|
|
@ -289,19 +275,20 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase implements Te
|
|||
throw new InvalidParameterValueException("The DomR template cannot be deleted.");
|
||||
}
|
||||
|
||||
if (zoneId != null && (_ssvmMgr.findSecondaryStorageHost(zoneId) == null)) {
|
||||
throw new InvalidParameterValueException("Failed to find a secondary storage host in the specified zone.");
|
||||
if (zoneId != null && (this.storeMgr.getImageStore(zoneId) == null)) {
|
||||
throw new InvalidParameterValueException("Failed to find a secondary storage in the specified zone.");
|
||||
}
|
||||
|
||||
return profile;
|
||||
}
|
||||
|
||||
public TemplateProfile prepareDelete(DeleteIsoCmd cmd) {
|
||||
@Override
|
||||
public TemplateProfile prepareDelete(DeleteIsoCmd cmd) {
|
||||
TemplateProfile profile = super.prepareDelete(cmd);
|
||||
Long zoneId = profile.getZoneId();
|
||||
|
||||
if (zoneId != null && (_ssvmMgr.findSecondaryStorageHost(zoneId) == null)) {
|
||||
throw new InvalidParameterValueException("Failed to find a secondary storage host in the specified zone.");
|
||||
if (zoneId != null && (this.storeMgr.getImageStore(zoneId) == null)) {
|
||||
throw new InvalidParameterValueException("Failed to find a secondary storage in the specified zone.");
|
||||
}
|
||||
|
||||
return profile;
|
||||
|
|
|
|||
Loading…
Reference in New Issue