mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-02 11:52:28 +01:00
CLOUDSTACK-7194: deployVm Api, "hypervisor" parameter:
* is respected only when vm is deployed from ISO, or hypervisorType is not set on the template record * if parameter passed when vm is deployed from template having hypervisor info set, validate that these 2 parameters are the same instead of silently defaulting the final value to the one set on the template
This commit is contained in:
parent
0fe1d4bb27
commit
05d056bb90
@ -128,7 +128,8 @@ public class DeployVMCmd extends BaseAsyncCreateCustomIdCmd {
|
||||
@Parameter(name = ApiConstants.GROUP, type = CommandType.STRING, description = "an optional group for the virtual machine")
|
||||
private String group;
|
||||
|
||||
@Parameter(name = ApiConstants.HYPERVISOR, type = CommandType.STRING, description = "the hypervisor on which to deploy the virtual machine")
|
||||
@Parameter(name = ApiConstants.HYPERVISOR, type = CommandType.STRING, description = "the hypervisor on which to deploy the virtual machine. "
|
||||
+ "The parameter is respected only when hypervisor info is not set on the ISO/Template passed to the call")
|
||||
private String hypervisor;
|
||||
|
||||
@Parameter(name = ApiConstants.USER_DATA, type = CommandType.STRING, description = "an optional binary data that can be sent to the virtual machine upon a successful deployment. This binary data must be base64 encoded before adding it to the request. Using HTTP GET (via querystring), you can send up to 2KB of data after base64 encoding. Using HTTP POST(via POST body), you can send up to 32K of data after base64 encoding.", length = 32768)
|
||||
|
||||
@ -2716,7 +2716,17 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
}
|
||||
}
|
||||
|
||||
if (template.getHypervisorType() != null && template.getHypervisorType() != HypervisorType.BareMetal) {
|
||||
HypervisorType hypervisorType = null;
|
||||
if (template.getHypervisorType() == null || template.getHypervisorType() == HypervisorType.None) {
|
||||
hypervisorType = hypervisor;
|
||||
} else {
|
||||
if (hypervisor != null && hypervisor != HypervisorType.None && hypervisor != template.getHypervisorType()) {
|
||||
throw new InvalidParameterValueException("Hypervisor passed to the deployVm call, is different from the hypervisor type of the template");
|
||||
}
|
||||
hypervisorType = template.getHypervisorType();
|
||||
}
|
||||
|
||||
if (hypervisorType != HypervisorType.BareMetal) {
|
||||
// check if we have available pools for vm deployment
|
||||
long availablePools = _storagePoolDao.countPoolsByStatus(StoragePoolStatus.Up);
|
||||
if (availablePools < 1) {
|
||||
@ -2892,15 +2902,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
|
||||
checkIfHostNameUniqueInNtwkDomain(hostName, networkList);
|
||||
|
||||
HypervisorType hypervisorType = null;
|
||||
if (template.getHypervisorType() == null || template.getHypervisorType() == HypervisorType.None) {
|
||||
hypervisorType = hypervisor;
|
||||
} else {
|
||||
hypervisorType = template.getHypervisorType();
|
||||
}
|
||||
|
||||
UserVmVO vm = commitUserVm(zone, template, hostName, displayName, owner, diskOfferingId, diskSize, userData, hypervisor, caller, isDisplayVm, keyboard, accountId,
|
||||
offering, isIso, sshPublicKey, networkNicMap, id, instanceName, uuidName, hypervisorType, customParameters);
|
||||
UserVmVO vm = commitUserVm(zone, template, hostName, displayName, owner, diskOfferingId, diskSize, userData, caller, isDisplayVm, keyboard, accountId, offering,
|
||||
isIso, sshPublicKey, networkNicMap, id, instanceName, uuidName, hypervisorType, customParameters);
|
||||
|
||||
// Assign instance to the group
|
||||
try {
|
||||
@ -2957,10 +2960,9 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
}
|
||||
|
||||
private UserVmVO commitUserVm(final DataCenter zone, final VirtualMachineTemplate template, final String hostName, final String displayName, final Account owner,
|
||||
final Long diskOfferingId, final Long diskSize, final String userData, final HypervisorType hypervisor, final Account caller, final Boolean isDisplayVm,
|
||||
final String keyboard, final long accountId, final ServiceOfferingVO offering, final boolean isIso, final String sshPublicKey,
|
||||
final LinkedHashMap<String, NicProfile> networkNicMap, final long id, final String instanceName, final String uuidName, final HypervisorType hypervisorType,
|
||||
final Map<String, String> customParameters) throws InsufficientCapacityException {
|
||||
final Long diskOfferingId, final Long diskSize, final String userData, final Account caller, final Boolean isDisplayVm, final String keyboard,
|
||||
final long accountId, final ServiceOfferingVO offering, final boolean isIso, final String sshPublicKey, final LinkedHashMap<String, NicProfile> networkNicMap,
|
||||
final long id, final String instanceName, final String uuidName, final HypervisorType hypervisorType, final Map<String, String> customParameters) throws InsufficientCapacityException {
|
||||
return Transaction.execute(new TransactionCallbackWithException<UserVmVO, InsufficientCapacityException>() {
|
||||
@Override
|
||||
public UserVmVO doInTransaction(TransactionStatus status) throws InsufficientCapacityException {
|
||||
@ -2993,8 +2995,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
rootDiskSize = Long.parseLong(customParameters.get("rootdisksize"));
|
||||
|
||||
// only KVM supports rootdisksize override
|
||||
if (hypervisor != HypervisorType.KVM) {
|
||||
throw new InvalidParameterValueException("Hypervisor " + hypervisor + " does not support rootdisksize override");
|
||||
if (hypervisorType != HypervisorType.KVM) {
|
||||
throw new InvalidParameterValueException("Hypervisor " + hypervisorType + " does not support rootdisksize override");
|
||||
}
|
||||
|
||||
// rotdisksize must be larger than template
|
||||
@ -3064,10 +3066,10 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
|
||||
if (isIso) {
|
||||
_orchSrvc.createVirtualMachineFromScratch(vm.getUuid(), Long.toString(owner.getAccountId()), vm.getIsoId().toString(), hostName, displayName,
|
||||
hypervisor.name(), guestOSCategory.getName(), offering.getCpu(), offering.getSpeed(), offering.getRamSize(), diskSize, computeTags, rootDiskTags,
|
||||
hypervisorType.name(), guestOSCategory.getName(), offering.getCpu(), offering.getSpeed(), offering.getRamSize(), diskSize, computeTags, rootDiskTags,
|
||||
networkNicMap, plan);
|
||||
} else {
|
||||
_orchSrvc.createVirtualMachine(vm.getUuid(), Long.toString(owner.getAccountId()), Long.toString(template.getId()), hostName, displayName, hypervisor.name(),
|
||||
_orchSrvc.createVirtualMachine(vm.getUuid(), Long.toString(owner.getAccountId()), Long.toString(template.getId()), hostName, displayName, hypervisorType.name(),
|
||||
offering.getCpu(), offering.getSpeed(), offering.getRamSize(), diskSize, computeTags, rootDiskTags, networkNicMap, plan, rootDiskSize);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user