CS-16222: send password reset command only to the element responsible for the userdata service in network

Reviewed-by: Sheng Yang
This commit is contained in:
Alena Prokharchyk 2012-08-31 16:26:37 -07:00
parent 19a3037325
commit 51cc301fef
5 changed files with 19 additions and 18 deletions

View File

@ -187,7 +187,7 @@ public interface NetworkManager extends NetworkService {
Nic getDefaultNic(long vmId); Nic getDefaultNic(long vmId);
List<? extends UserDataServiceProvider> getPasswordResetElements(); UserDataServiceProvider getPasswordResetProvider(Network network);
boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId); boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId);

View File

@ -4298,15 +4298,15 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
} }
@Override @Override
public List<? extends UserDataServiceProvider> getPasswordResetElements() { public UserDataServiceProvider getPasswordResetProvider(Network network) {
List<UserDataServiceProvider> elements = new ArrayList<UserDataServiceProvider>(); String passwordProvider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.UserData);
for (NetworkElement element : _networkElements) {
if (element instanceof UserDataServiceProvider) { if (passwordProvider == null) {
UserDataServiceProvider e = (UserDataServiceProvider) element; s_logger.debug("Network " + network + " doesn't support service " + Service.UserData.getName());
elements.add(e); return null;
}
} }
return elements;
return (UserDataServiceProvider)getElementImplementingProvider(passwordProvider);
} }
@Override @Override

View File

@ -421,6 +421,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
userVm.setDetail("Encrypted.Password", encryptedPasswd); userVm.setDetail("Encrypted.Password", encryptedPasswd);
_vmDao.saveDetails(userVm); _vmDao.saveDetails(userVm);
} }
} else {
throw new CloudRuntimeException("Failed to reset password for the virtual machine ");
} }
return userVm; return userVm;
@ -448,15 +450,14 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
VirtualMachineProfile<VMInstanceVO> vmProfile = new VirtualMachineProfileImpl<VMInstanceVO>(vmInstance); VirtualMachineProfile<VMInstanceVO> vmProfile = new VirtualMachineProfileImpl<VMInstanceVO>(vmInstance);
vmProfile.setParameter(VirtualMachineProfile.Param.VmPassword, password); vmProfile.setParameter(VirtualMachineProfile.Param.VmPassword, password);
List<? extends UserDataServiceProvider> elements = _networkMgr.getPasswordResetElements(); UserDataServiceProvider element = _networkMgr.getPasswordResetProvider(defaultNetwork);
if (element == null) {
boolean result = true; throw new CloudRuntimeException("Can't find network element for " + Service.UserData.getName() +
for (UserDataServiceProvider element : elements) { " provider needed for password reset");
if (!element.savePassword(defaultNetwork, defaultNicProfile, vmProfile)) {
result = false;
}
} }
boolean result = element.savePassword(defaultNetwork, defaultNicProfile, vmProfile);
// Need to reboot the virtual machine so that the password gets redownloaded from the DomR, and reset on the VM // Need to reboot the virtual machine so that the password gets redownloaded from the DomR, and reset on the VM
if (!result) { if (!result) {
s_logger.debug("Failed to reset password for the virutal machine; no need to reboot the vm"); s_logger.debug("Failed to reset password for the virutal machine; no need to reboot the vm");

View File

@ -610,7 +610,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
} }
@Override @Override
public List<? extends UserDataServiceProvider> getPasswordResetElements() { public UserDataServiceProvider getPasswordResetProvider(Network network) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }

View File

@ -805,7 +805,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{
* @see com.cloud.network.NetworkManager#getPasswordResetElements() * @see com.cloud.network.NetworkManager#getPasswordResetElements()
*/ */
@Override @Override
public List<? extends UserDataServiceProvider> getPasswordResetElements() { public UserDataServiceProvider getPasswordResetProvider(Network network) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }