This commit is contained in:
David Nalley 2012-08-20 15:10:59 -04:00
commit ec1e3058e9
18 changed files with 47 additions and 119 deletions

View File

@ -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

View File

@ -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());
}

View File

@ -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) {
}

View File

@ -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),

View File

@ -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) {
}

View File

@ -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) {

View File

@ -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;
}
}

View File

@ -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);

View File

@ -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());

View File

@ -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) {

View File

@ -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

View File

@ -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

View File

@ -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()));

View File

@ -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

View File

@ -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

View File

@ -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"/>',

View File

@ -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;
}

View File

@ -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
});