add secondary storage provider

This commit is contained in:
Edison Su 2012-09-02 19:26:20 -07:00
parent 7d92c1dc27
commit 73cc474157
31 changed files with 1010 additions and 372 deletions

View File

@ -21,6 +21,7 @@ package org.apache.cloudstack.platform.subsystem.api.storage;
import com.cloud.agent.api.to.StorageFilerTO;
import com.cloud.storage.Snapshot;
import com.cloud.storage.Storage.StoragePoolType;
import com.cloud.storage.TemplateProfile;
import com.cloud.storage.Volume;
import com.cloud.template.VirtualMachineTemplate;
@ -35,6 +36,7 @@ public interface DataStore {
public enum StoreType {
Primary,
Image,
Backup;
}
public class StoreScope {
@ -55,6 +57,7 @@ public interface DataStore {
boolean isSharedStorage();
Long getId();
DataStoreDriver getDataStoreDriver();
StorageProvider getProvider();
DataStoreEndPointSelector getEndPointSelector();
FileSystem getFileSystem();
VolumeStrategy getVolumeStrategy();
@ -65,7 +68,7 @@ public interface DataStore {
VolumeProfile prepareVolume(Volume volume, DataStore destStore);
SnapshotProfile prepareSnapshot(Snapshot snapshot, DataStore destStore);
TemplateProfile prepareTemplate(VirtualMachineTemplate template, DataStore destStore);
TemplateProfile prepareTemplate(long templateId, DataStore destStore);
boolean contains(Volume volume);
boolean contains(Snapshot snapshot);
boolean contains(TemplateProfile template);

View File

@ -20,11 +20,13 @@ package org.apache.cloudstack.platform.subsystem.api.storage;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
import com.cloud.storage.TemplateProfile;
import com.cloud.vm.DiskProfile;
public interface DataStoreDriver {
String getDriverType();
TemplateProfile install(TemplateProfile tp, DataStoreEndPoint ep);
TemplateProfile register(TemplateProfile tp, DataStoreEndPoint ep);
DiskProfile createVolumeFromTemplate(DiskProfile volProfile, TemplateProfile tp, DataStoreEndPoint ep);
DataObject create(DataObject obj);
DataObject copy(DataObject src, DataStore dest);

View File

@ -20,5 +20,6 @@ package org.apache.cloudstack.platform.subsystem.api.storage;
public enum StorageEvent {
DownloadTemplateToPrimary,
RegisterTemplate,
CreateVolumeFromTemplate;
}

View File

@ -12,7 +12,7 @@ import com.cloud.utils.component.Adapter;
public interface StorageProvider extends Adapter {
List<HypervisorType> supportedHypervisors();
String getProviderName();
StoreType supportedStoreType();
List<StoreType> supportedStoreTypes();
void configure(Map<String, String> storeProviderInfo);
DataStore addDataStore(StoragePool sp, String uri, Map<String, String> params);
DataStore getDataStore(StoragePool pool);

View File

@ -1,72 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.platform.subsystem.api.storage;
import com.cloud.storage.Storage;
public class TemplateProfile {
private String _uri;
private String _imageStorageUri;
private String _localPath;
private long _id;
private long _templatePoolRefId;
public String getURI() {
return _uri;
}
public long getId() {
return _id;
}
public String getLocalPath() {
return _localPath;
}
public void setLocalPath(String path) {
_localPath = path;
}
public void setTemplatePoolRefId(long id) {
this._templatePoolRefId = id;
}
public long getTemplatePoolRefId() {
return this._templatePoolRefId;
}
public String getImageStorageUri() {
return _imageStorageUri;
}
public String getUniqueName() {
return null;
}
public Storage.ImageFormat getFormat() {
return null;
}
public String getInstallPath() {
return null;
}
public long getTemplateSize() {
return 0;
}
}

View File

@ -1,7 +1,14 @@
package org.apache.cloudstack.platform.subsystem.api.storage;
import com.cloud.agent.api.storage.DownloadCommand.Proxy;
import com.cloud.storage.TemplateProfile;
public interface TemplateStrategy {
TemplateProfile install(TemplateProfile tp);
TemplateProfile get(long templateId);
TemplateProfile register(TemplateProfile tp);
boolean canRegister(long templateId);
int getDownloadWait();
long getMaxTemplateSizeInBytes();
Proxy getHttpProxy();
}

View File

@ -28,8 +28,8 @@ import org.apache.cloudstack.platform.subsystem.api.storage.TemplateProfile;
import org.apache.cloudstack.platform.subsystem.api.storage.VolumeProfile;
import org.apache.cloudstack.platform.subsystem.api.storage.VolumeStrategy;
import org.apache.cloudstack.storage.db.VolumeHostVO;
import org.apache.cloudstack.storage.image.ImageManager;
import org.apache.cloudstack.storage.manager.BackupStorageManager;
import org.apache.cloudstack.storage.manager.TemplateManager;
import org.apache.cloudstack.storage.manager.SecondaryStorageManager;
import org.apache.cloudstack.storage.volume.VolumeManager;
import org.apache.log4j.Logger;
@ -76,7 +76,7 @@ public class StorageOrchestratorImpl implements StorageOrchestrator {
@Inject
SecondaryStorageManager _secondaryStorageMgr;
@Inject
TemplateManager _templateMgr;
ImageManager _templateMgr;
@Inject
VMTemplateDao _templateDao;
@ -169,9 +169,8 @@ public class StorageOrchestratorImpl implements StorageOrchestrator {
volume = _volumeMgr.processEvent(volume, Volume.Event.CreateRequested);
if (volume.getTemplateId() != null) {
VirtualMachineTemplate template = _templateDao.findById(volume.getTemplateId());
DataStore ds = _secondaryStorageMgr.getImageStore(destStore);
TemplateProfile tp = ds.prepareTemplate(template, destStore);
TemplateProfile tp = ds.prepareTemplate(volume.getTemplateId(), destStore);
if (!destStore.contains(tp)) {
tp = _templateMgr.AssociateTemplateStoragePool(tp, destStore);
tp = destStore.getTemplateStrategy().install(tp);

View File

@ -0,0 +1,55 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.storage.datastoreconfigurator;
import java.util.Map;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore.StoreType;
import org.apache.cloudstack.storage.datastore.DefaultDataStore;
import org.apache.cloudstack.storage.driver.DefaultNfsSecondaryDriver;
import org.apache.cloudstack.storage.epselector.DefaultNfsSecondaryEndPointSelector;
import org.apache.cloudstack.storage.lifecycle.DefaultNfsSecondaryLifeCycle;
import org.apache.cloudstack.storage.strategy.DefaultTemplateStratey;
import com.cloud.storage.StoragePool;
public class NfsSecondaryStorageConfigurator extends NfsDataStoreConfigurator {
@Override
public DataStore getDataStore(StoragePool pool) {
DefaultDataStore ds = new DefaultDataStore();
ds.setEndPointSelector(new DefaultNfsSecondaryEndPointSelector(ds));
ds.setId(pool.getId());
ds.setType(StoreType.Image);
ds.setURI(pool.getHostAddress() + "/" + pool.getPath());
ds.setUUID(pool.getUuid());
ds.setDataStoreDriver(new DefaultNfsSecondaryDriver(ds));
ds.setTemplateStrategy(new DefaultTemplateStratey(ds));
ds.setLifeCycle(new DefaultNfsSecondaryLifeCycle(ds));
return ds;
}
public StoragePool getStoragePool(Map<String, String> configs) {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -23,14 +23,17 @@ import org.apache.cloudstack.platform.subsystem.api.storage.DataStoreDriver;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStoreEndPoint;
import org.apache.cloudstack.platform.subsystem.api.storage.VolumeProfile;
import org.apache.cloudstack.platform.subsystem.api.storage.TemplateProfile;
import org.apache.cloudstack.platform.subsystem.api.storage.TemplateStrategy;
import com.cloud.agent.api.storage.DownloadProgressCommand;
import com.cloud.agent.api.storage.DownloadProgressCommand.RequestType;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.storage.CreateAnswer;
import com.cloud.agent.api.storage.CreateCommand;
import com.cloud.agent.api.storage.DownloadCommand;
import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer;
import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
import com.cloud.agent.api.to.VolumeTO;
import com.cloud.storage.TemplateProfile;
import com.cloud.vm.DiskProfile;
@ -45,18 +48,29 @@ public abstract class AbstractStorageDriver implements DataStoreDriver {
}
public TemplateProfile install(TemplateProfile tp, DataStoreEndPoint ep) {
PrimaryStorageDownloadCommand dcmd = new PrimaryStorageDownloadCommand(tp.getUniqueName(), tp.getURI(), tp.getFormat(),
PrimaryStorageDownloadCommand dcmd = new PrimaryStorageDownloadCommand(tp.getName(), tp.getUrl(), tp.getFormat(),
0, _ds.getId(), _ds.getUUID(), _ts.getDownloadWait());
dcmd.setSecondaryStorageUrl(tp.getImageStorageUri());
dcmd.setPrimaryStorageUrl(_ds.getURI());
Answer asw = ep.sendCommand(dcmd);
PrimaryStorageDownloadAnswer asw = (PrimaryStorageDownloadAnswer)ep.sendCommand(dcmd);
TemplateProfile tpn = new TemplateProfile();
tpn.setLocalPath("/mnt/test");
tpn.setTemplatePoolRefId(tp.getTemplatePoolRefId());
return tpn;
tp.setLocalPath(asw.getInstallPath());
return tp;
}
public TemplateProfile register(TemplateProfile tp, DataStoreEndPoint ep, boolean freshDownload) {
DownloadCommand dcmd =
new DownloadCommand(_ds.getURI(), tp.getTemplate(), _ts.getMaxTemplateSizeInBytes());
dcmd.setProxy(_ts.getHttpProxy());
if (!freshDownload) {
dcmd = new DownloadProgressCommand(dcmd, tp.getJobId(), RequestType.GET_OR_RESTART);
}
ep.sendCommand(dcmd);
return tp;
}
public DiskProfile createVolumeFromTemplate(DiskProfile volProfile, TemplateProfile tp, DataStoreEndPoint ep) {
CreateCommand cmd = new CreateCommand(volProfile, tp.getLocalPath(), _ds.getTO());
CreateAnswer ans = (CreateAnswer)ep.sendCommand(cmd);

View File

@ -0,0 +1,79 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.storage.driver;
import org.apache.cloudstack.platform.subsystem.api.storage.DataObject;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStoreEndPoint;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
import com.cloud.storage.TemplateProfile;
public class DefaultNfsSecondaryDriver extends AbstractStorageDriver {
/**
* @param ds
*/
public DefaultNfsSecondaryDriver(DataStore ds) {
super(ds);
// TODO Auto-generated constructor stub
}
public String getDriverType() {
// TODO Auto-generated method stub
return null;
}
public TemplateProfile register(TemplateProfile tp, DataStoreEndPoint ep) {
// TODO Auto-generated method stub
return null;
}
public DataObject create(DataObject obj) {
// TODO Auto-generated method stub
return null;
}
public DataObject copy(DataObject src, DataStore dest) {
// TODO Auto-generated method stub
return null;
}
public DataObject copy(DataObject src, DataObject dest) {
// TODO Auto-generated method stub
return null;
}
public DataObject move(DataObject src, DataObject dest) {
// TODO Auto-generated method stub
return null;
}
public Answer sendMessage(DataStoreEndPoint dsep, Command cmd) {
// TODO Auto-generated method stub
return null;
}
public boolean delete(DataObject obj) {
// TODO Auto-generated method stub
return false;
}
}

View File

@ -0,0 +1,38 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.storage.epselector;
import java.util.List;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStoreEndPoint;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStoreEndPointSelector;
import org.apache.cloudstack.platform.subsystem.api.storage.StorageEvent;
public class DefaultNfsSecondaryEndPointSelector implements DataStoreEndPointSelector {
protected DataStore _ds;
public DefaultNfsSecondaryEndPointSelector(DataStore ds) {
_ds = ds;
}
public List<DataStoreEndPoint> getEndPoints(StorageEvent event) {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -16,18 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.storage.manager;
package org.apache.cloudstack.storage.image;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
import org.apache.cloudstack.platform.subsystem.api.storage.SnapshotProfile;
import org.apache.cloudstack.platform.subsystem.api.storage.TemplateProfile;
import org.apache.cloudstack.platform.subsystem.api.storage.VolumeProfile;
import com.cloud.storage.Snapshot;
import com.cloud.storage.Volume;
import com.cloud.template.VirtualMachineTemplate;
public interface TemplateManager {
import com.cloud.api.commands.RegisterTemplateCmd;
import com.cloud.storage.TemplateProfile;
public interface ImageManager {
TemplateProfile AssociateTemplateStoragePool(TemplateProfile tp, DataStore ds);
TemplateProfile getProfile(long templateId);
com.cloud.storage.TemplateProfile allocateTemplateInDB(RegisterTemplateCmd cmd);
}

View File

@ -16,12 +16,19 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.storage.manager;
package org.apache.cloudstack.storage.image;
import java.util.List;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
import org.apache.cloudstack.platform.subsystem.api.storage.TemplateProfile;
import org.apache.log4j.Logger;
import com.cloud.api.commands.RegisterTemplateCmd;
import com.cloud.dc.DataCenterVO;
import com.cloud.dc.dao.DataCenterDao;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.Storage.TemplateType;
import com.cloud.storage.TemplateProfile;
import com.cloud.storage.VMTemplateHostVO;
import com.cloud.storage.VMTemplateStoragePoolVO;
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
@ -29,15 +36,18 @@ import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.dao.VMTemplateDao;
import com.cloud.storage.dao.VMTemplatePoolDao;
import com.cloud.template.VirtualMachineTemplate;
import com.cloud.utils.EnumUtils;
import com.cloud.utils.component.Inject;
import com.cloud.utils.exception.CloudRuntimeException;
public class TemplateManagerImpl implements TemplateManager {
private static final Logger s_logger = Logger.getLogger(TemplateManagerImpl.class);
public class ImageManagerImpl implements ImageManager {
private static final Logger s_logger = Logger.getLogger(ImageManagerImpl.class);
@Inject
VMTemplateDao _templateDao;
@Inject
VMTemplatePoolDao _templatePoolDao;
@Inject
DataCenterDao _dcDao;
public boolean contains(VirtualMachineTemplate template, DataStore ds) {
long templateId = template.getId();
@ -48,7 +58,7 @@ public class TemplateManagerImpl implements TemplateManager {
}
public TemplateProfile AssociateTemplateStoragePool(TemplateProfile tp, DataStore ds) {
long templateId = tp.getId();
long templateId = tp.getTemplateId();
long poolId = ds.getId();
VMTemplateStoragePoolVO templateStoragePoolRef = null;
long templateStoragePoolRefId;
@ -88,4 +98,70 @@ public class TemplateManagerImpl implements TemplateManager {
tp.setTemplatePoolRefId(templateStoragePoolRefId);
return tp;
}
public TemplateProfile getProfile(long templateId) {
// TODO Auto-generated method stub
return null;
}
protected TemplateProfile persistTemplate(TemplateProfile profile) {
Long zoneId = profile.getZoneId();
VMTemplateVO template = new VMTemplateVO(profile.getTemplateId(), profile.getName(), profile.getFormat(), profile.getIsPublic(),
profile.getFeatured(), profile.getIsExtractable(), TemplateType.USER, profile.getUrl(), profile.getRequiresHVM(),
profile.getBits(), profile.getAccountId(), profile.getCheckSum(), profile.getDisplayText(),
profile.getPasswordEnabled(), profile.getGuestOsId(), profile.getBootable(), profile.getHypervisorType(), profile.getTemplateTag(),
profile.getDetails(), profile.getSshKeyEnabled());
if (zoneId == null || zoneId.longValue() == -1) {
List<DataCenterVO> dcs = _dcDao.listAll();
if (dcs.isEmpty()) {
throw new CloudRuntimeException("No zones are present in the system, can't add template");
}
template.setCrossZones(true);
for (DataCenterVO dc: dcs) {
_templateDao.addTemplateToZone(template, dc.getId());
}
} else {
_templateDao.addTemplateToZone(template, zoneId);
}
return getProfile(template.getId());
}
protected boolean parameterCheck(RegisterTemplateCmd cmd) {
Long zoneId = cmd.getZoneId();
if (zoneId == -1) {
zoneId = null;
}
ImageFormat imgfmt = ImageFormat.valueOf(cmd.getFormat().toUpperCase());
if (imgfmt == null) {
throw new IllegalArgumentException("Image format is incorrect " + cmd.getFormat() + ". Supported formats are " + EnumUtils.listValues(ImageFormat.values()));
}
// If a zoneId is specified, make sure it is valid
if (zoneId != null) {
DataCenterVO zone = _dcDao.findById(zoneId);
if (zone == null) {
throw new IllegalArgumentException("Please specify a valid zone.");
}
}
List<VMTemplateVO> systemvmTmplts = _templateDao.listAllSystemVMTemplates();
for (VMTemplateVO template : systemvmTmplts) {
if (template.getName().equalsIgnoreCase(cmd.getTemplateName()) || template.getDisplayText().equalsIgnoreCase(cmd.getDisplayText())) {
throw new IllegalArgumentException("Cannot use reserved names for templates");
}
}
return true;
}
public TemplateProfile allocateTemplateInDB(RegisterTemplateCmd cmd) {
parameterCheck(cmd);
TemplateProfile tp = new TemplateProfile(cmd);
return persistTemplate(tp);
}
}

View File

@ -0,0 +1,26 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.storage.image;
public interface ImageOrchestrator {
void registerTemplate(long templateId);
void registerSnapshot(long snapshotId);
void registerVolume(long volumeId);
void registerIso(long isoId);
}

View File

@ -0,0 +1,78 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.storage.image;
import java.util.List;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
import org.apache.cloudstack.platform.subsystem.api.storage.SnapshotProfile;
import org.apache.cloudstack.platform.subsystem.api.storage.TemplateStrategy;
import org.apache.cloudstack.platform.subsystem.api.storage.VolumeProfile;
import org.apache.cloudstack.storage.manager.SecondaryStorageManager;
import com.cloud.storage.TemplateProfile;
import com.cloud.storage.VMTemplateZoneVO;
import com.cloud.storage.dao.VMTemplateZoneDao;
import com.cloud.utils.component.Inject;
public class ImageOrchestratorImpl implements ImageOrchestrator {
@Inject
SecondaryStorageManager _secStorageMgr;
@Inject
VMTemplateZoneDao _templateZoneDao;
public void registerTemplate(long templateId) {
List<VMTemplateZoneVO> tpZones = _templateZoneDao.listByTemplateId(templateId);
for (VMTemplateZoneVO tpZone : tpZones) {
DataStore imageStore = null;
List<DataStore> imageStores = _secStorageMgr.getImageStores(tpZone.getZoneId());
for (DataStore imgStore : imageStores) {
TemplateStrategy ts = imgStore.getTemplateStrategy();
if (ts.canRegister(templateId)) {
imageStore = imgStore;
break;
}
}
if (imageStore == null) {
continue;
}
TemplateStrategy ts = imageStore.getTemplateStrategy();
ts.register(ts.get(templateId));
}
}
public void registerSnapshot(long snapshotId) {
// TODO Auto-generated method stub
}
public void registerVolume(long volumeId) {
// TODO Auto-generated method stub
}
public void registerIso(long isoId) {
// TODO Auto-generated method stub
}
}

View File

@ -0,0 +1,54 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.storage.lifecycle;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStoreLifeCycle;
public class DefaultNfsSecondaryLifeCycle implements DataStoreLifeCycle {
protected DataStore _ds;
public DefaultNfsSecondaryLifeCycle(DataStore ds) {
_ds = ds;
}
public void add() {
// TODO Auto-generated method stub
}
public void delete() {
// TODO Auto-generated method stub
}
public void enable() {
// TODO Auto-generated method stub
}
public void disable() {
// TODO Auto-generated method stub
}
public void processEvent(DataStoreEvent event, Object... objs) {
// TODO Auto-generated method stub
}
}

View File

@ -18,6 +18,8 @@
*/
package org.apache.cloudstack.storage.manager;
import java.util.List;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
import com.cloud.storage.Snapshot;
@ -27,5 +29,6 @@ import com.cloud.template.VirtualMachineTemplate;
public interface SecondaryStorageManager {
DataStore getStore(Volume volume);
DataStore getImageStore(DataStore destStore);
List<DataStore> getImageStores(long zoneId);
DataStore getStore(Snapshot snapshot);
}

View File

@ -18,6 +18,34 @@
*/
package org.apache.cloudstack.storage.manager;
import java.util.List;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
import com.cloud.storage.Snapshot;
import com.cloud.storage.Volume;
import com.cloud.storage.dao.VMTemplateZoneDao;
import com.cloud.utils.component.Inject;
public class SecondaryStorageManagerImpl implements SecondaryStorageManager {
public DataStore getStore(Volume volume) {
// TODO Auto-generated method stub
return null;
}
public DataStore getImageStore(DataStore destStore) {
// TODO Auto-generated method stub
return null;
}
public List<DataStore> getImageStores() {
return null;
}
public DataStore getStore(Snapshot snapshot) {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -0,0 +1,131 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.storage.provider;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.naming.ConfigurationException;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStoreConfigurator;
import org.apache.cloudstack.platform.subsystem.api.storage.StorageProvider;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore.StoreType;
import org.apache.cloudstack.storage.datastoreconfigurator.NfsSecondaryStorageConfigurator;
import org.apache.cloudstack.storage.datastoreconfigurator.XenNfsDataStoreConfigurator;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.storage.StoragePool;
public class DefaultNfsSecondaryStorageProvider implements StorageProvider {
private String _name = DefaultPrimaryStorageProvider.class.toString();
protected Map<HypervisorType, Map<String, DataStoreConfigurator>> _supportedProtocols;
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
Map<String, DataStoreConfigurator> dscs = new HashMap<String, DataStoreConfigurator>();
DataStoreConfigurator nfsdc = new NfsSecondaryStorageConfigurator();
dscs.put(nfsdc.getProtocol(), nfsdc);
_supportedProtocols.put(HypervisorType.XenServer, dscs);
_supportedProtocols.put(HypervisorType.KVM, dscs);
_supportedProtocols.put(HypervisorType.VMware, dscs);
_supportedProtocols.put(HypervisorType.Ovm, dscs);
return true;
}
public String getName() {
// TODO Auto-generated method stub
return null;
}
public boolean start() {
// TODO Auto-generated method stub
return false;
}
public boolean stop() {
// TODO Auto-generated method stub
return false;
}
public List<HypervisorType> supportedHypervisors() {
List<HypervisorType> hypervisors = new ArrayList<HypervisorType>();
Set<HypervisorType> hyps = _supportedProtocols.keySet();
for (HypervisorType hy : hyps) {
hypervisors.add(hy);
}
return hypervisors;
}
public String getProviderName() {
// TODO Auto-generated method stub
return null;
}
public void configure(Map<String, String> storeProviderInfo) {
// TODO Auto-generated method stub
}
public DataStore addDataStore(StoragePool sp, String url, Map<String, String> params) {
URI uri;
try {
uri = new URI(url);
} catch (URISyntaxException e) {
throw new InvalidParameterValueException("invalide url" + url);
}
String protocol = uri.getScheme();
if (protocol == null) {
throw new InvalidParameterValueException("the protocol can't be null");
}
DataStoreConfigurator dscf = _supportedProtocols.get(HypervisorType.XenServer).get(protocol);
Map<String, String> configs = dscf.getConfigs(uri, params);
dscf.validate(configs);
DataStore ds = dscf.getDataStore(sp);
return ds;
}
public DataStore getDataStore(StoragePool pool) {
// TODO Auto-generated method stub
return null;
}
public Map<HypervisorType, Map<String, DataStoreConfigurator>> getDataStoreConfigs() {
// TODO Auto-generated method stub
return null;
}
public List<StoreType> supportedStoreTypes() {
List<StoreType> types = new ArrayList<StoreType>();
types.add(StoreType.Image);
types.add(StoreType.Backup);
return types;
}
}

View File

@ -1,4 +1,4 @@
package org.apache.cloudstack.storage;
package org.apache.cloudstack.storage.provider;
import java.net.URI;
import java.net.URISyntaxException;
@ -51,8 +51,10 @@ public class DefaultPrimaryStorageProvider implements StorageProvider {
_supportedProtocols.put(HypervisorType.XenServer, dscs);
}
public StoreType supportedStoreType() {
return StoreType.Primary;
public List<StoreType> supportedStoreType() {
List<StoreType> type = new ArrayList<StoreType>();
type.add(StoreType.Primary);
return type;
}
public void configure(Map<String, String> storeProviderInfo) {

View File

@ -0,0 +1,91 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.storage.provider;
import java.util.List;
import java.util.Map;
import javax.naming.ConfigurationException;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStoreConfigurator;
import org.apache.cloudstack.platform.subsystem.api.storage.StorageProvider;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore.StoreType;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.storage.StoragePool;
public class HttpImageStoreProvider implements StorageProvider {
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
// TODO Auto-generated method stub
return false;
}
public String getName() {
// TODO Auto-generated method stub
return null;
}
public boolean start() {
// TODO Auto-generated method stub
return false;
}
public boolean stop() {
// TODO Auto-generated method stub
return false;
}
public List<HypervisorType> supportedHypervisors() {
// TODO Auto-generated method stub
return null;
}
public String getProviderName() {
// TODO Auto-generated method stub
return null;
}
public List<StoreType> supportedStoreTypes() {
// TODO Auto-generated method stub
return null;
}
public void configure(Map<String, String> storeProviderInfo) {
// TODO Auto-generated method stub
}
public DataStore addDataStore(StoragePool sp, String uri, Map<String, String> params) {
// TODO Auto-generated method stub
return null;
}
public DataStore getDataStore(StoragePool pool) {
// TODO Auto-generated method stub
return null;
}
public Map<HypervisorType, Map<String, DataStoreConfigurator>> getDataStoreConfigs() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -0,0 +1,91 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.storage.provider;
import java.util.List;
import java.util.Map;
import javax.naming.ConfigurationException;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStoreConfigurator;
import org.apache.cloudstack.platform.subsystem.api.storage.StorageProvider;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore.StoreType;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.storage.StoragePool;
public class S3SecondaryStorageProvider implements StorageProvider {
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
// TODO Auto-generated method stub
return false;
}
public String getName() {
// TODO Auto-generated method stub
return null;
}
public boolean start() {
// TODO Auto-generated method stub
return false;
}
public boolean stop() {
// TODO Auto-generated method stub
return false;
}
public List<HypervisorType> supportedHypervisors() {
// TODO Auto-generated method stub
return null;
}
public String getProviderName() {
// TODO Auto-generated method stub
return null;
}
public List<StoreType> supportedStoreTypes() {
// TODO Auto-generated method stub
return null;
}
public void configure(Map<String, String> storeProviderInfo) {
// TODO Auto-generated method stub
}
public DataStore addDataStore(StoragePool sp, String uri, Map<String, String> params) {
// TODO Auto-generated method stub
return null;
}
public DataStore getDataStore(StoragePool pool) {
// TODO Auto-generated method stub
return null;
}
public Map<HypervisorType, Map<String, DataStoreConfigurator>> getDataStoreConfigs() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -0,0 +1,91 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.storage.provider;
import java.util.List;
import java.util.Map;
import javax.naming.ConfigurationException;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStoreConfigurator;
import org.apache.cloudstack.platform.subsystem.api.storage.StorageProvider;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore.StoreType;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.storage.StoragePool;
public class SwiftSecondaryStorageProvider implements StorageProvider {
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
// TODO Auto-generated method stub
return false;
}
public String getName() {
// TODO Auto-generated method stub
return null;
}
public boolean start() {
// TODO Auto-generated method stub
return false;
}
public boolean stop() {
// TODO Auto-generated method stub
return false;
}
public List<HypervisorType> supportedHypervisors() {
// TODO Auto-generated method stub
return null;
}
public String getProviderName() {
// TODO Auto-generated method stub
return null;
}
public List<StoreType> supportedStoreTypes() {
// TODO Auto-generated method stub
return null;
}
public void configure(Map<String, String> storeProviderInfo) {
// TODO Auto-generated method stub
}
public DataStore addDataStore(StoragePool sp, String uri, Map<String, String> params) {
// TODO Auto-generated method stub
return null;
}
public DataStore getDataStore(StoragePool pool) {
// TODO Auto-generated method stub
return null;
}
public Map<HypervisorType, Map<String, DataStoreConfigurator>> getDataStoreConfigs() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -19,6 +19,7 @@
package org.apache.cloudstack.storage.strategy;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
@ -26,13 +27,21 @@ import org.apache.cloudstack.platform.subsystem.api.storage.DataStoreDriver;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStoreEndPoint;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStoreEndPointSelector;
import org.apache.cloudstack.platform.subsystem.api.storage.StorageEvent;
import org.apache.cloudstack.platform.subsystem.api.storage.TemplateProfile;
import org.apache.cloudstack.platform.subsystem.api.storage.StorageProvider;
import org.apache.cloudstack.platform.subsystem.api.storage.TemplateStrategy;
import org.apache.cloudstack.storage.manager.TemplateManager;
import org.apache.cloudstack.storage.image.ImageManager;
import org.apache.log4j.Logger;
import com.cloud.agent.api.storage.DownloadCommand.Proxy;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.TemplateProfile;
import com.cloud.storage.VMTemplateHostVO;
import com.cloud.storage.VMTemplateStoragePoolVO;
import com.cloud.storage.VMTemplateStorageResourceAssoc;
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
import com.cloud.storage.dao.VMTemplateHostDao;
import com.cloud.storage.dao.VMTemplatePoolDao;
import com.cloud.utils.component.Inject;
import com.cloud.utils.exception.CloudRuntimeException;
@ -47,7 +56,13 @@ public class DefaultTemplateStratey implements TemplateStrategy {
@Inject
VMTemplatePoolDao _templatePoolDao;
@Inject
TemplateManager _templateMgr;
VMTemplateHostDao _templateImageStoreDao;
@Inject
ImageManager _templateMgr;
public DefaultTemplateStratey(DataStore ds) {
_ds = ds;
}
public TemplateProfile get(long templateId) {
return _templateMgr.getProfile(templateId);
@ -71,17 +86,17 @@ public class DefaultTemplateStratey implements TemplateStrategy {
tp = _driver.install(tp, ep);
templateStoragePoolRef.setDownloadPercent(100);
templateStoragePoolRef.setDownloadState(Status.DOWNLOADED);
templateStoragePoolRef.setLocalDownloadPath(tp.getInstallPath());
templateStoragePoolRef.setInstallPath(tp.getInstallPath());
templateStoragePoolRef.setTemplateSize(tp.getTemplateSize());
templateStoragePoolRef.setLocalDownloadPath(tp.getLocalPath());
templateStoragePoolRef.setInstallPath(tp.getLocalPath());
templateStoragePoolRef.setTemplateSize(tp.getSize());
_templatePoolDao.update(templateStoragePoolRef.getId(), templateStoragePoolRef);
if (s_logger.isDebugEnabled()) {
s_logger.debug("Template " + tp.getId() + " is installed via " + ep.getHostId());
s_logger.debug("Template " + tp.getTemplateId() + " is installed via " + ep.getHostId());
}
return get(tp.getId());
return get(tp.getTemplateId());
} catch (CloudRuntimeException e) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Template " + tp.getId() + " download to pool " + _ds.getId() + " failed due to " + e.toString());
s_logger.debug("Template " + tp.getTemplateId() + " download to pool " + _ds.getId() + " failed due to " + e.toString());
}
}
}
@ -90,9 +105,87 @@ public class DefaultTemplateStratey implements TemplateStrategy {
}
if (s_logger.isDebugEnabled()) {
s_logger.debug("Template " + tp.getId() + " is not found on and can not be downloaded to pool " + _ds.getId());
s_logger.debug("Template " + tp.getTemplateId() + " is not found on and can not be downloaded to pool " + _ds.getId());
}
return null;
}
public TemplateProfile register(TemplateProfile tp) {
VMTemplateHostVO vmTemplateHost = _templateImageStoreDao.findByHostTemplate(_ds.getId(), tp.getTemplateId());
if (vmTemplateHost == null) {
vmTemplateHost = new VMTemplateHostVO(_ds.getId(), tp.getTemplateId(), new Date(), 0, VMTemplateStorageResourceAssoc.Status.NOT_DOWNLOADED, null, null, "jobid0000", null, tp.getUrl());
_templateImageStoreDao.persist(vmTemplateHost);
}
DataStoreEndPointSelector dseps = _ds.getEndPointSelector();
List<DataStoreEndPoint> eps = dseps.getEndPoints(StorageEvent.RegisterTemplate);
Collections.shuffle(eps);
DataStoreEndPoint ep = eps.get(0);
_driver.register(tp, ep);
return null;
}
protected boolean checkHypervisor(HypervisorType hypervisor) {
StorageProvider sp = _ds.getProvider();
List<HypervisorType> spHys = sp.supportedHypervisors();
boolean checkHypervisor = false;
for (HypervisorType hy : spHys) {
if (hy == hypervisor) {
checkHypervisor = true;
}
}
return checkHypervisor;
}
protected boolean checkFormat(String url, String format) {
if ((!url.toLowerCase().endsWith("vhd")) && (!url.toLowerCase().endsWith("vhd.zip")) && (!url.toLowerCase().endsWith("vhd.bz2")) && (!url.toLowerCase().endsWith("vhd.gz"))
&& (!url.toLowerCase().endsWith("qcow2")) && (!url.toLowerCase().endsWith("qcow2.zip")) && (!url.toLowerCase().endsWith("qcow2.bz2")) && (!url.toLowerCase().endsWith("qcow2.gz"))
&& (!url.toLowerCase().endsWith("ova")) && (!url.toLowerCase().endsWith("ova.zip")) && (!url.toLowerCase().endsWith("ova.bz2")) && (!url.toLowerCase().endsWith("ova.gz"))
&& (!url.toLowerCase().endsWith("img")) && (!url.toLowerCase().endsWith("raw"))) {
throw new InvalidParameterValueException("Please specify a valid " + format.toLowerCase());
}
if ((format.equalsIgnoreCase("vhd") && (!url.toLowerCase().endsWith("vhd") && !url.toLowerCase().endsWith("vhd.zip") && !url.toLowerCase().endsWith("vhd.bz2") && !url.toLowerCase().endsWith(
"vhd.gz")))
|| (format.equalsIgnoreCase("qcow2") && (!url.toLowerCase().endsWith("qcow2") && !url.toLowerCase().endsWith("qcow2.zip") && !url.toLowerCase().endsWith("qcow2.bz2") && !url
.toLowerCase().endsWith("qcow2.gz")))
|| (format.equalsIgnoreCase("ova") && (!url.toLowerCase().endsWith("ova") && !url.toLowerCase().endsWith("ova.zip") && !url.toLowerCase().endsWith("ova.bz2") && !url.toLowerCase()
.endsWith("ova.gz"))) || (format.equalsIgnoreCase("raw") && (!url.toLowerCase().endsWith("img") && !url.toLowerCase().endsWith("raw")))) {
throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is an invalid for the format " + format.toLowerCase());
}
return true;
}
public boolean canRegister(long templateId) {
TemplateProfile tp = get(templateId);
if (!checkHypervisor(tp.getHypervisorType())) {
return false;
}
if (!checkFormat(tp.getUrl(), tp.getFormat().toString())) {
return false;
}
return true;
}
public int getDownloadWait() {
// TODO Auto-generated method stub
return 0;
}
public long getMaxTemplateSizeInBytes() {
// TODO Auto-generated method stub
return 0;
}
public Proxy getHttpProxy() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -37,11 +37,11 @@ import com.cloud.host.dao.HostDao;
import com.cloud.resource.ResourceManager;
import com.cloud.storage.VMTemplateHostVO;
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
import com.cloud.storage.TemplateProfile;
import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.VMTemplateZoneVO;
import com.cloud.template.TemplateAdapter;
import com.cloud.template.TemplateAdapterBase;
import com.cloud.template.TemplateProfile;
import com.cloud.user.Account;
import com.cloud.utils.component.Inject;
import com.cloud.utils.db.DB;
@ -131,7 +131,7 @@ public class BareMetalTemplateAdapter extends TemplateAdapterBase implements Tem
@Override @DB
public boolean delete(TemplateProfile profile) {
VMTemplateVO template = profile.getTemplate();
VMTemplateVO template = (VMTemplateVO)profile.getTemplate();
Long templateId = template.getId();
boolean success = true;
String zoneName;

View File

@ -66,11 +66,11 @@ import com.cloud.resource.ResourceManager;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.storage.Storage;
import com.cloud.storage.Storage.TemplateType;
import com.cloud.storage.TemplateProfile;
import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.Volume;
import com.cloud.template.TemplateAdapter;
import com.cloud.template.TemplateAdapter.TemplateAdapterType;
import com.cloud.template.TemplateProfile;
import com.cloud.user.Account;
import com.cloud.user.AccountVO;
import com.cloud.user.SSHKeyPair;

View File

@ -45,6 +45,7 @@ import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.Storage.TemplateType;
import com.cloud.storage.VMTemplateHostVO;
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
import com.cloud.storage.TemplateProfile;
import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.VMTemplateZoneVO;
import com.cloud.storage.download.DownloadMonitor;
@ -150,7 +151,7 @@ public class HyervisorTemplateAdapter extends TemplateAdapterBase implements Tem
public boolean delete(TemplateProfile profile) {
boolean success = true;
VMTemplateVO template = profile.getTemplate();
VMTemplateVO template = (VMTemplateVO)profile.getTemplate();
Long zoneId = profile.getZoneId();
Long templateId = template.getId();
@ -267,7 +268,7 @@ public class HyervisorTemplateAdapter extends TemplateAdapterBase implements Tem
public TemplateProfile prepareDelete(DeleteTemplateCmd cmd) {
TemplateProfile profile = super.prepareDelete(cmd);
VMTemplateVO template = profile.getTemplate();
VMTemplateVO template = (VMTemplateVO)profile.getTemplate();
Long zoneId = profile.getZoneId();
if (template.getTemplateType() == TemplateType.SYSTEM) {

View File

@ -24,6 +24,7 @@ import com.cloud.api.commands.RegisterIsoCmd;
import com.cloud.api.commands.RegisterTemplateCmd;
import com.cloud.exception.ResourceAllocationException;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.storage.TemplateProfile;
import com.cloud.storage.VMTemplateVO;
import com.cloud.user.Account;
import com.cloud.utils.component.Adapter;

View File

@ -42,6 +42,7 @@ import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.org.Grouping;
import com.cloud.storage.GuestOS;
import com.cloud.storage.TemplateProfile;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.Storage.TemplateType;
import com.cloud.storage.VMTemplateVO;

View File

@ -94,6 +94,7 @@ import com.cloud.storage.StoragePool;
import com.cloud.storage.StoragePoolHostVO;
import com.cloud.storage.StoragePoolStatus;
import com.cloud.storage.StoragePoolVO;
import com.cloud.storage.TemplateProfile;
import com.cloud.storage.Upload;
import com.cloud.storage.Upload.Type;
import com.cloud.storage.UploadVO;

View File

@ -1,255 +0,0 @@
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package com.cloud.template;
import java.util.Map;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.VMTemplateVO;
public class TemplateProfile {
Long userId;
String name;
String displayText;
Integer bits;
Boolean passwordEnabled;
Boolean sshKeyEnbaled;
Boolean requiresHvm;
String url;
Boolean isPublic;
Boolean featured;
Boolean isExtractable;
ImageFormat format;
Long guestOsId;
Long zoneId;
HypervisorType hypervisorType;
String accountName;
Long domainId;
Long accountId;
String chksum;
Boolean bootable;
Long templateId;
VMTemplateVO template;
String templateTag;
Map details;
public TemplateProfile(Long templateId, Long userId, String name, String displayText, Integer bits, Boolean passwordEnabled, Boolean requiresHvm,
String url, Boolean isPublic, Boolean featured, Boolean isExtractable, ImageFormat format, Long guestOsId, Long zoneId,
HypervisorType hypervisorType, String accountName, Long domainId, Long accountId, String chksum, Boolean bootable, Map details, Boolean sshKeyEnabled) {
this.templateId = templateId;
this.userId = userId;
this.name = name;
this.displayText = displayText;
this.bits = bits;
this.passwordEnabled = passwordEnabled;
this.requiresHvm = requiresHvm;
this.url = url;
this.isPublic = isPublic;
this.featured = featured;
this.isExtractable = isExtractable;
this.format = format;
this.guestOsId = guestOsId;
this.zoneId = zoneId;
this.hypervisorType = hypervisorType;
this.accountName = accountName;
this.domainId = domainId;
this.accountId = accountId;
this.chksum = chksum;
this.bootable = bootable;
this.details = details;
this.sshKeyEnbaled = sshKeyEnabled;
}
public TemplateProfile(Long userId, VMTemplateVO template, Long zoneId) {
this.userId = userId;
this.template = template;
this.zoneId = zoneId;
}
public TemplateProfile(Long templateId, Long userId, String name, String displayText, Integer bits, Boolean passwordEnabled, Boolean requiresHvm,
String url, Boolean isPublic, Boolean featured, Boolean isExtractable, ImageFormat format, Long guestOsId, Long zoneId,
HypervisorType hypervisorType, String accountName, Long domainId, Long accountId, String chksum, Boolean bootable, String templateTag, Map details, Boolean sshKeyEnabled) {
this(templateId, userId, name, displayText, bits, passwordEnabled, requiresHvm, url, isPublic, featured, isExtractable, format, guestOsId, zoneId,
hypervisorType, accountName, domainId, accountId, chksum, bootable, details, sshKeyEnabled);
this.templateTag = templateTag;
}
public Long getTemplateId() {
return templateId;
}
public void setTemplateId(Long id) {
this.templateId = id;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDisplayText() {
return displayText;
}
public void setDisplayText(String text) {
this.displayText = text;
}
public Integer getBits() {
return bits;
}
public void setBits(Integer bits) {
this.bits = bits;
}
public Boolean getPasswordEnabled() {
return passwordEnabled;
}
public void setPasswordEnabled(Boolean enabled) {
this.passwordEnabled = enabled;
}
public Boolean getRequiresHVM() {
return requiresHvm;
}
public void setRequiresHVM(Boolean hvm) {
this.requiresHvm = hvm;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Boolean getIsPublic() {
return isPublic;
}
public void setIsPublic(Boolean is) {
this.isPublic = is;
}
public Boolean getFeatured() {
return featured;
}
public void setFeatured(Boolean featured) {
this.featured = featured;
}
public Boolean getIsExtractable() {
return isExtractable;
}
public void setIsExtractable(Boolean is) {
this.isExtractable = is;
}
public ImageFormat getFormat() {
return format;
}
public void setFormat(ImageFormat format) {
this.format = format;
}
public Long getGuestOsId() {
return guestOsId;
}
public void setGuestOsId(Long id) {
this.guestOsId = id;
}
public Long getZoneId() {
return zoneId;
}
public void setZoneId(Long id) {
this.zoneId = id;
}
public HypervisorType getHypervisorType() {
return hypervisorType;
}
public void setHypervisorType(HypervisorType type) {
this.hypervisorType = type;
}
public Long getDomainId() {
return domainId;
}
public void setDomainId(Long id) {
this.domainId = id;
}
public Long getAccountId() {
return accountId;
}
public void setAccountId(Long id) {
this.accountId = id;
}
public String getCheckSum() {
return chksum;
}
public void setCheckSum(String chksum) {
this.chksum = chksum;
}
public Boolean getBootable() {
return this.bootable;
}
public void setBootable(Boolean bootable) {
this.bootable = bootable;
}
public VMTemplateVO getTemplate() {
return template;
}
public void setTemplate(VMTemplateVO template) {
this.template = template;
}
public String getTemplateTag() {
return templateTag;
}
public void setTemplateTag(String templateTag) {
this.templateTag = templateTag;
}
public Map getDetails() {
return this.details;
}
public void setDetails(Map details) {
this.details = details;
}
public void setSshKeyEnabled(Boolean enabled) {
this.sshKeyEnbaled = enabled;
}
public Boolean getSshKeyEnabled() {
return this.sshKeyEnbaled;
}
}