Merge "Correct vmware ssh power manager"
This commit is contained in:
@@ -341,13 +341,14 @@ def _get_power_status(ssh_obj, driver_info):
|
||||
|
||||
"""
|
||||
power_state = None
|
||||
cmd_to_exec = "%s %s" % (driver_info['cmd_set']['base_cmd'],
|
||||
driver_info['cmd_set']['list_running'])
|
||||
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.
|
||||
node_name = _get_hosts_name_for_node(ssh_obj, driver_info)
|
||||
if node_name:
|
||||
# Get a list of vms running on the host. If the command supports
|
||||
# it, explicitly specify the desired node."
|
||||
cmd_to_exec = "%s %s" % (driver_info['cmd_set']['base_cmd'],
|
||||
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)
|
||||
for node in running_list:
|
||||
if not node:
|
||||
continue
|
||||
|
||||
@@ -273,8 +273,6 @@ class SSHPrivateMethodsTestCase(db_base.DbTestCase):
|
||||
|
||||
info = ssh._parse_driver_info(self.node)
|
||||
|
||||
exec_ssh_mock.return_value = (
|
||||
'"NodeName" {b43c4982-110c-4c29-9325-d5f41b053513}', '')
|
||||
info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]
|
||||
get_hosts_name_mock.return_value = None
|
||||
self.assertRaises(exception.NodeNotFound,
|
||||
@@ -282,11 +280,8 @@ class SSHPrivateMethodsTestCase(db_base.DbTestCase):
|
||||
self.sshclient,
|
||||
info)
|
||||
|
||||
ssh_cmd = "%s %s" % (info['cmd_set']['base_cmd'],
|
||||
info['cmd_set']['list_running'])
|
||||
|
||||
exec_ssh_mock.assert_called_once_with(self.sshclient, ssh_cmd)
|
||||
get_hosts_name_mock.assert_called_once_with(self.sshclient, info)
|
||||
exec_ssh_mock.assert_not_called()
|
||||
|
||||
@mock.patch.object(processutils, 'ssh_execute')
|
||||
def test__get_power_status_exception(self, exec_ssh_mock):
|
||||
@@ -298,7 +293,7 @@ class SSHPrivateMethodsTestCase(db_base.DbTestCase):
|
||||
self.sshclient,
|
||||
info)
|
||||
ssh_cmd = "%s %s" % (info['cmd_set']['base_cmd'],
|
||||
info['cmd_set']['list_running'])
|
||||
info['cmd_set']['list_all'])
|
||||
exec_ssh_mock.assert_called_once_with(
|
||||
self.sshclient, ssh_cmd)
|
||||
|
||||
@@ -929,6 +924,24 @@ class SSHDriverTestCase(db_base.DbTestCase):
|
||||
self.assertEqual(expected,
|
||||
self.driver.management.get_boot_device(task))
|
||||
|
||||
@mock.patch.object(ssh, '_get_connection')
|
||||
@mock.patch.object(ssh, '_get_hosts_name_for_node')
|
||||
@mock.patch.object(ssh, '_ssh_execute')
|
||||
def test_get_power_state_vmware(self, mock_exc, mock_h, mock_get_conn):
|
||||
# To see replacing {_NodeName_} in vmware's list_running
|
||||
nodename = 'fakevm'
|
||||
mock_h.return_value = nodename
|
||||
mock_get_conn.return_value = self.sshclient
|
||||
mock_exc.return_value = (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)
|
||||
self.assertEqual(states.POWER_ON, power_state)
|
||||
expected_cmd = ("LC_ALL=C /bin/vim-cmd vmsvc/power.getstate "
|
||||
"%(node)s | grep 'Powered on' >/dev/null && "
|
||||
"echo '\"%(node)s\"' || true") % {'node': nodename}
|
||||
mock_exc.assert_called_once_with(mock.ANY, expected_cmd)
|
||||
|
||||
def test_management_interface_validate_good(self):
|
||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||
task.driver.management.validate(task)
|
||||
|
||||
Reference in New Issue
Block a user