mirror of https://github.com/apache/cloudstack.git
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cloudstack
This commit is contained in:
commit
ec1e3058e9
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
|
||||
#new labels (begin) **********************************************************************************************
|
||||
label.local.storage.enabled=Local storage enabled
|
||||
label.tier.details=Tier details
|
||||
label.edit.tags=Edit tags
|
||||
label.action.enable.physical.network=Enable physical network
|
||||
|
|
|
|||
|
|
@ -1159,6 +1159,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements
|
|||
long disksize;
|
||||
try {
|
||||
primaryPool = _storagePoolMgr.getStoragePool(pool.getUuid());
|
||||
disksize = dskch.getSize();
|
||||
|
||||
if (cmd.getTemplateUrl() != null) {
|
||||
|
||||
|
|
@ -1170,9 +1171,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements
|
|||
return new Answer(cmd, false,
|
||||
" Can't create storage volume on storage pool");
|
||||
}
|
||||
disksize = vol.getSize();
|
||||
} else {
|
||||
disksize = dskch.getSize();
|
||||
vol = primaryPool.createPhysicalDisk(UUID.randomUUID()
|
||||
.toString(), dskch.getSize());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1025,14 +1025,6 @@ public class ElasticLoadBalancerManagerImpl implements
|
|||
throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean recreateNeeded(
|
||||
VirtualMachineProfile<DomainRouterVO> profile, long hostId, Commands cmds, ReservationContext context) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void prepareStop(VirtualMachineProfile<DomainRouterVO> profile) {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -230,6 +230,7 @@ public enum Config {
|
|||
SortKeyAlgorithm("Advanced", ManagementServer.class, Boolean.class, "sortkey.algorithm", "false", "Sort algorithm for those who use sort key(template, disk offering, service offering, network offering), true means ascending sort while false means descending sort", null),
|
||||
EnableEC2API("Advanced", ManagementServer.class, Boolean.class, "enable.ec2.api", "false", "enable EC2 API on CloudStack", null),
|
||||
EnableS3API("Advanced", ManagementServer.class, Boolean.class, "enable.s3.api", "false", "enable Amazon S3 API on CloudStack", null),
|
||||
RecreateSystemVmEnabled("Advanced", ManagementServer.class, Boolean.class, "recreate.systemvm.enabled", "false", "If true, will recreate system vm root disk whenever starting system vm", "true,false"),
|
||||
|
||||
// Ovm
|
||||
OvmPublicNetwork("Hidden", ManagementServer.class, String.class, "ovm.public.network.device", null, "Specify the public bridge on host for public network", null),
|
||||
|
|
|
|||
|
|
@ -368,14 +368,6 @@ public class AgentBasedConsoleProxyManager implements ConsoleProxyManager, Virtu
|
|||
throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean recreateNeeded(
|
||||
VirtualMachineProfile<ConsoleProxyVO> profile, long hostId,
|
||||
Commands cmds, ReservationContext context) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void prepareStop(VirtualMachineProfile<ConsoleProxyVO> profile) {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2023,15 +2023,6 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx
|
|||
//not supported
|
||||
throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean recreateNeeded(
|
||||
VirtualMachineProfile<ConsoleProxyVO> profile, long hostId,
|
||||
Commands cmds, ReservationContext context) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void prepareStop(VirtualMachineProfile<ConsoleProxyVO> profile) {
|
||||
|
|
|
|||
|
|
@ -3386,17 +3386,4 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean recreateNeeded(
|
||||
VirtualMachineProfile<DomainRouterVO> profile, long hostId,
|
||||
Commands cmds, ReservationContext context) {
|
||||
//asssume that if failed to ssh into router, meaning router is crashed
|
||||
CheckSshAnswer answer = (CheckSshAnswer) cmds.getAnswer("checkSsh");
|
||||
if (answer == null || !answer.getResult()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -180,7 +180,7 @@ public interface StorageManager extends StorageService, Manager {
|
|||
void createCapacityEntry(StoragePoolVO storagePool, short capacityType, long allocated);
|
||||
|
||||
|
||||
void prepare(VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest, boolean recreate) throws StorageUnavailableException, InsufficientStorageCapacityException, ConcurrentOperationException;
|
||||
void prepare(VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest) throws StorageUnavailableException, InsufficientStorageCapacityException, ConcurrentOperationException;
|
||||
|
||||
void release(VirtualMachineProfile<? extends VMInstanceVO> profile);
|
||||
|
||||
|
|
|
|||
|
|
@ -358,6 +358,8 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
|
|||
private double _storageAllocatedThreshold = 1.0d;
|
||||
protected BigDecimal _storageOverprovisioningFactor = new BigDecimal(1);
|
||||
|
||||
private boolean _recreateSystemVmEnabled;
|
||||
|
||||
public boolean share(VMInstanceVO vm, List<VolumeVO> vols, HostVO host, boolean cancelPreviousShare) throws StorageUnavailableException {
|
||||
|
||||
// if pool is in maintenance and it is the ONLY pool available; reject
|
||||
|
|
@ -958,6 +960,9 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
|
|||
value = configDao.getValue(Config.CopyVolumeWait.toString());
|
||||
_copyvolumewait = NumbersUtil.parseInt(value, Integer.parseInt(Config.CopyVolumeWait.getDefaultValue()));
|
||||
|
||||
value = configDao.getValue(Config.RecreateSystemVmEnabled.key());
|
||||
_recreateSystemVmEnabled = Boolean.parseBoolean(value);
|
||||
|
||||
value = configDao.getValue(Config.StorageTemplateCleanupEnabled.key());
|
||||
_templateCleanupEnabled = (value == null ? true : Boolean.parseBoolean(value));
|
||||
|
||||
|
|
@ -3217,7 +3222,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
|
|||
}
|
||||
|
||||
@Override
|
||||
public void prepare(VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest, boolean recreate) throws StorageUnavailableException, InsufficientStorageCapacityException {
|
||||
public void prepare(VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest) throws StorageUnavailableException, InsufficientStorageCapacityException {
|
||||
|
||||
if (dest == null) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
|
|
@ -3229,6 +3234,8 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
|
|||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Checking if we need to prepare " + vols.size() + " volumes for " + vm);
|
||||
}
|
||||
|
||||
boolean recreate = _recreateSystemVmEnabled;
|
||||
|
||||
List<VolumeVO> recreateVols = new ArrayList<VolumeVO>(vols.size());
|
||||
|
||||
|
|
|
|||
|
|
@ -1469,15 +1469,6 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
|
|||
throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean recreateNeeded(
|
||||
VirtualMachineProfile<SecondaryStorageVmVO> profile, long hostId,
|
||||
Commands cmds, ReservationContext context) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void prepareStop(VirtualMachineProfile<SecondaryStorageVmVO> profile) {
|
||||
|
||||
|
|
|
|||
|
|
@ -3620,15 +3620,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
|
|||
return vm;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean recreateNeeded(VirtualMachineProfile<UserVmVO> profile,
|
||||
long hostId, Commands cmds, ReservationContext context) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public UserVm restoreVM(RestoreVMCmd cmd) {
|
||||
// Input validation
|
||||
|
|
|
|||
|
|
@ -69,8 +69,6 @@ public interface VirtualMachineGuru<T extends VirtualMachine> {
|
|||
|
||||
void finalizeExpunge(T vm);
|
||||
|
||||
boolean recreateNeeded(VirtualMachineProfile<T> profile, long hostId, Commands cmds, ReservationContext context);
|
||||
|
||||
/**
|
||||
* Returns the id parsed from the name. If it cannot parse the name,
|
||||
* then return null. This method is used to determine if this is
|
||||
|
|
@ -82,7 +80,6 @@ public interface VirtualMachineGuru<T extends VirtualMachine> {
|
|||
Long convertToId(String vmName);
|
||||
|
||||
/**
|
||||
<<<<<<< HEAD
|
||||
* Prepare for a nic to be plugged into the network.
|
||||
* @param network
|
||||
* @param nic
|
||||
|
|
|
|||
|
|
@ -657,7 +657,6 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene
|
|||
DataCenterDeployment originalPlan = plan;
|
||||
|
||||
int retry = _retry;
|
||||
boolean recreate = false;
|
||||
while (retry-- != 0) { // It's != so that it can match -1.
|
||||
|
||||
if(reuseVolume){
|
||||
|
|
@ -752,8 +751,7 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene
|
|||
}
|
||||
_networkMgr.prepare(vmProfile, dest, ctx);
|
||||
if (vm.getHypervisorType() != HypervisorType.BareMetal) {
|
||||
_storageMgr.prepare(vmProfile, dest, recreate);
|
||||
recreate = false;
|
||||
_storageMgr.prepare(vmProfile, dest);
|
||||
}
|
||||
//since StorageMgr succeeded in volume creation, reuse Volume for further tries until current cluster has capacity
|
||||
if(!reuseVolume){
|
||||
|
|
@ -813,11 +811,7 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene
|
|||
_haMgr.scheduleStop(vm, destHostId, WorkType.ForceStop);
|
||||
throw new ExecutionException("Unable to stop " + vm + " so we are unable to retry the start operation");
|
||||
}
|
||||
if (vmGuru.recreateNeeded(vmProfile, destHostId, cmds, ctx)) {
|
||||
recreate = true;
|
||||
} else {
|
||||
throw new ExecutionException("Unable to start " + vm + " due to error in finalizeStart, not retrying");
|
||||
}
|
||||
throw new ExecutionException("Unable to start " + vm + " due to error in finalizeStart, not retrying");
|
||||
}
|
||||
}
|
||||
s_logger.info("Unable to start VM on " + dest.getHost() + " due to " + (startAnswer == null ? " no start answer" : startAnswer.getDetails()));
|
||||
|
|
|
|||
|
|
@ -292,14 +292,6 @@ public class MockUserVmManagerImpl implements UserVmManager, UserVmService, Mana
|
|||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean recreateNeeded(VirtualMachineProfile<UserVmVO> profile,
|
||||
long hostId, Commands cmds, ReservationContext context) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserVm startVirtualMachine(DeployVMCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException {
|
||||
// TODO Auto-generated method stub
|
||||
|
|
|
|||
|
|
@ -1,17 +1,21 @@
|
|||
#!/usr/bin/env bash
|
||||
# Copyright 2012 Citrix Systems, Inc. Licensed under the
|
||||
# Apache License, Version 2.0 (the "License"); you may not use this
|
||||
# file except in compliance with the License. Citrix Systems, Inc.
|
||||
# reserves all rights not expressly granted by 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.
|
||||
# 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
|
||||
#
|
||||
# Automatically generated by addcopyright.py at 04/03/2012
|
||||
# gcc.sh - compiles javascript into one file
|
||||
# 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.
|
||||
|
||||
|
||||
usage() {
|
||||
printf "Usage:\n %s [source directory where the java script files are] [destination directory to put the result] \n" $(basename $0) >&2
|
||||
|
|
@ -33,4 +37,4 @@ for file in `ls -l $1/cloud*.js | egrep -v 'callback|core.js' | awk '{print $NF}
|
|||
jsfiles=`echo $jsfiles "--js " $file`
|
||||
done
|
||||
|
||||
java -jar compiler.jar $jsfiles --js_output_file $2/cloud.core.min.js
|
||||
java -jar compiler.jar $jsfiles --js_output_file $2/cloud.core.min.js
|
||||
|
|
|
|||
|
|
@ -1635,6 +1635,7 @@ under the License.
|
|||
<script language="javascript">
|
||||
dictionary = {
|
||||
'label.edit.tags': '<fmt:message key="label.edit.tags"/>',
|
||||
'label.local.storage.enabled': '<fmt:message key="label.local.storage.enabled"/>',
|
||||
'label.tier.details': '<fmt:message key="label.tier.details"/>',
|
||||
'label.action.enable.physical.network': '<fmt:message key="label.action.enable.physical.network"/>',
|
||||
'label.action.disable.physical.network': '<fmt:message key="label.action.disable.physical.network"/>',
|
||||
|
|
|
|||
|
|
@ -701,6 +701,10 @@ cloudStack.api = {
|
|||
resourceType: resourceType
|
||||
};
|
||||
|
||||
if (isAdmin() || isDomainAdmin()) {
|
||||
data.listAll = true;
|
||||
}
|
||||
|
||||
if (args.context.projects) {
|
||||
data.projectid=args.context.projects[0].id;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -288,31 +288,8 @@
|
|||
return (args.groupedData.zone.hypervisor != "VMware");
|
||||
},
|
||||
|
||||
addPrimaryStorage: function(args) {
|
||||
var item;
|
||||
$.ajax({
|
||||
url: createURL("listConfigurations&name=" + todb("use.local.storage")),
|
||||
dataType: 'json',
|
||||
async: false,
|
||||
success: function(json) {
|
||||
var items = json.listconfigurationsresponse.configuration; //unfortunately, it returns 2 items("system.vm.use.local.storage", "use.local.storage") instead of 1 item.
|
||||
if(items != null && items.length > 0) {
|
||||
for(var i = 0; i < items.length; i++) {
|
||||
item = items[i];
|
||||
if(item.name == "use.local.storage") {
|
||||
break; //break for loop
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if(item == null || item.value == null || item.value.length == 0 || item.value == "false")
|
||||
configurationUseLocalStorage = false;
|
||||
else
|
||||
configurationUseLocalStorage = true;
|
||||
|
||||
return (!configurationUseLocalStorage);
|
||||
addPrimaryStorage: function(args) {
|
||||
return args.data.localstorageenabled != 'on';
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -517,6 +494,10 @@
|
|||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
localstorageenabled: {
|
||||
label: 'label.local.storage.enabled',
|
||||
isBoolean: true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -1262,6 +1243,9 @@
|
|||
|
||||
array1.push("&name=" + todb(args.data.zone.name));
|
||||
|
||||
if (args.data.zone.localstorageenabled == 'on') {
|
||||
array1.push("&localstorageenabled=true");
|
||||
}
|
||||
array1.push("&dns1=" + todb(args.data.zone.dns1));
|
||||
|
||||
var dns2 = args.data.zone.dns2;
|
||||
|
|
@ -2801,8 +2785,8 @@
|
|||
});
|
||||
},
|
||||
|
||||
addPrimaryStorage: function(args) {
|
||||
if(configurationUseLocalStorage == true) { //use local storage, don't need primary storage. So, skip this step.
|
||||
addPrimaryStorage: function(args) {
|
||||
if(args.data.zone.localstorageenabled == 'on') { //use local storage, don't need primary storage. So, skip this step.
|
||||
stepFns.addSecondaryStorage({
|
||||
data: args.data
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue