diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 159826b2e5b2..bec36ff7ca6d 100644 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -775,20 +775,26 @@ public boolean savePassword(final Network network, final NicProfile nic, final V } final VirtualMachineProfile uservm = vm; - final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId()); final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO); - // If any router is running then send save password command otherwise - // save the password in DB + if (!network.isRedundant()) { + return networkTopology.savePasswordToRouter(network, nic, uservm, routers.get(0)); + } + for (final VirtualRouter router : routers) { - if (router.getState() == State.Running) { - return networkTopology.savePasswordToRouter(network, nic, uservm, router); - } + if (router.getState() == State.Running && router.getRedundantState() == VirtualRouter.RedundantState.MASTER) { + return networkTopology.savePasswordToRouter(network, nic, uservm, router); + } } + return savePassword(uservm); + } + + private boolean savePassword(VirtualMachineProfile uservm) { + //save password final String password = (String) uservm.getParameter(VirtualMachineProfile.Param.VmPassword); final String password_encrypted = DBEncryptionUtil.encrypt(password); - final UserVmVO userVmVO = _userVmDao.findById(vm.getId()); + final UserVmVO userVmVO = _userVmDao.findById(uservm.getId()); _userVmDao.loadDetails(userVmVO); userVmVO.setDetail("password", password_encrypted); @@ -796,7 +802,6 @@ public boolean savePassword(final Network network, final NicProfile nic, final V userVmVO.setUpdateParameters(true); _userVmDao.update(userVmVO.getId(), userVmVO); - return true; } diff --git a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java index b5283dacfeba..025c36d79bb8 100644 --- a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java +++ b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java @@ -61,13 +61,17 @@ public class AdvancedNetworkVisitor extends BasicNetworkVisitor { @Override public boolean visit(final UserdataPwdRules userdata) throws ResourceUnavailableException { final VirtualRouter router = userdata.getRouter(); - final Commands commands = new Commands(Command.OnError.Stop); final VirtualMachineProfile profile = userdata.getProfile(); final NicVO nicVo = userdata.getNicVo(); final UserVmVO userVM = userdata.getUserVM(); - _commandSetupHelper.createPasswordCommand(router, profile, nicVo, commands); + if (router.getIsRedundantRouter() && router.getVpcId() == null && router.getRedundantState() == VirtualRouter.RedundantState.MASTER) { + _commandSetupHelper.createPasswordCommand(router, profile, nicVo, commands); + }else if (!router.getIsRedundantRouter() || router.getVpcId()!= null){ + _commandSetupHelper.createPasswordCommand(router, profile, nicVo, commands); + } + _commandSetupHelper.createVmDataCommand(router, userVM, nicVo, userVM.getDetail("SSH.PublicKey"), commands); return _networkGeneralHelper.sendCommandsToRouter(router, commands);