Merge "Fix ssh _get_power_status as it returned status for wrong node"

This commit is contained in:
Jenkins 2015-01-20 16:15:05 +00:00 committed by Gerrit Code Review
commit 6abb3eb43b
2 changed files with 24 additions and 2 deletions

View File

@ -349,10 +349,18 @@ def _get_power_status(ssh_obj, driver_info):
driver_info['cmd_set']['list_running'])
cmd_to_exec = cmd_to_exec.replace('{_NodeName_}', node_name)
running_list = _ssh_execute(ssh_obj, cmd_to_exec)
# Command should return a list of running vms. If the current node is
# not listed then we can assume it is not powered on.
quoted_node_name = '"%s"' % node_name
for node in running_list:
if not node:
continue
if node_name in node:
# 'node' here is an formatted output from the virt cli's. The
# node name is always quoted but can contain other information.
# vbox returns '"NodeName" {b43c4982-110c-4c29-9325-d5f41b053513}'
# so we must use the 'in' comparison here and not '=='
if quoted_node_name in node:
power_state = states.POWER_ON
break
if not power_state:

View File

@ -297,6 +297,19 @@ class SSHPrivateMethodsTestCase(db_base.DbTestCase):
exec_ssh_mock.assert_called_once_with(
self.sshclient, ssh_cmd)
@mock.patch.object(processutils, 'ssh_execute')
@mock.patch.object(ssh, '_get_hosts_name_for_node')
def test__get_power_status_correct_node(self, get_hosts_name_mock,
exec_ssh_mock):
# Bug: #1397834 test that get_power_status return status of
# baremeta_1 (off) and not baremetal_11 (on)
info = ssh._parse_driver_info(self.node)
exec_ssh_mock.return_value = ('"baremetal_11"\n"seed"\n', '')
get_hosts_name_mock.return_value = "baremetal_1"
pstate = ssh._get_power_status(self.sshclient, info)
self.assertEqual(states.POWER_OFF, pstate)
@mock.patch.object(processutils, 'ssh_execute')
def test__get_hosts_name_for_node_match(self, exec_ssh_mock):
info = ssh._parse_driver_info(self.node)
@ -916,7 +929,8 @@ class SSHDriverTestCase(db_base.DbTestCase):
nodename = 'fakevm'
mock_h.return_value = nodename
mock_get_conn.return_value = self.sshclient
mock_exc.return_value = (nodename, '')
# list_running quotes names
mock_exc.return_value = ('"%s"' % nodename, '')
with task_manager.acquire(self.context, self.node.uuid) as task:
task.node['driver_info']['ssh_virt_type'] = 'vmware'
power_state = self.driver.power.get_power_state(task)