mirror of https://github.com/apache/cloudstack.git
CLOUDSTACK-7113: Ability to reset password when Router VM is stopped
With this improvement password reset also happens when router is in stopped state on resetPasswordCmd and restoreVM
This commit is contained in:
parent
733a7ba8c1
commit
0069037573
|
|
@ -74,6 +74,7 @@ import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy;
|
|||
import com.cloud.network.lb.LoadBalancingRulesManager;
|
||||
import com.cloud.network.router.VirtualRouter.Role;
|
||||
import com.cloud.network.router.VpcVirtualNetworkApplianceManager;
|
||||
import com.cloud.network.router.VirtualRouter;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.network.rules.LbStickinessMethod;
|
||||
import com.cloud.network.rules.LbStickinessMethod.StickinessMethodType;
|
||||
|
|
@ -89,6 +90,7 @@ import com.cloud.user.AccountManager;
|
|||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.component.AdapterBase;
|
||||
import com.cloud.utils.db.QueryBuilder;
|
||||
import com.cloud.utils.crypt.DBEncryptionUtil;
|
||||
import com.cloud.utils.db.SearchCriteria.Op;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.vm.DomainRouterVO;
|
||||
|
|
@ -681,7 +683,23 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
|
|||
@SuppressWarnings("unchecked")
|
||||
VirtualMachineProfile uservm = vm;
|
||||
|
||||
return _routerMgr.savePasswordToRouter(network, nic, uservm, routers);
|
||||
// If any router is running then send save password command otherwise save the password in DB
|
||||
for (VirtualRouter router : routers) {
|
||||
if (router.getState() == State.Running) {
|
||||
return _routerMgr.savePasswordToRouter(network, nic, uservm, routers);
|
||||
}
|
||||
}
|
||||
String password = (String) uservm.getParameter(VirtualMachineProfile.Param.VmPassword);
|
||||
String password_encrypted = DBEncryptionUtil.encrypt(password);
|
||||
UserVmVO userVmVO = _userVmDao.findById(vm.getId());
|
||||
|
||||
_userVmDao.loadDetails(userVmVO);
|
||||
userVmVO.setDetail("password", password_encrypted);
|
||||
_userVmDao.saveDetails(userVmVO);
|
||||
|
||||
userVmVO.setUpdateParameters(true);
|
||||
_userVmDao.update(userVmVO.getId(), userVmVO);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -261,6 +261,7 @@ import com.cloud.utils.exception.CloudRuntimeException;
|
|||
import com.cloud.utils.exception.ExecutionException;
|
||||
import com.cloud.utils.fsm.NoTransitionException;
|
||||
import com.cloud.utils.net.NetUtils;
|
||||
import com.cloud.utils.crypt.DBEncryptionUtil;
|
||||
import com.cloud.vm.VirtualMachine.State;
|
||||
import com.cloud.vm.dao.InstanceGroupDao;
|
||||
import com.cloud.vm.dao.InstanceGroupVMMapDao;
|
||||
|
|
@ -3439,7 +3440,11 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
|
||||
String password = "saved_password";
|
||||
if (template.getEnablePassword()) {
|
||||
password = generateRandomPassword();
|
||||
if (vm.getDetail("password") != null) {
|
||||
password = DBEncryptionUtil.decrypt(vm.getDetail("password"));
|
||||
} else {
|
||||
password = generateRandomPassword();
|
||||
}
|
||||
}
|
||||
|
||||
if (!validPassword(password)) {
|
||||
|
|
@ -3479,6 +3484,9 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
if (template.getEnablePassword()) {
|
||||
vm.setPassword((String)vmParamPair.second().get(VirtualMachineProfile.Param.VmPassword));
|
||||
vm.setUpdateParameters(false);
|
||||
if (vm.getDetail("password") != null) {
|
||||
_vmDetailsDao.remove(_vmDetailsDao.findDetail(vm.getId(), "password").getId());
|
||||
}
|
||||
_vmDao.update(vm.getId(), vm);
|
||||
}
|
||||
}
|
||||
|
|
@ -4721,8 +4729,11 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
}
|
||||
}
|
||||
|
||||
Map<VirtualMachineProfile.Param, Object> params = null;
|
||||
String password = null;
|
||||
|
||||
if (template.getEnablePassword()) {
|
||||
String password = generateRandomPassword();
|
||||
password = generateRandomPassword();
|
||||
boolean result = resetVMPasswordInternal(vmId, password);
|
||||
if (result) {
|
||||
vm.setPassword(password);
|
||||
|
|
@ -4738,7 +4749,25 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
|
||||
if (needRestart) {
|
||||
try {
|
||||
_itMgr.start(vm.getUuid(), null);
|
||||
if (vm.getDetail("password") != null) {
|
||||
params = new HashMap<VirtualMachineProfile.Param, Object>();
|
||||
params.put(VirtualMachineProfile.Param.VmPassword, password);
|
||||
}
|
||||
_itMgr.start(vm.getUuid(), params);
|
||||
vm = _vmDao.findById(vmId);
|
||||
if (template.getEnablePassword()) {
|
||||
// this value is not being sent to the backend; need only for api
|
||||
// display purposes
|
||||
vm.setPassword(password);
|
||||
if (vm.isUpdateParameters()) {
|
||||
vm.setUpdateParameters(false);
|
||||
_vmDao.loadDetails(vm);
|
||||
if (vm.getDetail("password") != null) {
|
||||
_vmDetailsDao.remove(_vmDetailsDao.findDetail(vm.getId(), "password").getId());
|
||||
}
|
||||
_vmDao.update(vm.getId(), vm);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
s_logger.debug("Unable to start VM " + vm.getUuid(), e);
|
||||
CloudRuntimeException ex = new CloudRuntimeException("Unable to start VM with specified id" + e.getMessage());
|
||||
|
|
|
|||
Loading…
Reference in New Issue