diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index f36c851e5bb3..ea2d00e85fa0 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -5795,7 +5795,8 @@ public Pair> startVirtualMach } // Set parameters - Map params = null; + Map params = new HashMap<>(); + params.putAll(additionalParams); if (vm.isUpdateParameters()) { _vmDao.loadDetails(vm); @@ -5809,18 +5810,19 @@ public Pair> startVirtualMach // use it to encrypt & save the vm password encryptAndStorePassword(vm, password); - params = createParameterInParameterMap(params, additionalParams, VirtualMachineProfile.Param.VmPassword, password); + // overwrite VmPassword + params = createParameterInParameterMap(params, VirtualMachineProfile.Param.VmPassword, password); } if(additionalParams.containsKey(VirtualMachineProfile.Param.BootIntoSetup)) { if (! HypervisorType.VMware.equals(vm.getHypervisorType())) { throw new InvalidParameterValueException(ApiConstants.BOOT_INTO_SETUP + " makes no sense for " + vm.getHypervisorType()); } + + //overwrite BootIntoSetup Object paramValue = additionalParams.get(VirtualMachineProfile.Param.BootIntoSetup); - if (logger.isTraceEnabled()) { - logger.trace("It was specified whether to enter setup mode: " + paramValue.toString()); - } - params = createParameterInParameterMap(params, additionalParams, VirtualMachineProfile.Param.BootIntoSetup, paramValue); + logger.trace("It was specified whether to enter setup mode: {}", paramValue.toString()); + params = createParameterInParameterMap(params, VirtualMachineProfile.Param.BootIntoSetup, paramValue); } VirtualMachineEntity vmEntity = _orchSrvc.getVirtualMachine(vm.getUuid()); @@ -5888,20 +5890,18 @@ protected String getCurrentVmPasswordOrDefineNewPassword(String newPassword, Use return password; } - private Map createParameterInParameterMap(Map params, Map parameterMap, VirtualMachineProfile.Param parameter, + /** + * Create or overwrite a parameter in the list + * @param params the list of parameters + * @param parameter the parameter to creat/overwrite + * @param parameterValue the value to give to the parameter + * @return the resulting updated list of parameters + */ + private Map createParameterInParameterMap( + Map params, + VirtualMachineProfile.Param parameter, Object parameterValue) { - if (logger.isTraceEnabled()) { - logger.trace(String.format("createParameterInParameterMap(%s, %s)", parameter, parameterValue)); - } - if (params == null) { - if (logger.isTraceEnabled()) { - logger.trace("creating new Parameter map"); - } - params = new HashMap<>(); - if (parameterMap != null) { - params.putAll(parameterMap); - } - } + logger.trace("createParameterInParameterMap({}, {})", parameter, parameterValue); params.put(parameter, parameterValue); return params; }