From 5fade1ff43471a850f28a92073dfbbee6dcfeff7 Mon Sep 17 00:00:00 2001 From: Edison Su Date: Thu, 2 Feb 2012 15:16:17 -0800 Subject: [PATCH] bug 13416: backport patch from master to 2.2.14, need to restart cloud-agent on kvm host if cancelmaitaineance command is send status 13416: resolved fixed Reviewed-by: frank --- .../cloud/agent/manager/AgentManagerImpl.java | 24 ++++++++++++++++--- .../kvm/discoverer/KvmServerDiscoverer.java | 9 +++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java index 77d9854415f..5280bcef76f 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -154,6 +154,8 @@ import com.cloud.utils.nio.HandlerFactory; import com.cloud.utils.nio.Link; import com.cloud.utils.nio.NioServer; import com.cloud.utils.nio.Task; +import com.cloud.utils.ssh.SSHCmdHelper; +import com.cloud.utils.ssh.sshException; import com.cloud.utils.time.InaccurateClock; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine.State; @@ -1569,10 +1571,26 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { } } + //for kvm, need to log into kvm host, restart cloud-agent if (host.getHypervisorType() == HypervisorType.KVM) { - MaintainCommand cmd = new MaintainCommand(); - cmd.setMaintain(false); - easySend(hostId, cmd); + _hostDao.loadDetails(host); + String password = host.getDetail("password"); + String username = host.getDetail("username"); + if (password == null || username == null) { + s_logger.debug("Can't find password/username"); + return false; + } + com.trilead.ssh2.Connection connection = SSHCmdHelper.acquireAuthorizedConnection(host.getPrivateIpAddress(), 22, username, password); + if (connection == null) { + s_logger.debug("Failed to connect to host: " + host.getPrivateIpAddress()); + return false; + } + + try { + SSHCmdHelper.sshExecuteCmdOneShot(connection, "service cloud-agent restart"); + } catch (sshException e) { + return false; + } } disconnect(hostId, Event.ResetRequested, false); return true; diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java index 8d761da4cc8..1ae591c0f16 100755 --- a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java +++ b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java @@ -173,6 +173,8 @@ public class KvmServerDiscoverer extends DiscovererBase implements Discoverer, _clusterDao.update(clusterId, cluster); } + + String parameters = " -m " + _hostIp + " -z " + dcId + " -p " + podId + " -c " + clusterId + " -g " + guid + " -a"; if (_kvmPublicNic != null) { @@ -204,6 +206,13 @@ public class KvmServerDiscoverer extends DiscovererBase implements Discoverer, if (connectedHost == null) return null; + //save user name and password + _hostDao.loadDetails(connectedHost); + Map hostDetails = connectedHost.getDetails(); + hostDetails.put("password", password); + hostDetails.put("username", username); + _hostDao.saveDetails(connectedHost); + details.put("guid", guidWithTail); return resources; } catch (DiscoveredWithErrorException e){