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);
List<? extends UserDataServiceProvider> getPasswordResetElements();
UserDataServiceProvider getPasswordResetProvider(Network network);
boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId);

View File

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

View File

@ -421,6 +421,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
userVm.setDetail("Encrypted.Password", encryptedPasswd);
_vmDao.saveDetails(userVm);
}
} else {
throw new CloudRuntimeException("Failed to reset password for the virtual machine ");
}
return userVm;
@ -448,14 +450,13 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
VirtualMachineProfile<VMInstanceVO> vmProfile = new VirtualMachineProfileImpl<VMInstanceVO>(vmInstance);
vmProfile.setParameter(VirtualMachineProfile.Param.VmPassword, password);
List<? extends UserDataServiceProvider> elements = _networkMgr.getPasswordResetElements();
UserDataServiceProvider element = _networkMgr.getPasswordResetProvider(defaultNetwork);
if (element == null) {
throw new CloudRuntimeException("Can't find network element for " + Service.UserData.getName() +
" provider needed for password reset");
}
boolean result = true;
for (UserDataServiceProvider element : elements) {
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
if (!result) {

View File

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

View File

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