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 {
|
public static enum TemplateType {
|
||||||
SYSTEM, /*routing, system vm template*/
|
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 {
|
public static enum StoragePoolType {
|
||||||
|
|||||||
@ -3890,25 +3890,6 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR
|
|||||||
public Type getType() {
|
public Type getType() {
|
||||||
return com.cloud.host.Host.Type.Routing;
|
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() {
|
protected boolean can_bridge_firewall() {
|
||||||
return false;
|
return false;
|
||||||
@ -4158,8 +4139,6 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR
|
|||||||
|
|
||||||
StartupStorageCommand sscmd = initializeLocalSR();
|
StartupStorageCommand sscmd = initializeLocalSR();
|
||||||
if (sscmd != null) {
|
if (sscmd != null) {
|
||||||
/* report pv driver iso */
|
|
||||||
getPVISO(sscmd);
|
|
||||||
return new StartupCommand[] { cmd, sscmd };
|
return new StartupCommand[] { cmd, sscmd };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -64,7 +64,7 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc {
|
|||||||
@Column (name="size")
|
@Column (name="size")
|
||||||
private long size;
|
private long size;
|
||||||
|
|
||||||
@Column (name="physicalSize")
|
@Column (name="physical_size")
|
||||||
private long physicalSize;
|
private long physicalSize;
|
||||||
|
|
||||||
@Column (name="download_state")
|
@Column (name="download_state")
|
||||||
|
|||||||
@ -262,6 +262,10 @@ public class VMTemplateVO implements VirtualMachineTemplate {
|
|||||||
|
|
||||||
public String getUrl() {
|
public String getUrl() {
|
||||||
return url;
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUrl(String url) {
|
||||||
|
this.url = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -115,6 +115,7 @@ import com.cloud.storage.GuestOSCategoryVO;
|
|||||||
import com.cloud.storage.Snapshot;
|
import com.cloud.storage.Snapshot;
|
||||||
import com.cloud.storage.Snapshot.Type;
|
import com.cloud.storage.Snapshot.Type;
|
||||||
import com.cloud.storage.Storage.StoragePoolType;
|
import com.cloud.storage.Storage.StoragePoolType;
|
||||||
|
import com.cloud.storage.Storage.TemplateType;
|
||||||
import com.cloud.storage.StoragePool;
|
import com.cloud.storage.StoragePool;
|
||||||
import com.cloud.storage.StoragePoolVO;
|
import com.cloud.storage.StoragePoolVO;
|
||||||
import com.cloud.storage.StorageStats;
|
import com.cloud.storage.StorageStats;
|
||||||
@ -1996,30 +1997,27 @@ public class ApiResponseHelper implements ResponseGenerator {
|
|||||||
@Override
|
@Override
|
||||||
public ListResponse<TemplateResponse> createIsoResponse(List<? extends VirtualMachineTemplate> isos, Long zoneId, boolean onlyReady, boolean isAdmin, Account account) {
|
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>>();
|
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>();
|
ListResponse<TemplateResponse> response = new ListResponse<TemplateResponse>();
|
||||||
List<TemplateResponse> isoResponses = new ArrayList<TemplateResponse>();
|
List<TemplateResponse> isoResponses = new ArrayList<TemplateResponse>();
|
||||||
for (VirtualMachineTemplate iso : isos) {
|
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());
|
List<VMTemplateHostVO> isoHosts = isoHostsMap.get(iso.getId());
|
||||||
for (VMTemplateHostVO isoHost : isoHosts) {
|
for (VMTemplateHostVO isoHost : isoHosts) {
|
||||||
if (onlyReady && isoHost.getDownloadState() != Status.DOWNLOADED) {
|
if (onlyReady && isoHost.getDownloadState() != Status.DOWNLOADED) {
|
||||||
|
|||||||
@ -61,6 +61,7 @@ import com.cloud.resource.Discoverer;
|
|||||||
import com.cloud.resource.DiscovererBase;
|
import com.cloud.resource.DiscovererBase;
|
||||||
import com.cloud.resource.ServerResource;
|
import com.cloud.resource.ServerResource;
|
||||||
import com.cloud.storage.Storage.ImageFormat;
|
import com.cloud.storage.Storage.ImageFormat;
|
||||||
|
import com.cloud.storage.Storage.TemplateType;
|
||||||
import com.cloud.storage.VMTemplateHostVO;
|
import com.cloud.storage.VMTemplateHostVO;
|
||||||
import com.cloud.storage.VMTemplateStorageResourceAssoc;
|
import com.cloud.storage.VMTemplateStorageResourceAssoc;
|
||||||
import com.cloud.storage.VMTemplateVO;
|
import com.cloud.storage.VMTemplateVO;
|
||||||
@ -474,6 +475,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
|
|||||||
|
|
||||||
_agentMgr.registerForHostEvents(this, true, false, true);
|
_agentMgr.registerForHostEvents(this, true, false, true);
|
||||||
|
|
||||||
|
createXsToolsISO();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -502,37 +504,26 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createPVTemplate(long Hostid, StartupStorageCommand cmd) {
|
private void createXsToolsISO() {
|
||||||
Map<String, TemplateInfo> tmplts = cmd.getTemplateInfo();
|
String isoName = "xs-tools.iso";
|
||||||
if ((tmplts != null) && !tmplts.isEmpty()) {
|
VMTemplateVO tmplt = _tmpltDao.findByTemplateName(isoName);
|
||||||
TemplateInfo xenPVISO = tmplts.get("xs-tools");
|
Long id;
|
||||||
if (xenPVISO != null) {
|
if (tmplt == null) {
|
||||||
VMTemplateVO tmplt = _tmpltDao.findByTemplateName(xenPVISO.getTemplateName());
|
id = _tmpltDao.getNextInSequence(Long.class, "id");
|
||||||
Long id;
|
VMTemplateVO template = new VMTemplateVO(id, isoName, isoName, ImageFormat.ISO, true, true,
|
||||||
if (tmplt == null) {
|
TemplateType.PERHOST, null, null, true, 64,
|
||||||
id = _tmpltDao.getNextInSequence(Long.class, "id");
|
Account.ACCOUNT_ID_SYSTEM, null, "xen-pv-drv-iso", false, 1, false, HypervisorType.None);
|
||||||
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);
|
||||||
_tmpltDao.persist(template);
|
} else {
|
||||||
} else {
|
id = tmplt.getId();
|
||||||
id = _tmpltDao.findByTemplateName(xenPVISO.getTemplateName()).getId();
|
tmplt.setTemplateType(TemplateType.PERHOST);
|
||||||
}
|
tmplt.setUrl(null);
|
||||||
|
_tmpltDao.update(id, tmplt);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void processConnect(HostVO agent, StartupCommand cmd) throws ConnectionException {
|
public void processConnect(HostVO agent, StartupCommand cmd) throws ConnectionException {
|
||||||
if (cmd instanceof StartupStorageCommand) {
|
|
||||||
createPVTemplate(agent.getId(), (StartupStorageCommand)cmd);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -37,6 +37,7 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
|||||||
import com.cloud.storage.Storage;
|
import com.cloud.storage.Storage;
|
||||||
import com.cloud.storage.VMTemplateVO;
|
import com.cloud.storage.VMTemplateVO;
|
||||||
import com.cloud.storage.VMTemplateZoneVO;
|
import com.cloud.storage.VMTemplateZoneVO;
|
||||||
|
import com.cloud.storage.Storage.TemplateType;
|
||||||
import com.cloud.template.VirtualMachineTemplate.TemplateFilter;
|
import com.cloud.template.VirtualMachineTemplate.TemplateFilter;
|
||||||
import com.cloud.user.Account;
|
import com.cloud.user.Account;
|
||||||
import com.cloud.utils.component.Inject;
|
import com.cloud.utils.component.Inject;
|
||||||
@ -217,6 +218,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
|
|||||||
|
|
||||||
TmpltsInZoneSearch = createSearchBuilder();
|
TmpltsInZoneSearch = createSearchBuilder();
|
||||||
TmpltsInZoneSearch.and("removed", TmpltsInZoneSearch.entity().getRemoved(), SearchCriteria.Op.NULL);
|
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);
|
TmpltsInZoneSearch.join("tmpltzone", tmpltZoneSearch, tmpltZoneSearch.entity().getTemplateId(), TmpltsInZoneSearch.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||||
tmpltZoneSearch.done();
|
tmpltZoneSearch.done();
|
||||||
TmpltsInZoneSearch.done();
|
TmpltsInZoneSearch.done();
|
||||||
@ -385,6 +387,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
|
|||||||
@DB
|
@DB
|
||||||
public List<VMTemplateVO> listAllInZone(long dataCenterId) {
|
public List<VMTemplateVO> listAllInZone(long dataCenterId) {
|
||||||
SearchCriteria<VMTemplateVO> sc = TmpltsInZoneSearch.create();
|
SearchCriteria<VMTemplateVO> sc = TmpltsInZoneSearch.create();
|
||||||
|
sc.setParameters("avoidtype", TemplateType.PERHOST.toString());
|
||||||
sc.setJoinParameters("tmpltzone", "zoneId", dataCenterId);
|
sc.setJoinParameters("tmpltzone", "zoneId", dataCenterId);
|
||||||
return listBy(sc);
|
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);
|
toBeDownloaded.addAll(allTemplates);
|
||||||
|
|
||||||
for (VMTemplateVO tmplt: allTemplates) {
|
for (VMTemplateVO tmplt: allTemplates) {
|
||||||
|
|||||||
@ -1285,7 +1285,7 @@ public class TemplateManagerImpl implements TemplateManager, Manager, TemplateSe
|
|||||||
throw new PermissionDeniedException(msg + ". Permission denied.");
|
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.");
|
throw new PermissionDeniedException(msg + ". Permission denied.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -151,6 +151,7 @@ import com.cloud.storage.GuestOSVO;
|
|||||||
import com.cloud.storage.SnapshotVO;
|
import com.cloud.storage.SnapshotVO;
|
||||||
import com.cloud.storage.Storage;
|
import com.cloud.storage.Storage;
|
||||||
import com.cloud.storage.Storage.ImageFormat;
|
import com.cloud.storage.Storage.ImageFormat;
|
||||||
|
import com.cloud.storage.Storage.TemplateType;
|
||||||
import com.cloud.storage.StorageManager;
|
import com.cloud.storage.StorageManager;
|
||||||
import com.cloud.storage.StoragePoolVO;
|
import com.cloud.storage.StoragePoolVO;
|
||||||
import com.cloud.storage.VMTemplateHostVO;
|
import com.cloud.storage.VMTemplateHostVO;
|
||||||
@ -730,34 +731,37 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
|
|||||||
} else if (vm.getState() != State.Running) {
|
} else if (vm.getState() != State.Running) {
|
||||||
return true;
|
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
|
// Get the path of the ISO
|
||||||
Pair<String, String> isoPathPair = _storageMgr.getAbsoluteIsoPath(isoId, vm.getDataCenterId());
|
Pair<String, String> isoPathPair = null;
|
||||||
String isoPath;
|
if ( tmplt.getTemplateType() == TemplateType.PERHOST ) {
|
||||||
String isoName = _templateDao.findById(isoId).getName();
|
isoPath = tmplt.getName();
|
||||||
|
} else {
|
||||||
if (isoPathPair == null) {
|
isoPathPair = _storageMgr.getAbsoluteIsoPath(isoId, vm.getDataCenterId());
|
||||||
// we can't send a null path to the ServerResource, so return false if we are unable to find the isoPath
|
if (isoPathPair == null) {
|
||||||
if (isoName.startsWith("xs-tools"))
|
|
||||||
isoPath = isoName;
|
|
||||||
else {
|
|
||||||
s_logger.warn("Couldn't get absolute iso path");
|
s_logger.warn("Couldn't get absolute iso path");
|
||||||
return false;
|
return false;
|
||||||
|
} else {
|
||||||
|
isoPath = isoPathPair.first();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
|
||||||
isoPath = isoPathPair.first();
|
|
||||||
}
|
|
||||||
|
|
||||||
String vmName = vm.getInstanceName();
|
String vmName = vm.getInstanceName();
|
||||||
|
|
||||||
HostVO host = _hostDao.findById(vm.getHostId());
|
HostVO host = _hostDao.findById(vm.getHostId());
|
||||||
if (host == null)
|
if (host == null) {
|
||||||
return false;
|
s_logger.warn("Host: " + vm.getHostId() +" does not exist");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
AttachIsoCommand cmd = new AttachIsoCommand(vmName, isoPath, attach);
|
AttachIsoCommand cmd = new AttachIsoCommand(vmName, isoPath, attach);
|
||||||
if(isoPathPair != null)
|
if (isoPathPair != null) {
|
||||||
cmd.setStoreUrl(isoPathPair.second());
|
cmd.setStoreUrl(isoPathPair.second());
|
||||||
|
}
|
||||||
Answer a = _agentMgr.easySend(vm.getHostId(), cmd);
|
Answer a = _agentMgr.easySend(vm.getHostId(), cmd);
|
||||||
return (a != null);
|
return (a != null);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
use cloud;
|
use cloud;
|
||||||
|
|
||||||
START TRANSACTION;
|
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='upgrade.url';
|
||||||
DELETE FROM configuration where name='router.template.id';
|
DELETE FROM configuration where name='router.template.id';
|
||||||
INSERT INTO configuration (category, instance, component, name, value, description)
|
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)
|
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);
|
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';
|
Update configuration set name='storage.max.volume.size' where name='max.volume.size.mb';
|
||||||
ALTER TABLE `vm_instance` DROP COLUMN `group`;
|
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|||||||
@ -3,4 +3,5 @@ SET foreign_key_checks = 0;
|
|||||||
--
|
--
|
||||||
-- Schema upgrade from 2.1 to 2.2
|
-- 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