mirror of https://github.com/apache/cloudstack.git
Merge pull request #1868 from anshul1886/CLOUDSTACK-9707
CLOUDSTACK-9707: While using hostid parameter, vm gets deployed on an…
This commit is contained in:
commit
ac4a02f944
|
|
@ -106,7 +106,8 @@ public interface VirtualMachineEntity extends CloudStackEntity {
|
|||
* @param reservationId reservation id from reserve call.
|
||||
*
|
||||
*/
|
||||
void deploy(String reservationId, String caller, Map<VirtualMachineProfile.Param, Object> params) throws InsufficientCapacityException, ResourceUnavailableException;
|
||||
void deploy(String reservationId, String caller, Map<VirtualMachineProfile.Param, Object> params, boolean deployOnGivenHost)
|
||||
throws InsufficientCapacityException, ResourceUnavailableException;
|
||||
|
||||
/**
|
||||
* Stop the virtual machine
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ public interface VMEntityManager {
|
|||
String reserveVirtualMachine(VMEntityVO vmEntityVO, DeploymentPlanner plannerToUse, DeploymentPlan plan, ExcludeList exclude) throws InsufficientCapacityException,
|
||||
ResourceUnavailableException;
|
||||
|
||||
void deployVirtualMachine(String reservationId, VMEntityVO vmEntityVO, String caller, Map<VirtualMachineProfile.Param, Object> params)
|
||||
void deployVirtualMachine(String reservationId, VMEntityVO vmEntityVO, String caller, Map<VirtualMachineProfile.Param, Object> params, boolean deployOnGivenHost)
|
||||
throws InsufficientCapacityException, ResourceUnavailableException;
|
||||
|
||||
boolean stopvirtualmachine(VMEntityVO vmEntityVO, String caller) throws ResourceUnavailableException;
|
||||
|
|
|
|||
|
|
@ -218,7 +218,7 @@ public class VMEntityManagerImpl implements VMEntityManager {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void deployVirtualMachine(String reservationId, VMEntityVO vmEntityVO, String caller, Map<VirtualMachineProfile.Param, Object> params)
|
||||
public void deployVirtualMachine(String reservationId, VMEntityVO vmEntityVO, String caller, Map<VirtualMachineProfile.Param, Object> params, boolean deployOnGivenHost)
|
||||
throws InsufficientCapacityException, ResourceUnavailableException {
|
||||
//grab the VM Id and destination using the reservationId.
|
||||
|
||||
|
|
@ -233,13 +233,17 @@ public class VMEntityManagerImpl implements VMEntityManager {
|
|||
_itMgr.start(vm.getUuid(), params, reservedPlan, _planningMgr.getDeploymentPlannerByName(vmReservation.getDeploymentPlanner()));
|
||||
} catch (Exception ex) {
|
||||
// Retry the deployment without using the reservation plan
|
||||
DataCenterDeployment plan = new DataCenterDeployment(0, null, null, null, null, null);
|
||||
// Retry is only done if host id is not passed in deploy virtual machine api. Otherwise
|
||||
// the instance may be started on another host instead of the intended one.
|
||||
if (!deployOnGivenHost) {
|
||||
DataCenterDeployment plan = new DataCenterDeployment(0, null, null, null, null, null);
|
||||
|
||||
if (reservedPlan.getAvoids() != null) {
|
||||
plan.setAvoids(reservedPlan.getAvoids());
|
||||
if (reservedPlan.getAvoids() != null) {
|
||||
plan.setAvoids(reservedPlan.getAvoids());
|
||||
}
|
||||
|
||||
_itMgr.start(vm.getUuid(), params, plan, null);
|
||||
}
|
||||
|
||||
_itMgr.start(vm.getUuid(), params, plan, null);
|
||||
}
|
||||
} else {
|
||||
// no reservation found. Let VirtualMachineManager retry
|
||||
|
|
|
|||
|
|
@ -207,9 +207,9 @@ public class VirtualMachineEntityImpl implements VirtualMachineEntity {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void deploy(String reservationId, String caller, Map<VirtualMachineProfile.Param, Object> params) throws InsufficientCapacityException,
|
||||
public void deploy(String reservationId, String caller, Map<VirtualMachineProfile.Param, Object> params, boolean deployOnGivenHost) throws InsufficientCapacityException,
|
||||
ResourceUnavailableException {
|
||||
manager.deployVirtualMachine(reservationId, this.vmEntityVO, caller, params);
|
||||
manager.deployVirtualMachine(reservationId, this.vmEntityVO, caller, params, deployOnGivenHost);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -518,6 +518,9 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
static final ConfigKey<Integer> VmIpFetchTaskWorkers = new ConfigKey<Integer>("Advanced", Integer.class, "externaldhcp.vmipfetchtask.workers", "10",
|
||||
"number of worker threads for vm ip fetch task ", true);
|
||||
|
||||
static final ConfigKey<Boolean> AllowDeployVmIfGivenHostFails = new ConfigKey<Boolean>("Advanced", Boolean.class, "allow.deploy.vm.if.deploy.on.given.host.fails", "false",
|
||||
"allow vm to deploy on different host if vm fails to deploy on the given host ", true);
|
||||
|
||||
|
||||
@Override
|
||||
public UserVmVO getVirtualMachine(long vmId) {
|
||||
|
|
@ -4099,9 +4102,13 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
}
|
||||
|
||||
DataCenterDeployment plan = null;
|
||||
boolean deployOnGivenHost = false;
|
||||
if (destinationHost != null) {
|
||||
s_logger.debug("Destination Host to deploy the VM is specified, specifying a deployment plan to deploy the VM");
|
||||
plan = new DataCenterDeployment(vm.getDataCenterId(), destinationHost.getPodId(), destinationHost.getClusterId(), destinationHost.getId(), null, null);
|
||||
if (!AllowDeployVmIfGivenHostFails.value()) {
|
||||
deployOnGivenHost = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Set parameters
|
||||
|
|
@ -4149,7 +4156,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
}
|
||||
|
||||
String reservationId = vmEntity.reserve(planner, plan, new ExcludeList(), Long.toString(callerUser.getId()));
|
||||
vmEntity.deploy(reservationId, Long.toString(callerUser.getId()), params);
|
||||
vmEntity.deploy(reservationId, Long.toString(callerUser.getId()), params, deployOnGivenHost);
|
||||
|
||||
Pair<UserVmVO, Map<VirtualMachineProfile.Param, Object>> vmParamPair = new Pair(vm, params);
|
||||
if (vm != null && vm.isUpdateParameters()) {
|
||||
|
|
@ -5903,7 +5910,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
|
||||
@Override
|
||||
public ConfigKey<?>[] getConfigKeys() {
|
||||
return new ConfigKey<?>[] {EnableDynamicallyScaleVm, AllowUserExpungeRecoverVm, VmIpFetchWaitInterval, VmIpFetchTrialMax, VmIpFetchThreadPoolMax, VmIpFetchTaskWorkers};
|
||||
return new ConfigKey<?>[] {EnableDynamicallyScaleVm, AllowUserExpungeRecoverVm, VmIpFetchWaitInterval, VmIpFetchTrialMax, VmIpFetchThreadPoolMax,
|
||||
VmIpFetchTaskWorkers, AllowDeployVmIfGivenHostFails};
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
Loading…
Reference in New Issue