Remove 'node' parameter from the VendorPassthru interface
The node is redundant since the node object is an attribute of the task object. Partial-Bug: #1312632 Change-Id: I14f921023d020eb5a0b8caf1b3c5fa6f248b9ff6
This commit is contained in:
parent
6be126ec98
commit
73b02ec9b1
|
@ -273,11 +273,11 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
driver=task.node.driver,
|
||||
extension='vendor passthru')
|
||||
|
||||
task.driver.vendor.validate(task, task.node, method=driver_method,
|
||||
task.driver.vendor.validate(task, method=driver_method,
|
||||
**info)
|
||||
task.spawn_after(self._spawn_worker,
|
||||
task.driver.vendor.vendor_passthru, task,
|
||||
task.node, method=driver_method, **info)
|
||||
method=driver_method, **info)
|
||||
|
||||
@messaging.expected_exceptions(exception.InvalidParameterValue,
|
||||
exception.UnsupportedDriverExtension,
|
||||
|
|
|
@ -22,18 +22,17 @@ LOG = log.getLogger(__name__)
|
|||
|
||||
|
||||
@task_manager.require_exclusive_lock
|
||||
def node_set_boot_device(task, node, device, persistent=False):
|
||||
def node_set_boot_device(task, device, persistent=False):
|
||||
"""Set the boot device for a node.
|
||||
|
||||
:param task: a TaskManager instance.
|
||||
:param node: The Node.
|
||||
:param device: Boot device. Values are vendor-specific.
|
||||
:param persistent: Whether to set next-boot, or make the change
|
||||
permanent. Default: False.
|
||||
|
||||
"""
|
||||
try:
|
||||
task.driver.vendor.vendor_passthru(task, node,
|
||||
task.driver.vendor.vendor_passthru(task,
|
||||
device=device,
|
||||
persistent=persistent,
|
||||
method='set_boot_device')
|
||||
|
|
|
@ -316,11 +316,10 @@ class VendorInterface(object):
|
|||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def validate(self, task, node, **kwargs):
|
||||
def validate(self, task, **kwargs):
|
||||
"""Validate vendor-specific actions.
|
||||
|
||||
:param task: a task from TaskManager.
|
||||
:param node: a single Node.
|
||||
:param kwargs: info for action.
|
||||
:raises: UnsupportedDriverExtension if 'method' can not be mapped to
|
||||
the supported interfaces.
|
||||
|
@ -328,11 +327,10 @@ class VendorInterface(object):
|
|||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def vendor_passthru(self, task, node, **kwargs):
|
||||
def vendor_passthru(self, task, **kwargs):
|
||||
"""Receive requests for vendor-specific actions.
|
||||
|
||||
:param task: a task from TaskManager.
|
||||
:param node: a single Node.
|
||||
:param kwargs: info for action.
|
||||
|
||||
:raises: UnsupportedDriverExtension if 'method' can not be mapped to
|
||||
|
|
|
@ -85,7 +85,7 @@ class FakeDeploy(base.DeployInterface):
|
|||
class FakeVendorA(base.VendorInterface):
|
||||
"""Example implementation of a vendor passthru interface."""
|
||||
|
||||
def validate(self, task, node, **kwargs):
|
||||
def validate(self, task, **kwargs):
|
||||
method = kwargs.get('method')
|
||||
if method == 'first_method':
|
||||
bar = kwargs.get('bar')
|
||||
|
@ -95,21 +95,21 @@ class FakeVendorA(base.VendorInterface):
|
|||
return
|
||||
_raise_unsupported_error(method)
|
||||
|
||||
def _private_method(self, task, node, bar):
|
||||
def _private_method(self, task, bar):
|
||||
return True if bar == 'baz' else False
|
||||
|
||||
def vendor_passthru(self, task, node, **kwargs):
|
||||
def vendor_passthru(self, task, **kwargs):
|
||||
method = kwargs.get('method')
|
||||
if method == 'first_method':
|
||||
bar = kwargs.get('bar')
|
||||
return self._private_method(task, node, bar)
|
||||
return self._private_method(task, bar)
|
||||
_raise_unsupported_error(method)
|
||||
|
||||
|
||||
class FakeVendorB(base.VendorInterface):
|
||||
"""Example implementation of a secondary vendor passthru."""
|
||||
|
||||
def validate(self, task, node, **kwargs):
|
||||
def validate(self, task, **kwargs):
|
||||
method = kwargs.get('method')
|
||||
if method == 'second_method':
|
||||
bar = kwargs.get('bar')
|
||||
|
@ -119,14 +119,14 @@ class FakeVendorB(base.VendorInterface):
|
|||
return
|
||||
_raise_unsupported_error(method)
|
||||
|
||||
def _private_method(self, task, node, bar):
|
||||
def _private_method(self, task, bar):
|
||||
return True if bar == 'kazoo' else False
|
||||
|
||||
def vendor_passthru(self, task, node, **kwargs):
|
||||
def vendor_passthru(self, task, **kwargs):
|
||||
method = kwargs.get('method')
|
||||
if method == 'second_method':
|
||||
bar = kwargs.get('bar')
|
||||
return self._private_method(task, node, bar)
|
||||
return self._private_method(task, bar)
|
||||
_raise_unsupported_error(method)
|
||||
|
||||
|
||||
|
|
|
@ -266,11 +266,10 @@ class NativeIPMIPower(base.PowerInterface):
|
|||
class VendorPassthru(base.VendorInterface):
|
||||
|
||||
@task_manager.require_exclusive_lock
|
||||
def _set_boot_device(self, task, node, device, persistent=False):
|
||||
def _set_boot_device(self, task, device, persistent=False):
|
||||
"""Set the boot device for a node.
|
||||
|
||||
:param task: a TaskManager instance.
|
||||
:param node: The Node.
|
||||
:param device: Boot device. One of [net, network, pxe, hd, cd,
|
||||
cdrom, dvd, floppy, default, setup, f1]
|
||||
:param persistent: Whether to set next-boot, or make the change
|
||||
|
@ -279,11 +278,10 @@ class VendorPassthru(base.VendorInterface):
|
|||
or required ipmi credentials are missing.
|
||||
:raises: IPMIFailure when the native ipmi call fails.
|
||||
"""
|
||||
|
||||
if device not in ipmi_command.boot_devices:
|
||||
raise exception.InvalidParameterValue(_(
|
||||
"Invalid boot device %s specified.") % device)
|
||||
driver_info = _parse_driver_info(node)
|
||||
driver_info = _parse_driver_info(task.node)
|
||||
try:
|
||||
ipmicmd = ipmi_command.Command(bmc=driver_info['address'],
|
||||
userid=driver_info['username'],
|
||||
|
@ -295,9 +293,9 @@ class VendorPassthru(base.VendorInterface):
|
|||
% {'node_id': driver_info['uuid'], 'error': str(e)})
|
||||
raise exception.IPMIFailure(cmd=str(e))
|
||||
|
||||
def validate(self, node, **kwargs):
|
||||
def validate(self, task, **kwargs):
|
||||
"""Validate vendor-specific actions.
|
||||
:param node: The node
|
||||
:param task: a TaskManager instance.
|
||||
:param kwargs: the keyword arguments supplied
|
||||
|
||||
:raises: InvalidParameterValue if an invalid boot device is specified,
|
||||
|
@ -314,17 +312,16 @@ class VendorPassthru(base.VendorInterface):
|
|||
raise exception.InvalidParameterValue(_(
|
||||
"Unsupported method (%s) passed to IPMINative driver.")
|
||||
% method)
|
||||
_parse_driver_info(node)
|
||||
_parse_driver_info(task.node)
|
||||
|
||||
def vendor_passthru(self, task, node, **kwargs):
|
||||
def vendor_passthru(self, task, **kwargs):
|
||||
"""Receive requests for vendor-specific actions.
|
||||
:param task: a TaskManager instance.
|
||||
:param node: The node
|
||||
:param kwargs: the keyword arguments supplied
|
||||
"""
|
||||
method = kwargs['method']
|
||||
if method == 'set_boot_device':
|
||||
return self._set_boot_device(
|
||||
task, node,
|
||||
task,
|
||||
kwargs.get('device'),
|
||||
kwargs.get('persistent', False))
|
||||
|
|
|
@ -342,11 +342,10 @@ class IPMIPower(base.PowerInterface):
|
|||
class VendorPassthru(base.VendorInterface):
|
||||
|
||||
@task_manager.require_exclusive_lock
|
||||
def _set_boot_device(self, task, node, device, persistent=False):
|
||||
def _set_boot_device(self, task, device, persistent=False):
|
||||
"""Set the boot device for a node.
|
||||
|
||||
:param task: a TaskManager instance.
|
||||
:param node: The Node.
|
||||
:param device: Boot device. One of [pxe, disk, cdrom, safe, bios].
|
||||
:param persistent: Whether to set next-boot, or make the change
|
||||
permanent. Default: False.
|
||||
|
@ -361,14 +360,14 @@ class VendorPassthru(base.VendorInterface):
|
|||
cmd = "chassis bootdev %s" % device
|
||||
if persistent:
|
||||
cmd = cmd + " options=persistent"
|
||||
driver_info = _parse_driver_info(node)
|
||||
driver_info = _parse_driver_info(task.node)
|
||||
try:
|
||||
out, err = _exec_ipmitool(driver_info, cmd)
|
||||
# TODO(deva): validate (out, err) and add unit test for failure
|
||||
except Exception:
|
||||
raise exception.IPMIFailure(cmd=cmd)
|
||||
|
||||
def validate(self, node, **kwargs):
|
||||
def validate(self, task, **kwargs):
|
||||
method = kwargs['method']
|
||||
if method == 'set_boot_device':
|
||||
device = kwargs.get('device')
|
||||
|
@ -382,10 +381,10 @@ class VendorPassthru(base.VendorInterface):
|
|||
|
||||
return True
|
||||
|
||||
def vendor_passthru(self, task, node, **kwargs):
|
||||
def vendor_passthru(self, task, **kwargs):
|
||||
method = kwargs['method']
|
||||
if method == 'set_boot_device':
|
||||
return self._set_boot_device(
|
||||
task, node,
|
||||
task,
|
||||
kwargs.get('device'),
|
||||
kwargs.get('persistent', False))
|
||||
|
|
|
@ -587,7 +587,7 @@ class PXEDeploy(base.DeployInterface):
|
|||
# to deploy ramdisk
|
||||
_create_token_file(task, node)
|
||||
_update_neutron(task, node)
|
||||
manager_utils.node_set_boot_device(task, node, 'pxe', persistent=True)
|
||||
manager_utils.node_set_boot_device(task, 'pxe', persistent=True)
|
||||
manager_utils.node_power_action(task, node, states.REBOOT)
|
||||
|
||||
return states.DEPLOYWAIT
|
||||
|
@ -693,10 +693,10 @@ class VendorPassthru(base.VendorInterface):
|
|||
|
||||
return params
|
||||
|
||||
def validate(self, task, node, **kwargs):
|
||||
def validate(self, task, **kwargs):
|
||||
method = kwargs['method']
|
||||
if method == 'pass_deploy_info':
|
||||
self._get_deploy_info(node, **kwargs)
|
||||
self._get_deploy_info(task.node, **kwargs)
|
||||
else:
|
||||
raise exception.InvalidParameterValue(_(
|
||||
"Unsupported method (%s) passed to PXE driver.")
|
||||
|
@ -705,12 +705,13 @@ class VendorPassthru(base.VendorInterface):
|
|||
return True
|
||||
|
||||
@task_manager.require_exclusive_lock
|
||||
def _continue_deploy(self, task, node, **kwargs):
|
||||
def _continue_deploy(self, task, **kwargs):
|
||||
"""Resume a deployment upon getting POST data from deploy ramdisk.
|
||||
|
||||
This method raises no exceptions because it is intended to be
|
||||
invoked asynchronously as a callback from the deploy ramdisk.
|
||||
"""
|
||||
node = task.node
|
||||
|
||||
def _set_failed_state(msg):
|
||||
node.provision_state = states.DEPLOYFAIL
|
||||
|
@ -764,7 +765,7 @@ class VendorPassthru(base.VendorInterface):
|
|||
node.target_provision_state = states.NOSTATE
|
||||
node.save(task.context)
|
||||
|
||||
def vendor_passthru(self, task, node, **kwargs):
|
||||
def vendor_passthru(self, task, **kwargs):
|
||||
method = kwargs['method']
|
||||
if method == 'pass_deploy_info':
|
||||
self._continue_deploy(task, node, **kwargs)
|
||||
self._continue_deploy(task, **kwargs)
|
||||
|
|
|
@ -387,7 +387,7 @@ class Power(base.PowerInterface):
|
|||
class VendorPassthru(base.VendorInterface):
|
||||
"""SeaMicro vendor-specific methods."""
|
||||
|
||||
def validate(self, task, node, **kwargs):
|
||||
def validate(self, task, **kwargs):
|
||||
method = kwargs['method']
|
||||
if method in VENDOR_PASSTHRU_METHODS:
|
||||
return True
|
||||
|
@ -396,18 +396,18 @@ class VendorPassthru(base.VendorInterface):
|
|||
"Unsupported method (%s) passed to SeaMicro driver.")
|
||||
% method)
|
||||
|
||||
def vendor_passthru(self, task, node, **kwargs):
|
||||
def vendor_passthru(self, task, **kwargs):
|
||||
"""Dispatch vendor specific method calls."""
|
||||
method = kwargs['method']
|
||||
if method in VENDOR_PASSTHRU_METHODS:
|
||||
return getattr(self, "_" + method)(task, node, **kwargs)
|
||||
return getattr(self, "_" + method)(task, **kwargs)
|
||||
|
||||
def _set_node_vlan_id(self, task, node, **kwargs):
|
||||
def _set_node_vlan_id(self, task, **kwargs):
|
||||
"""Sets a untagged vlan id for NIC 0 of node.
|
||||
|
||||
@kwargs vlan_id: id of untagged vlan for NIC 0 of node
|
||||
"""
|
||||
|
||||
node = task.node
|
||||
vlan_id = kwargs.get('vlan_id')
|
||||
if not vlan_id:
|
||||
raise exception.InvalidParameterValue(_("No vlan id provided"))
|
||||
|
@ -430,7 +430,7 @@ class VendorPassthru(base.VendorInterface):
|
|||
node.properties = properties
|
||||
node.save(task.context)
|
||||
|
||||
def _attach_volume(self, task, node, **kwargs):
|
||||
def _attach_volume(self, task, **kwargs):
|
||||
"""Attach volume from SeaMicro storage pools for ironic to node.
|
||||
If kwargs['volume_id'] not given, Create volume in SeaMicro
|
||||
storage pool and attach to node.
|
||||
|
@ -440,6 +440,7 @@ class VendorPassthru(base.VendorInterface):
|
|||
@kwargs volume_size: size of new volume to be created and attached
|
||||
as root volume of node
|
||||
"""
|
||||
node = task.node
|
||||
seamicro_info = _parse_driver_info(node)
|
||||
volume_id = kwargs.get('volume_id')
|
||||
|
||||
|
@ -465,7 +466,7 @@ class VendorPassthru(base.VendorInterface):
|
|||
node.properties = properties
|
||||
node.save(task.context)
|
||||
|
||||
def _set_boot_device(self, task, node, **kwargs):
|
||||
def _set_boot_device(self, task, **kwargs):
|
||||
"""Set the boot device of the node.
|
||||
|
||||
@kwargs device: Boot device. One of [pxe, disk]
|
||||
|
@ -478,7 +479,7 @@ class VendorPassthru(base.VendorInterface):
|
|||
if boot_device not in VALID_BOOT_DEVICES:
|
||||
raise exception.InvalidParameterValue(_("Boot device is invalid"))
|
||||
|
||||
seamicro_info = _parse_driver_info(node)
|
||||
seamicro_info = _parse_driver_info(task.node)
|
||||
try:
|
||||
server = _get_server(seamicro_info)
|
||||
if boot_device == "disk":
|
||||
|
|
|
@ -57,7 +57,7 @@ class MixinVendorInterface(base.VendorInterface):
|
|||
route = self._map(**kwargs)
|
||||
route.validate(*args, **kwargs)
|
||||
|
||||
def vendor_passthru(self, task, node, **kwargs):
|
||||
def vendor_passthru(self, task, **kwargs):
|
||||
"""Call vendor_passthru on the appropriate interface only.
|
||||
|
||||
Returns or raises according to the requested vendor_passthru method.
|
||||
|
@ -68,7 +68,7 @@ class MixinVendorInterface(base.VendorInterface):
|
|||
|
||||
"""
|
||||
route = self._map(**kwargs)
|
||||
return route.vendor_passthru(task, node, **kwargs)
|
||||
return route.vendor_passthru(task, **kwargs)
|
||||
|
||||
def driver_vendor_passthru(self, context, method, **kwargs):
|
||||
"""Call driver_vendor_passthru on a mapped interface based on the
|
||||
|
|
|
@ -41,7 +41,6 @@ class NodeSetBootDeviceTestCase(base.DbTestCase):
|
|||
self.assertRaises(exception.InvalidParameterValue,
|
||||
conductor_utils.node_set_boot_device,
|
||||
task,
|
||||
task.node,
|
||||
device='fake')
|
||||
|
||||
def test_node_set_boot_device_valid(self):
|
||||
|
@ -57,10 +56,8 @@ class NodeSetBootDeviceTestCase(base.DbTestCase):
|
|||
with mock.patch.object(self.driver.vendor,
|
||||
'vendor_passthru') as driver_vpassthru:
|
||||
conductor_utils.node_set_boot_device(task,
|
||||
task.node,
|
||||
device='pxe')
|
||||
driver_vpassthru.assert_called_once_with(task,
|
||||
task.node,
|
||||
device='pxe',
|
||||
persistent=False,
|
||||
method='set_boot_device')
|
||||
|
|
|
@ -207,9 +207,7 @@ class IPMINativeDriverTestCase(db_base.DbTestCase):
|
|||
|
||||
with task_manager.acquire(self.context,
|
||||
[self.node['uuid']]) as task:
|
||||
self.driver.vendor._set_boot_device(task,
|
||||
self.node,
|
||||
'pxe')
|
||||
self.driver.vendor._set_boot_device(task, 'pxe')
|
||||
ipmicmd.set_bootdev.assert_called_once_with('pxe')
|
||||
|
||||
def test_set_boot_device_bad_device(self):
|
||||
|
@ -217,7 +215,6 @@ class IPMINativeDriverTestCase(db_base.DbTestCase):
|
|||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.vendor._set_boot_device,
|
||||
task,
|
||||
self.node,
|
||||
'fake-device')
|
||||
|
||||
def test_reboot_ok(self):
|
||||
|
@ -244,25 +241,33 @@ class IPMINativeDriverTestCase(db_base.DbTestCase):
|
|||
ipmicmd.set_power.assert_called_once_with('boot', 500)
|
||||
|
||||
def test_vendor_passthru_validate__set_boot_device_good(self):
|
||||
self.driver.vendor.validate(self.node,
|
||||
method='set_boot_device',
|
||||
device='pxe')
|
||||
with task_manager.acquire(self.context,
|
||||
[self.node['uuid']]) as task:
|
||||
self.driver.vendor.validate(task,
|
||||
method='set_boot_device',
|
||||
device='pxe')
|
||||
|
||||
def test_vendor_passthru_val__set_boot_device_fail_unknown_device(self):
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.vendor.validate,
|
||||
self.node, method='set_boot_device',
|
||||
device='non-existent')
|
||||
with task_manager.acquire(self.context,
|
||||
[self.node['uuid']]) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.vendor.validate,
|
||||
task, method='set_boot_device',
|
||||
device='non-existent')
|
||||
|
||||
def test_vendor_passthru_val__set_boot_device_fail_missed_device_arg(self):
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.vendor.validate,
|
||||
self.node, method='set_boot_device')
|
||||
with task_manager.acquire(self.context,
|
||||
[self.node['uuid']]) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.vendor.validate,
|
||||
task, method='set_boot_device')
|
||||
|
||||
def test_vendor_passthru_validate_method_notmatch(self):
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.vendor.validate,
|
||||
self.node, method='non-existent-method')
|
||||
with task_manager.acquire(self.context,
|
||||
[self.node['uuid']]) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.vendor.validate,
|
||||
task, method='non-existent-method')
|
||||
|
||||
def test_vendor_passthru_call__set_boot_device(self):
|
||||
with task_manager.acquire(self.context, [self.node['uuid']],
|
||||
|
@ -270,8 +275,6 @@ class IPMINativeDriverTestCase(db_base.DbTestCase):
|
|||
with mock.patch.object(ipminative.VendorPassthru,
|
||||
'_set_boot_device') as boot_mock:
|
||||
self.driver.vendor.vendor_passthru(task,
|
||||
self.node,
|
||||
method='set_boot_device',
|
||||
device='pxe')
|
||||
boot_mock.assert_called_once_with(task, self.node,
|
||||
'pxe', False)
|
||||
boot_mock.assert_called_once_with(task, 'pxe', False)
|
||||
|
|
|
@ -377,7 +377,7 @@ class IPMIToolDriverTestCase(db_base.DbTestCase):
|
|||
|
||||
with task_manager.acquire(self.context,
|
||||
[self.node['uuid']]) as task:
|
||||
self.driver.vendor._set_boot_device(task, self.node, 'pxe')
|
||||
self.driver.vendor._set_boot_device(task, 'pxe')
|
||||
|
||||
mock_exec.assert_called_once_with(self.info, "chassis bootdev pxe")
|
||||
|
||||
|
@ -386,7 +386,6 @@ class IPMIToolDriverTestCase(db_base.DbTestCase):
|
|||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.vendor._set_boot_device,
|
||||
task,
|
||||
self.node,
|
||||
'fake-device')
|
||||
|
||||
def test_reboot_ok(self):
|
||||
|
@ -429,25 +428,29 @@ class IPMIToolDriverTestCase(db_base.DbTestCase):
|
|||
self.assertEqual(manager.mock_calls, expected)
|
||||
|
||||
def test_vendor_passthru_validate__set_boot_device_good(self):
|
||||
self.driver.vendor.validate(self.node,
|
||||
method='set_boot_device',
|
||||
device='pxe')
|
||||
with task_manager.acquire(self.context, self.node['uuid']) as task:
|
||||
self.driver.vendor.validate(task,
|
||||
method='set_boot_device',
|
||||
device='pxe')
|
||||
|
||||
def test_vendor_passthru_validate__set_boot_device_fail(self):
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.vendor.validate,
|
||||
self.node, method='set_boot_device',
|
||||
device='fake')
|
||||
with task_manager.acquire(self.context, self.node['uuid']) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.vendor.validate,
|
||||
task, method='set_boot_device',
|
||||
device='fake')
|
||||
|
||||
def test_vendor_passthru_validate__set_boot_device_fail_no_device(self):
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.vendor.validate,
|
||||
self.node, method='set_boot_device')
|
||||
with task_manager.acquire(self.context, self.node['uuid']) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.vendor.validate,
|
||||
task, method='set_boot_device')
|
||||
|
||||
def test_vendor_passthru_validate_method_notmatch(self):
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.vendor.validate,
|
||||
self.node, method='fake_method')
|
||||
with task_manager.acquire(self.context, self.node['uuid']) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.vendor.validate,
|
||||
task, method='fake_method')
|
||||
|
||||
def test_vendor_passthru_call_set_boot_device(self):
|
||||
with task_manager.acquire(self.context, [self.node['uuid']],
|
||||
|
@ -455,11 +458,9 @@ class IPMIToolDriverTestCase(db_base.DbTestCase):
|
|||
with mock.patch.object(ipmi.VendorPassthru,
|
||||
'_set_boot_device') as boot_mock:
|
||||
self.driver.vendor.vendor_passthru(task,
|
||||
self.node,
|
||||
method='set_boot_device',
|
||||
device='pxe')
|
||||
boot_mock.assert_called_once_with(task, self.node,
|
||||
'pxe', False)
|
||||
boot_mock.assert_called_once_with(task, 'pxe', False)
|
||||
|
||||
@mock.patch.object(ipmi, '_exec_ipmitool')
|
||||
def test_validate_ok(self, exec_mock):
|
||||
|
|
|
@ -692,7 +692,7 @@ class PXEDriverTestCase(db_base.DbTestCase):
|
|||
def test_vendor_passthru_validate_good(self):
|
||||
with task_manager.acquire(self.context, [self.node['uuid']],
|
||||
shared=True) as task:
|
||||
task.resources[0].driver.vendor.validate(task, self.node,
|
||||
task.resources[0].driver.vendor.validate(task,
|
||||
method='pass_deploy_info', address='123456', iqn='aaa-bbb',
|
||||
key='fake-56789')
|
||||
|
||||
|
@ -701,7 +701,7 @@ class PXEDriverTestCase(db_base.DbTestCase):
|
|||
shared=True) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
task.resources[0].driver.vendor.validate,
|
||||
task, self.node, method='pass_deploy_info',
|
||||
task, method='pass_deploy_info',
|
||||
key='fake-56789')
|
||||
|
||||
def test_vendor_passthru_validate_key_notmatch(self):
|
||||
|
@ -709,7 +709,7 @@ class PXEDriverTestCase(db_base.DbTestCase):
|
|||
shared=True) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
task.resources[0].driver.vendor.validate,
|
||||
task, self.node, method='pass_deploy_info',
|
||||
task, method='pass_deploy_info',
|
||||
address='123456', iqn='aaa-bbb',
|
||||
key='fake-12345')
|
||||
|
||||
|
@ -749,7 +749,6 @@ class PXEDriverTestCase(db_base.DbTestCase):
|
|||
update_neutron_mock.assert_called_once_with(task,
|
||||
self.node)
|
||||
node_set_boot_mock.assert_called_once_with(task,
|
||||
self.node,
|
||||
'pxe',
|
||||
persistent=True)
|
||||
node_power_mock.assert_called_once_with(task,
|
||||
|
@ -810,9 +809,10 @@ class PXEDriverTestCase(db_base.DbTestCase):
|
|||
fake_deploy))
|
||||
|
||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||
task.resources[0].driver.vendor.vendor_passthru(task, self.node,
|
||||
task.resources[0].driver.vendor.vendor_passthru(task,
|
||||
method='pass_deploy_info', address='123456', iqn='aaa-bbb',
|
||||
key='fake-56789')
|
||||
self.node.refresh(self.context)
|
||||
self.assertEqual(states.ACTIVE, self.node.provision_state)
|
||||
self.assertEqual(states.POWER_ON, self.node.power_state)
|
||||
self.assertIsNone(self.node.last_error)
|
||||
|
@ -832,9 +832,10 @@ class PXEDriverTestCase(db_base.DbTestCase):
|
|||
fake_deploy))
|
||||
|
||||
with task_manager.acquire(self.context, [self.node.uuid]) as task:
|
||||
task.resources[0].driver.vendor.vendor_passthru(task, self.node,
|
||||
task.resources[0].driver.vendor.vendor_passthru(task,
|
||||
method='pass_deploy_info', address='123456', iqn='aaa-bbb',
|
||||
key='fake-56789')
|
||||
self.node.refresh(self.context)
|
||||
self.assertEqual(states.DEPLOYFAIL, self.node.provision_state)
|
||||
self.assertEqual(states.POWER_OFF, self.node.power_state)
|
||||
self.assertIsNotNone(self.node.last_error)
|
||||
|
@ -854,9 +855,10 @@ class PXEDriverTestCase(db_base.DbTestCase):
|
|||
fake_deploy))
|
||||
|
||||
with task_manager.acquire(self.context, [self.node.uuid]) as task:
|
||||
task.resources[0].driver.vendor.vendor_passthru(task, self.node,
|
||||
task.resources[0].driver.vendor.vendor_passthru(task,
|
||||
method='pass_deploy_info', address='123456', iqn='aaa-bbb',
|
||||
key='fake-56789', error='test ramdisk error')
|
||||
self.node.refresh(self.context)
|
||||
self.assertEqual(states.DEPLOYFAIL, self.node.provision_state)
|
||||
self.assertEqual(states.POWER_OFF, self.node.power_state)
|
||||
self.assertIsNotNone(self.node.last_error)
|
||||
|
@ -868,9 +870,10 @@ class PXEDriverTestCase(db_base.DbTestCase):
|
|||
self.node.save(self.context)
|
||||
|
||||
with task_manager.acquire(self.context, [self.node.uuid]) as task:
|
||||
task.resources[0].driver.vendor.vendor_passthru(task, self.node,
|
||||
task.resources[0].driver.vendor.vendor_passthru(task,
|
||||
method='pass_deploy_info', address='123456', iqn='aaa-bbb',
|
||||
key='fake-56789', error='test ramdisk error')
|
||||
self.node.refresh(self.context)
|
||||
self.assertEqual('FAKE', self.node.provision_state)
|
||||
self.assertEqual(states.POWER_ON, self.node.power_state)
|
||||
|
||||
|
@ -878,7 +881,7 @@ class PXEDriverTestCase(db_base.DbTestCase):
|
|||
with task_manager.acquire(self.context, [self.node['uuid']]) as task:
|
||||
with mock.patch.object(task.driver.vendor, '_continue_deploy') \
|
||||
as _continue_deploy_mock:
|
||||
task.driver.vendor.vendor_passthru(task, self.node,
|
||||
task.driver.vendor.vendor_passthru(task,
|
||||
method='pass_deploy_info', address='123456', iqn='aaa-bbb',
|
||||
key='fake-56789')
|
||||
# lock elevated w/o exception
|
||||
|
|
|
@ -387,14 +387,14 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
|||
shared=True) as task:
|
||||
for method in seamicro.VENDOR_PASSTHRU_METHODS:
|
||||
task.resources[0].driver.vendor.validate(
|
||||
task, self.node, **{'method': method})
|
||||
task, **{'method': method})
|
||||
|
||||
def test_vendor_passthru_validate_fail(self):
|
||||
with task_manager.acquire(self.context, [self.node['uuid']],
|
||||
shared=True) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
task.resources[0].driver.vendor.validate,
|
||||
task, self.node, **{'method': 'invalid_method'})
|
||||
task, **{'method': 'invalid_method'})
|
||||
|
||||
@mock.patch.object(seamicro, '_get_server')
|
||||
def test_set_node_vlan_id_good(self, mock_get_server):
|
||||
|
@ -405,7 +405,7 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
|||
shared=False) as task:
|
||||
kwargs = {'vlan_id': vlan_id, 'method': 'set_node_vlan_id'}
|
||||
task.resources[0].driver.vendor.\
|
||||
vendor_passthru(task, self.node, **kwargs)
|
||||
vendor_passthru(task, **kwargs)
|
||||
mock_get_server.assert_called_once_with(info)
|
||||
|
||||
def test_set_node_vlan_id_no_input(self):
|
||||
|
@ -414,7 +414,7 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
|||
shared=False) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
task.resources[0].driver.vendor.
|
||||
vendor_passthru, task, self.node,
|
||||
vendor_passthru, task,
|
||||
**{'method': 'set_node_vlan_id'})
|
||||
|
||||
@mock.patch.object(seamicro, '_get_server')
|
||||
|
@ -432,7 +432,7 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
|||
kwargs = {'vlan_id': vlan_id, 'method': 'set_node_vlan_id'}
|
||||
self.assertRaises(exception.IronicException,
|
||||
task.resources[0].driver.vendor.
|
||||
vendor_passthru, task, self.node, **kwargs)
|
||||
vendor_passthru, task, **kwargs)
|
||||
|
||||
mock_get_server.assert_called_once_with(info)
|
||||
|
||||
|
@ -448,7 +448,7 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
|||
shared=False) as task:
|
||||
kwargs = {'volume_id': volume_id, 'method': 'attach_volume'}
|
||||
task.resources[0].driver.vendor.\
|
||||
vendor_passthru(task, self.node, **kwargs)
|
||||
vendor_passthru(task, **kwargs)
|
||||
mock_get_server.assert_called_once_with(info)
|
||||
|
||||
@mock.patch.object(seamicro, '_get_server')
|
||||
|
@ -465,8 +465,7 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
|||
kwargs = {'volume_id': volume_id, 'method': 'attach_volume'}
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
task.resources[0].driver.vendor.
|
||||
vendor_passthru, task, self.node,
|
||||
**kwargs)
|
||||
vendor_passthru, task, **kwargs)
|
||||
|
||||
@mock.patch.object(seamicro, '_get_server')
|
||||
@mock.patch.object(seamicro, '_validate_volume')
|
||||
|
@ -486,7 +485,7 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
|||
kwargs = {'volume_id': volume_id, 'method': 'attach_volume'}
|
||||
self.assertRaises(exception.IronicException,
|
||||
task.resources[0].driver.vendor.
|
||||
vendor_passthru, task, self.node, **kwargs)
|
||||
vendor_passthru, task, **kwargs)
|
||||
|
||||
mock_get_server.assert_called_once_with(info)
|
||||
|
||||
|
@ -506,7 +505,7 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
|||
shared=False) as task:
|
||||
kwargs = {'volume_size': volume_size, 'method': "attach_volume"}
|
||||
task.resources[0].driver.vendor.\
|
||||
vendor_passthru(task, self.node, **kwargs)
|
||||
vendor_passthru(task, **kwargs)
|
||||
mock_get_server.assert_called_once_with(info)
|
||||
mock_create_volume.assert_called_once_with(info, volume_size)
|
||||
|
||||
|
@ -516,7 +515,7 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
|||
shared=False) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
task.resources[0].driver.vendor.
|
||||
vendor_passthru, task, self.node,
|
||||
vendor_passthru, task,
|
||||
**{'method': 'attach_volume'})
|
||||
|
||||
@mock.patch.object(seamicro, '_get_server')
|
||||
|
@ -528,7 +527,7 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
|||
shared=False) as task:
|
||||
kwargs = {'device': boot_device, 'method': 'set_boot_device'}
|
||||
task.resources[0].driver.vendor.\
|
||||
vendor_passthru(task, self.node, **kwargs)
|
||||
vendor_passthru(task, **kwargs)
|
||||
mock_get_server.assert_called_once_with(info)
|
||||
|
||||
def test_set_boot_device_no_input(self):
|
||||
|
@ -537,7 +536,7 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
|||
shared=False) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
task.resources[0].driver.vendor.
|
||||
vendor_passthru, task, self.node,
|
||||
vendor_passthru, task,
|
||||
**{'method': 'set_boot_device'})
|
||||
|
||||
@mock.patch.object(seamicro, '_get_server')
|
||||
|
@ -550,7 +549,7 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
|||
kwargs = {'device': boot_device, 'method': 'set_boot_device'}
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
task.resources[0].driver.vendor.
|
||||
vendor_passthru, task, self.node, **kwargs)
|
||||
vendor_passthru, task, **kwargs)
|
||||
|
||||
@mock.patch.object(seamicro, '_get_server')
|
||||
def test_set_boot_device_fail(self, mock_get_server):
|
||||
|
@ -567,6 +566,6 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
|||
kwargs = {'device': boot_device, 'method': 'set_boot_device'}
|
||||
self.assertRaises(exception.IronicException,
|
||||
task.resources[0].driver.vendor.
|
||||
vendor_passthru, task, self.node, **kwargs)
|
||||
vendor_passthru, task, **kwargs)
|
||||
|
||||
mock_get_server.assert_called_once_with(info)
|
||||
|
|
|
@ -56,18 +56,16 @@ class UtilsTestCase(base.TestCase):
|
|||
@mock.patch.object(fake.FakeVendorB, 'vendor_passthru')
|
||||
def test_vendor_interface_route_valid_method(self, mock_fakeb_vendor,
|
||||
mock_fakea_vendor):
|
||||
self.driver.vendor.vendor_passthru('task', 'node',
|
||||
self.driver.vendor.vendor_passthru('task',
|
||||
method='first_method',
|
||||
param1='fake1', param2='fake2')
|
||||
mock_fakea_vendor.assert_called_once_with('task',
|
||||
'node',
|
||||
method='first_method',
|
||||
param1='fake1', param2='fake2')
|
||||
self.driver.vendor.vendor_passthru('task', 'node',
|
||||
self.driver.vendor.vendor_passthru('task',
|
||||
method='second_method',
|
||||
param1='fake1', param2='fake2')
|
||||
mock_fakeb_vendor.assert_called_once_with('task',
|
||||
'node',
|
||||
method='second_method',
|
||||
param1='fake1', param2='fake2')
|
||||
|
||||
|
|
Loading…
Reference in New Issue