Merge "Check connectivity in SSH driver 'validate' method"

This commit is contained in:
Jenkins 2014-01-02 13:41:58 +00:00 committed by Gerrit Code Review
commit 2874979086
2 changed files with 26 additions and 2 deletions

View File

@ -262,12 +262,19 @@ class SSHPower(base.PowerInterface):
"""
def validate(self, node):
"""Check that node['driver_info'] contains the requisite fields.
"""Check that node 'driver_info' is valid.
Check that node 'driver_info' contains the requisite fields and SSH
connection can be established.
:param node: Single node object.
:raises: InvalidParameterValue
"""
_parse_driver_info(node)
try:
_get_connection(node)
except exception.SSHConnectFailed as e:
raise exception.InvalidParameterValue(_("SSH connection cannot"
" be established: %s") % e)
def get_power_state(self, task, node):
"""Get the current power state.

View File

@ -20,6 +20,7 @@ import paramiko
from ironic.common import exception
from ironic.common import states
from ironic.common import utils
from ironic.conductor import task_manager
from ironic.db import api as dbapi
from ironic.drivers.modules import ssh
@ -460,6 +461,22 @@ class SSHDriverTestCase(db_base.DbTestCase):
node_macs = ssh._get_nodes_mac_addresses(task, self.node)
self.assertEqual(node_macs, ['aa:bb:cc', 'dd:ee:ff'])
def test__validate_info_ssh_connect_failed(self):
info = ssh._parse_driver_info(self.node)
self.get_conn_patcher.stop()
self.get_conn_mock = None
with mock.patch.object(utils, 'ssh_connect') \
as ssh_connect_mock:
ssh_connect_mock.side_effect = exception.SSHConnectFailed(
host='fake')
with task_manager.acquire(self.context, [info['uuid']],
shared=False) as task:
self.assertRaises(exception.InvalidParameterValue,
task.resources[0].driver.power.validate,
self.node)
ssh_connect_mock.assert_called_once()
def test_reboot_good(self):
info = ssh._parse_driver_info(self.node)
info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]