mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
1. limit xs-tools in xenserver related java file
2. don't populate xs-tools to template_host_ref 3. introduce a new template type PERHOST, which doesn't need to be populated to secondary storage
This commit is contained in:
parent
76b31ab7b8
commit
d3325de5ae
@ -81,7 +81,8 @@ public class Storage {
|
||||
|
||||
public static enum TemplateType {
|
||||
SYSTEM, /*routing, system vm template*/
|
||||
BUILTIN /*buildin template*/
|
||||
BUILTIN, /*buildin template*/
|
||||
PERHOST /* every host has this template, don't need to install it in secondary storage */
|
||||
}
|
||||
|
||||
public static enum StoragePoolType {
|
||||
|
||||
@ -3890,25 +3890,6 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR
|
||||
public Type getType() {
|
||||
return com.cloud.host.Host.Type.Routing;
|
||||
}
|
||||
|
||||
protected void getPVISO(StartupStorageCommand sscmd) {
|
||||
Connection conn = getConnection();
|
||||
try {
|
||||
Set<VDI> vids = VDI.getByNameLabel(conn, "xs-tools.iso");
|
||||
if (vids.isEmpty())
|
||||
return;
|
||||
VDI pvISO = vids.iterator().next();
|
||||
String uuid = pvISO.getUuid(conn);
|
||||
Map<String, TemplateInfo> pvISOtmlt = new HashMap<String, TemplateInfo>();
|
||||
TemplateInfo tmplt = new TemplateInfo("xs-tools.iso", uuid, pvISO.getVirtualSize(conn), pvISO.getVirtualSize(conn), true, false);
|
||||
pvISOtmlt.put("xs-tools", tmplt);
|
||||
sscmd.setTemplateInfo(pvISOtmlt);
|
||||
} catch (XenAPIException e) {
|
||||
s_logger.debug("Can't get xs-tools.iso: " + e.toString());
|
||||
} catch (XmlRpcException e) {
|
||||
s_logger.debug("Can't get xs-tools.iso: " + e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean can_bridge_firewall() {
|
||||
return false;
|
||||
@ -4158,8 +4139,6 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR
|
||||
|
||||
StartupStorageCommand sscmd = initializeLocalSR();
|
||||
if (sscmd != null) {
|
||||
/* report pv driver iso */
|
||||
getPVISO(sscmd);
|
||||
return new StartupCommand[] { cmd, sscmd };
|
||||
}
|
||||
|
||||
|
||||
@ -64,7 +64,7 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc {
|
||||
@Column (name="size")
|
||||
private long size;
|
||||
|
||||
@Column (name="physicalSize")
|
||||
@Column (name="physical_size")
|
||||
private long physicalSize;
|
||||
|
||||
@Column (name="download_state")
|
||||
|
||||
@ -262,6 +262,10 @@ public class VMTemplateVO implements VirtualMachineTemplate {
|
||||
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public void setUrl(String url) {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -115,6 +115,7 @@ import com.cloud.storage.GuestOSCategoryVO;
|
||||
import com.cloud.storage.Snapshot;
|
||||
import com.cloud.storage.Snapshot.Type;
|
||||
import com.cloud.storage.Storage.StoragePoolType;
|
||||
import com.cloud.storage.Storage.TemplateType;
|
||||
import com.cloud.storage.StoragePool;
|
||||
import com.cloud.storage.StoragePoolVO;
|
||||
import com.cloud.storage.StorageStats;
|
||||
@ -1996,30 +1997,27 @@ public class ApiResponseHelper implements ResponseGenerator {
|
||||
@Override
|
||||
public ListResponse<TemplateResponse> createIsoResponse(List<? extends VirtualMachineTemplate> isos, Long zoneId, boolean onlyReady, boolean isAdmin, Account account) {
|
||||
Map<Long, List<VMTemplateHostVO>> isoHostsMap = new HashMap<Long, List<VMTemplateHostVO>>();
|
||||
for (VirtualMachineTemplate iso : isos) {
|
||||
// TODO: implement
|
||||
List<VMTemplateHostVO> isoHosts = ApiDBUtils.listTemplateHostBy(iso.getId(), zoneId);
|
||||
if (iso.getName().equals("xs-tools.iso")) {
|
||||
List<Long> xstoolsZones = new ArrayList<Long>();
|
||||
// the xs-tools.iso is a special case since it will be available on every computing host in the zone and we want to return it once per zone
|
||||
List<VMTemplateHostVO> xstoolsHosts = new ArrayList<VMTemplateHostVO>();
|
||||
for (VMTemplateHostVO isoHost : isoHosts) {
|
||||
// TODO: implement
|
||||
HostVO host = ApiDBUtils.findHostById(isoHost.getHostId());
|
||||
if (!xstoolsZones.contains(Long.valueOf(host.getDataCenterId()))) {
|
||||
xstoolsZones.add(Long.valueOf(host.getDataCenterId()));
|
||||
xstoolsHosts.add(isoHost);
|
||||
}
|
||||
}
|
||||
isoHostsMap.put(iso.getId(), xstoolsHosts);
|
||||
} else {
|
||||
isoHostsMap.put(iso.getId(), isoHosts);
|
||||
}
|
||||
}
|
||||
|
||||
ListResponse<TemplateResponse> response = new ListResponse<TemplateResponse>();
|
||||
List<TemplateResponse> isoResponses = new ArrayList<TemplateResponse>();
|
||||
for (VirtualMachineTemplate iso : isos) {
|
||||
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.setReady(true);
|
||||
isoResponse.setBootable(iso.isBootable());
|
||||
isoResponse.setFeatured(iso.isFeatured());
|
||||
isoResponse.setCrossZones(iso.isCrossZones());
|
||||
isoResponse.setPublic(iso.isPublicTemplate());
|
||||
isoResponse.setObjectName("iso");
|
||||
isoResponses.add(isoResponse);
|
||||
response.setResponses(isoResponses);
|
||||
continue;
|
||||
}
|
||||
|
||||
List<VMTemplateHostVO> isoHosts = isoHostsMap.get(iso.getId());
|
||||
for (VMTemplateHostVO isoHost : isoHosts) {
|
||||
if (onlyReady && isoHost.getDownloadState() != Status.DOWNLOADED) {
|
||||
|
||||
@ -61,6 +61,7 @@ import com.cloud.resource.Discoverer;
|
||||
import com.cloud.resource.DiscovererBase;
|
||||
import com.cloud.resource.ServerResource;
|
||||
import com.cloud.storage.Storage.ImageFormat;
|
||||
import com.cloud.storage.Storage.TemplateType;
|
||||
import com.cloud.storage.VMTemplateHostVO;
|
||||
import com.cloud.storage.VMTemplateStorageResourceAssoc;
|
||||
import com.cloud.storage.VMTemplateVO;
|
||||
@ -474,6 +475,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
|
||||
|
||||
_agentMgr.registerForHostEvents(this, true, false, true);
|
||||
|
||||
createXsToolsISO();
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -502,37 +504,26 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
|
||||
return false;
|
||||
}
|
||||
|
||||
private void createPVTemplate(long Hostid, StartupStorageCommand cmd) {
|
||||
Map<String, TemplateInfo> tmplts = cmd.getTemplateInfo();
|
||||
if ((tmplts != null) && !tmplts.isEmpty()) {
|
||||
TemplateInfo xenPVISO = tmplts.get("xs-tools");
|
||||
if (xenPVISO != null) {
|
||||
VMTemplateVO tmplt = _tmpltDao.findByTemplateName(xenPVISO.getTemplateName());
|
||||
Long id;
|
||||
if (tmplt == null) {
|
||||
id = _tmpltDao.getNextInSequence(Long.class, "id");
|
||||
VMTemplateVO template = new VMTemplateVO(id, xenPVISO.getTemplateName(), xenPVISO.getTemplateName(), ImageFormat.ISO , true, true, null, "/opt/xensource/packages/iso/xs-tools-5.5.0.iso", null, true, 64, Account.ACCOUNT_ID_SYSTEM, null, "xen-pv-drv-iso", false, 1, false, HypervisorType.None);
|
||||
_tmpltDao.persist(template);
|
||||
} else {
|
||||
id = _tmpltDao.findByTemplateName(xenPVISO.getTemplateName()).getId();
|
||||
}
|
||||
|
||||
VMTemplateHostVO tmpltHost = _vmTemplateHostDao.findByHostTemplate(Hostid, id);
|
||||
|
||||
if (tmpltHost == null) {
|
||||
VMTemplateHostVO vmTemplateHost = new VMTemplateHostVO(Hostid, id, new Date(), 100, VMTemplateStorageResourceAssoc.Status.DOWNLOADED, null, null, null, "iso/users/2/xs-tools", null);
|
||||
vmTemplateHost.setSize(xenPVISO.getSize());
|
||||
_vmTemplateHostDao.persist(vmTemplateHost);
|
||||
}
|
||||
}
|
||||
private void createXsToolsISO() {
|
||||
String isoName = "xs-tools.iso";
|
||||
VMTemplateVO tmplt = _tmpltDao.findByTemplateName(isoName);
|
||||
Long id;
|
||||
if (tmplt == null) {
|
||||
id = _tmpltDao.getNextInSequence(Long.class, "id");
|
||||
VMTemplateVO template = new VMTemplateVO(id, isoName, isoName, ImageFormat.ISO, true, true,
|
||||
TemplateType.PERHOST, null, null, true, 64,
|
||||
Account.ACCOUNT_ID_SYSTEM, null, "xen-pv-drv-iso", false, 1, false, HypervisorType.None);
|
||||
_tmpltDao.persist(template);
|
||||
} else {
|
||||
id = tmplt.getId();
|
||||
tmplt.setTemplateType(TemplateType.PERHOST);
|
||||
tmplt.setUrl(null);
|
||||
_tmpltDao.update(id, tmplt);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processConnect(HostVO agent, StartupCommand cmd) throws ConnectionException {
|
||||
if (cmd instanceof StartupStorageCommand) {
|
||||
createPVTemplate(agent.getId(), (StartupStorageCommand)cmd);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -37,6 +37,7 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||
import com.cloud.storage.Storage;
|
||||
import com.cloud.storage.VMTemplateVO;
|
||||
import com.cloud.storage.VMTemplateZoneVO;
|
||||
import com.cloud.storage.Storage.TemplateType;
|
||||
import com.cloud.template.VirtualMachineTemplate.TemplateFilter;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.utils.component.Inject;
|
||||
@ -217,6 +218,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
|
||||
|
||||
TmpltsInZoneSearch = createSearchBuilder();
|
||||
TmpltsInZoneSearch.and("removed", TmpltsInZoneSearch.entity().getRemoved(), SearchCriteria.Op.NULL);
|
||||
TmpltsInZoneSearch.and("avoidtype", TmpltsInZoneSearch.entity().getTemplateType(), SearchCriteria.Op.NEQ);
|
||||
TmpltsInZoneSearch.join("tmpltzone", tmpltZoneSearch, tmpltZoneSearch.entity().getTemplateId(), TmpltsInZoneSearch.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||
tmpltZoneSearch.done();
|
||||
TmpltsInZoneSearch.done();
|
||||
@ -385,6 +387,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
|
||||
@DB
|
||||
public List<VMTemplateVO> listAllInZone(long dataCenterId) {
|
||||
SearchCriteria<VMTemplateVO> sc = TmpltsInZoneSearch.create();
|
||||
sc.setParameters("avoidtype", TemplateType.PERHOST.toString());
|
||||
sc.setJoinParameters("tmpltzone", "zoneId", dataCenterId);
|
||||
return listBy(sc);
|
||||
}
|
||||
|
||||
@ -437,12 +437,6 @@ public class DownloadMonitorImpl implements DownloadMonitor {
|
||||
}
|
||||
}
|
||||
|
||||
for (Iterator<VMTemplateVO> i = allTemplates.iterator();i.hasNext();) {
|
||||
if (i.next().getName().startsWith("xs-tools")) {
|
||||
i.remove();
|
||||
}
|
||||
}
|
||||
|
||||
toBeDownloaded.addAll(allTemplates);
|
||||
|
||||
for (VMTemplateVO tmplt: allTemplates) {
|
||||
|
||||
@ -1285,7 +1285,7 @@ public class TemplateManagerImpl implements TemplateManager, Manager, TemplateSe
|
||||
throw new PermissionDeniedException(msg + ". Permission denied.");
|
||||
}
|
||||
|
||||
if ((template != null) && (!template.isPublicTemplate() && (account.getId() != template.getAccountId()) && (!template.getName().startsWith("xs-tools")))) {
|
||||
if ((template != null) && (!template.isPublicTemplate() && (account.getId() != template.getAccountId()) && (template.getTemplateType() != TemplateType.PERHOST))) {
|
||||
throw new PermissionDeniedException(msg + ". Permission denied.");
|
||||
}
|
||||
|
||||
|
||||
@ -151,6 +151,7 @@ import com.cloud.storage.GuestOSVO;
|
||||
import com.cloud.storage.SnapshotVO;
|
||||
import com.cloud.storage.Storage;
|
||||
import com.cloud.storage.Storage.ImageFormat;
|
||||
import com.cloud.storage.Storage.TemplateType;
|
||||
import com.cloud.storage.StorageManager;
|
||||
import com.cloud.storage.StoragePoolVO;
|
||||
import com.cloud.storage.VMTemplateHostVO;
|
||||
@ -730,34 +731,37 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
|
||||
} else if (vm.getState() != State.Running) {
|
||||
return true;
|
||||
}
|
||||
|
||||
String isoPath;
|
||||
VMTemplateVO tmplt = _templateDao.findById(isoId);
|
||||
if ( tmplt == null ) {
|
||||
s_logger.warn("ISO: " + isoId +" does not exist");
|
||||
return false;
|
||||
}
|
||||
// Get the path of the ISO
|
||||
Pair<String, String> isoPathPair = _storageMgr.getAbsoluteIsoPath(isoId, vm.getDataCenterId());
|
||||
String isoPath;
|
||||
String isoName = _templateDao.findById(isoId).getName();
|
||||
|
||||
if (isoPathPair == null) {
|
||||
// we can't send a null path to the ServerResource, so return false if we are unable to find the isoPath
|
||||
if (isoName.startsWith("xs-tools"))
|
||||
isoPath = isoName;
|
||||
else {
|
||||
Pair<String, String> isoPathPair = null;
|
||||
if ( tmplt.getTemplateType() == TemplateType.PERHOST ) {
|
||||
isoPath = tmplt.getName();
|
||||
} else {
|
||||
isoPathPair = _storageMgr.getAbsoluteIsoPath(isoId, vm.getDataCenterId());
|
||||
if (isoPathPair == null) {
|
||||
s_logger.warn("Couldn't get absolute iso path");
|
||||
return false;
|
||||
} else {
|
||||
isoPath = isoPathPair.first();
|
||||
}
|
||||
|
||||
} else {
|
||||
isoPath = isoPathPair.first();
|
||||
}
|
||||
}
|
||||
|
||||
String vmName = vm.getInstanceName();
|
||||
|
||||
HostVO host = _hostDao.findById(vm.getHostId());
|
||||
if (host == null)
|
||||
return false;
|
||||
|
||||
if (host == null) {
|
||||
s_logger.warn("Host: " + vm.getHostId() +" does not exist");
|
||||
return false;
|
||||
}
|
||||
AttachIsoCommand cmd = new AttachIsoCommand(vmName, isoPath, attach);
|
||||
if(isoPathPair != null)
|
||||
if (isoPathPair != null) {
|
||||
cmd.setStoreUrl(isoPathPair.second());
|
||||
}
|
||||
Answer a = _agentMgr.easySend(vm.getHostId(), cmd);
|
||||
return (a != null);
|
||||
}
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
use cloud;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
DELETE FROM template_host_ref WHERE install_path LIKE '%xs-tools%'
|
||||
DELETE FROM configuration where name='upgrade.url';
|
||||
DELETE FROM configuration where name='router.template.id';
|
||||
INSERT INTO configuration (category, instance, component, name, value, description)
|
||||
@ -15,6 +15,5 @@ UPDATE vm_template set unique_name='routing_old' where id=1;
|
||||
INSERT INTO vm_template (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones)
|
||||
VALUES (10, 'routing', 'SystemVM Template', 0, now(), 'ext3', 0, 64, 1, 'http://download.cloud.com/releases/2.2/systemvm.vhd.bz2', 'bcc7f290f4c27ab4d0fe95d1012829ea', 0, 'SystemVM Template', 'VHD', 15, 0, 1);
|
||||
Update configuration set name='storage.max.volume.size' where name='max.volume.size.mb';
|
||||
ALTER TABLE `vm_instance` DROP COLUMN `group`;
|
||||
|
||||
COMMIT;
|
||||
|
||||
@ -3,4 +3,5 @@ SET foreign_key_checks = 0;
|
||||
--
|
||||
-- Schema upgrade from 2.1 to 2.2
|
||||
--
|
||||
ALTER TABLE `cloud`.`template_host_ref` ADD COLUMN `physicalSize` bigint unsigned NOT NULL DEFAULT 0;
|
||||
ALTER TABLE `cloud`.`template_host_ref` ADD COLUMN `physical_size` bigint unsigned NOT NULL DEFAULT 0;
|
||||
ALTER TABLE `vm_instance` DROP COLUMN `group`
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user