Merge "Remove 'node' parameter from the Power interface"
This commit is contained in:
commit
c4b236b086
@ -211,7 +211,7 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
||||
if 'instance_uuid' in delta:
|
||||
task.driver.power.validate(task, node_obj)
|
||||
node_obj['power_state'] = \
|
||||
task.driver.power.get_power_state(task, node_obj)
|
||||
task.driver.power.get_power_state(task)
|
||||
|
||||
if node_obj['power_state'] != states.POWER_OFF:
|
||||
raise exception.NodeInWrongPowerState(
|
||||
@ -249,7 +249,7 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
||||
with task_manager.acquire(context, node_id, shared=False) as task:
|
||||
task.driver.power.validate(task, task.node)
|
||||
task.spawn_after(self._spawn_worker, utils.node_power_action,
|
||||
task, task.node, new_state)
|
||||
task, new_state)
|
||||
|
||||
@messaging.expected_exceptions(exception.NoFreeConductorWorker,
|
||||
exception.NodeLocked,
|
||||
@ -512,7 +512,7 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
||||
return
|
||||
|
||||
try:
|
||||
power_state = task.driver.power.get_power_state(task, node)
|
||||
power_state = task.driver.power.get_power_state(task)
|
||||
except Exception as e:
|
||||
# TODO(rloo): change to IronicException, after
|
||||
# https://bugs.launchpad.net/ironic/+bug/1267693
|
||||
@ -565,8 +565,7 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
||||
try:
|
||||
# node_power_action will update the node record
|
||||
# so don't do that again here.
|
||||
utils.node_power_action(task, task.node,
|
||||
node.power_state)
|
||||
utils.node_power_action(task, node.power_state)
|
||||
except Exception as e:
|
||||
# TODO(rloo): change to IronicException after
|
||||
# https://bugs.launchpad.net/ironic/+bug/1267693
|
||||
|
@ -43,13 +43,12 @@ def node_set_boot_device(task, device, persistent=False):
|
||||
|
||||
|
||||
@task_manager.require_exclusive_lock
|
||||
def node_power_action(task, node, state):
|
||||
def node_power_action(task, state):
|
||||
"""Change power state or reset for a node.
|
||||
|
||||
Perform the requested power action if the transition is required.
|
||||
|
||||
:param task: a TaskManager instance.
|
||||
:param node: the Node object to act upon.
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:param state: Any power state from ironic.common.states. If the
|
||||
state is 'REBOOT' then a reboot will be attempted, otherwise
|
||||
the node power state is directly set to 'state'.
|
||||
@ -59,12 +58,13 @@ def node_power_action(task, node, state):
|
||||
wrong occurred during the power action.
|
||||
|
||||
"""
|
||||
node = task.node
|
||||
context = task.context
|
||||
new_state = states.POWER_ON if state == states.REBOOT else state
|
||||
|
||||
if state != states.REBOOT:
|
||||
try:
|
||||
curr_state = task.driver.power.get_power_state(task, node)
|
||||
curr_state = task.driver.power.get_power_state(task)
|
||||
except Exception as e:
|
||||
with excutils.save_and_reraise_exception():
|
||||
node['last_error'] = \
|
||||
@ -100,9 +100,9 @@ def node_power_action(task, node, state):
|
||||
# take power action
|
||||
try:
|
||||
if state != states.REBOOT:
|
||||
task.driver.power.set_power_state(task, node, new_state)
|
||||
task.driver.power.set_power_state(task, new_state)
|
||||
else:
|
||||
task.driver.power.reboot(task, node)
|
||||
task.driver.power.reboot(task)
|
||||
except Exception as e:
|
||||
with excutils.save_and_reraise_exception():
|
||||
node['last_error'] = \
|
||||
|
@ -192,6 +192,9 @@ class DeployInterface(object):
|
||||
class PowerInterface(object):
|
||||
"""Interface for power-related actions."""
|
||||
|
||||
# TODO(lucasagomes): The 'node' parameter needs to be passed to validate()
|
||||
# because of the ConductorManager.validate_driver_interfaces().
|
||||
# Remove it after all cleaning all the interfaces
|
||||
@abc.abstractmethod
|
||||
def validate(self, task, node):
|
||||
"""Validate the driver-specific Node power info.
|
||||
@ -200,30 +203,32 @@ class PowerInterface(object):
|
||||
supplied node contains the required information for this driver to
|
||||
manage the power state of the node.
|
||||
|
||||
:param task: a task from TaskManager.
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:param node: a single Node to validate.
|
||||
:raises: InvalidParameterValue
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def get_power_state(self, task, node):
|
||||
"""Return the power state of the node.
|
||||
def get_power_state(self, task):
|
||||
"""Return the power state of the task's node.
|
||||
|
||||
TODO
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:returns: a power state. One of :mod:`ironic.common.states`.
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def set_power_state(self, task, node, power_state):
|
||||
"""Set the power state of the node.
|
||||
def set_power_state(self, task, power_state):
|
||||
"""Set the power state of the task's node.
|
||||
|
||||
TODO
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:param power_state: Any power state from :mod:`ironic.common.states`.
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def reboot(self, task, node):
|
||||
"""Perform a hard reboot of the node.
|
||||
def reboot(self, task):
|
||||
"""Perform a hard reboot of the task's node.
|
||||
|
||||
TODO
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
"""
|
||||
|
||||
|
||||
|
@ -45,16 +45,16 @@ class FakePower(base.PowerInterface):
|
||||
def validate(self, task, node):
|
||||
pass
|
||||
|
||||
def get_power_state(self, task, node):
|
||||
return node.power_state
|
||||
def get_power_state(self, task):
|
||||
return task.node.power_state
|
||||
|
||||
def set_power_state(self, task, node, power_state):
|
||||
def set_power_state(self, task, power_state):
|
||||
if power_state not in [states.POWER_ON, states.POWER_OFF]:
|
||||
raise exception.InvalidParameterValue(_("set_power_state called "
|
||||
"with an invalid power state: %s.") % power_state)
|
||||
node.power_state = power_state
|
||||
task.node.power_state = power_state
|
||||
|
||||
def reboot(self, task, node):
|
||||
def reboot(self, task):
|
||||
pass
|
||||
|
||||
|
||||
|
@ -205,29 +205,27 @@ class NativeIPMIPower(base.PowerInterface):
|
||||
:raises: InvalidParameterValue when required ipmi credentials
|
||||
are missing.
|
||||
"""
|
||||
_parse_driver_info(node)
|
||||
_parse_driver_info(task.node)
|
||||
|
||||
def get_power_state(self, task, node):
|
||||
"""Get the current power state.
|
||||
def get_power_state(self, task):
|
||||
"""Get the current power state of the task's node.
|
||||
|
||||
:param task: a TaskManager instance.
|
||||
:param node: the node info.
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:returns: power state POWER_ON, POWER_OFF or ERROR defined in
|
||||
:class:`ironic.common.states`.
|
||||
:raises: InvalidParameterValue when required ipmi credentials
|
||||
are missing.
|
||||
:raises: IPMIFailure when the native ipmi call fails.
|
||||
"""
|
||||
driver_info = _parse_driver_info(node)
|
||||
driver_info = _parse_driver_info(task.node)
|
||||
return _power_status(driver_info)
|
||||
|
||||
@task_manager.require_exclusive_lock
|
||||
def set_power_state(self, task, node, pstate):
|
||||
def set_power_state(self, task, pstate):
|
||||
"""Turn the power on or off.
|
||||
|
||||
:param task: a TaskManager instance.
|
||||
:param node: the node info.
|
||||
:param pstate: a power state that will be set on the given node.
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:param pstate: a power state that will be set on the task's node.
|
||||
:raises: IPMIFailure when the native ipmi call fails.
|
||||
:raises: InvalidParameterValue when an invalid power state
|
||||
is specified or required ipmi credentials are missing.
|
||||
@ -235,7 +233,7 @@ class NativeIPMIPower(base.PowerInterface):
|
||||
from ipmi.
|
||||
"""
|
||||
|
||||
driver_info = _parse_driver_info(node)
|
||||
driver_info = _parse_driver_info(task.node)
|
||||
|
||||
if pstate == states.POWER_ON:
|
||||
_power_on(driver_info)
|
||||
@ -247,11 +245,10 @@ class NativeIPMIPower(base.PowerInterface):
|
||||
) % pstate)
|
||||
|
||||
@task_manager.require_exclusive_lock
|
||||
def reboot(self, task, node):
|
||||
"""Cycles the power to a node.
|
||||
def reboot(self, task):
|
||||
"""Cycles the power to the task's node.
|
||||
|
||||
:param task: a TaskManager instance.
|
||||
:param node: the node info.
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: IPMIFailure when the native ipmi call fails.
|
||||
:raises: InvalidParameterValue when required ipmi credentials
|
||||
are missing.
|
||||
@ -259,7 +256,7 @@ class NativeIPMIPower(base.PowerInterface):
|
||||
from ipmi.
|
||||
"""
|
||||
|
||||
driver_info = _parse_driver_info(node)
|
||||
driver_info = _parse_driver_info(task.node)
|
||||
_reboot(driver_info)
|
||||
|
||||
|
||||
|
@ -295,26 +295,24 @@ class IPMIPower(base.PowerInterface):
|
||||
"%(error)s") % {'node': node.uuid, 'error': e}
|
||||
raise exception.InvalidParameterValue(msg)
|
||||
|
||||
def get_power_state(self, task, node):
|
||||
"""Get the current power state.
|
||||
def get_power_state(self, task):
|
||||
"""Get the current power state of the task's node.
|
||||
|
||||
:param task: a TaskManager instance.
|
||||
:param node: The Node.
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:returns: one of ironic.common.states POWER_OFF, POWER_ON or ERROR.
|
||||
:raises: InvalidParameterValue if required ipmi parameters are missing.
|
||||
:raises: IPMIFailure on an error from ipmitool (from _power_status
|
||||
call).
|
||||
|
||||
"""
|
||||
driver_info = _parse_driver_info(node)
|
||||
driver_info = _parse_driver_info(task.node)
|
||||
return _power_status(driver_info)
|
||||
|
||||
@task_manager.require_exclusive_lock
|
||||
def set_power_state(self, task, node, pstate):
|
||||
def set_power_state(self, task, pstate):
|
||||
"""Turn the power on or off.
|
||||
|
||||
:param task: a TaskManager instance.
|
||||
:param node: The Node.
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:param pstate: The desired power state, one of ironic.common.states
|
||||
POWER_ON, POWER_OFF.
|
||||
:raises: InvalidParameterValue if required ipmi parameters are missing
|
||||
@ -322,7 +320,7 @@ class IPMIPower(base.PowerInterface):
|
||||
:raises: PowerStateFailure if the power couldn't be set to pstate.
|
||||
|
||||
"""
|
||||
driver_info = _parse_driver_info(node)
|
||||
driver_info = _parse_driver_info(task.node)
|
||||
|
||||
if pstate == states.POWER_ON:
|
||||
state = _power_on(driver_info)
|
||||
@ -336,17 +334,16 @@ class IPMIPower(base.PowerInterface):
|
||||
raise exception.PowerStateFailure(pstate=pstate)
|
||||
|
||||
@task_manager.require_exclusive_lock
|
||||
def reboot(self, task, node):
|
||||
"""Cycles the power to a node.
|
||||
def reboot(self, task):
|
||||
"""Cycles the power to the task's node.
|
||||
|
||||
:param task: a TaskManager instance.
|
||||
:param node: The Node.
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: InvalidParameterValue if required ipmi parameters are missing.
|
||||
:raises: PowerStateFailure if the final state of the node is not
|
||||
POWER_ON.
|
||||
|
||||
"""
|
||||
driver_info = _parse_driver_info(node)
|
||||
driver_info = _parse_driver_info(task.node)
|
||||
_power_off(driver_info)
|
||||
state = _power_on(driver_info)
|
||||
|
||||
|
@ -553,7 +553,7 @@ class PXEDeploy(base.DeployInterface):
|
||||
_create_token_file(task)
|
||||
_update_neutron(task)
|
||||
manager_utils.node_set_boot_device(task, 'pxe', persistent=True)
|
||||
manager_utils.node_power_action(task, task.node, states.REBOOT)
|
||||
manager_utils.node_power_action(task, states.REBOOT)
|
||||
|
||||
return states.DEPLOYWAIT
|
||||
|
||||
@ -567,7 +567,7 @@ class PXEDeploy(base.DeployInterface):
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:returns: deploy state DELETED.
|
||||
"""
|
||||
manager_utils.node_power_action(task, task.node, states.POWER_OFF)
|
||||
manager_utils.node_power_action(task, states.POWER_OFF)
|
||||
_remove_internal_attrs(task)
|
||||
|
||||
return states.DELETED
|
||||
@ -680,7 +680,7 @@ class VendorPassthru(base.VendorInterface):
|
||||
node.target_provision_state = states.NOSTATE
|
||||
node.save(task.context)
|
||||
try:
|
||||
manager_utils.node_power_action(task, node, states.POWER_OFF)
|
||||
manager_utils.node_power_action(task, states.POWER_OFF)
|
||||
except Exception:
|
||||
msg = (_('Node %s failed to power off while handling deploy '
|
||||
'failure. This may be a serious condition. Node '
|
||||
|
@ -321,35 +321,33 @@ class Power(base.PowerInterface):
|
||||
|
||||
Check that node 'driver_info' contains the required fields.
|
||||
|
||||
:param task: A instance of `ironic.manager.task_manager.TaskManager`.
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:param node: Single node object.
|
||||
:raises: InvalidParameterValue if required seamicro parameters are
|
||||
missing.
|
||||
"""
|
||||
_parse_driver_info(node)
|
||||
_parse_driver_info(task.node)
|
||||
|
||||
def get_power_state(self, task, node):
|
||||
"""Get the current power state.
|
||||
def get_power_state(self, task):
|
||||
"""Get the current power state of the task's node.
|
||||
|
||||
Poll the host for the current power state of the node.
|
||||
|
||||
:param task: A instance of `ironic.manager.task_manager.TaskManager`.
|
||||
:param node: A single node.
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: InvalidParameterValue if required seamicro parameters are
|
||||
missing.
|
||||
:raises: ServiceUnavailable on an error from SeaMicro Client.
|
||||
:returns: power state. One of :class:`ironic.common.states`.
|
||||
"""
|
||||
return _get_power_status(node)
|
||||
return _get_power_status(task.node)
|
||||
|
||||
@task_manager.require_exclusive_lock
|
||||
def set_power_state(self, task, node, pstate):
|
||||
def set_power_state(self, task, pstate):
|
||||
"""Turn the power on or off.
|
||||
|
||||
Set the power state of a node.
|
||||
|
||||
:param task: A instance of `ironic.manager.task_manager.TaskManager`.
|
||||
:param node: A single node.
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:param pstate: Either POWER_ON or POWER_OFF from :class:
|
||||
`ironic.common.states`.
|
||||
:raises: InvalidParameterValue if an invalid power state was specified.
|
||||
@ -357,9 +355,9 @@ class Power(base.PowerInterface):
|
||||
"""
|
||||
|
||||
if pstate == states.POWER_ON:
|
||||
state = _power_on(node)
|
||||
state = _power_on(task.node)
|
||||
elif pstate == states.POWER_OFF:
|
||||
state = _power_off(node)
|
||||
state = _power_off(task.node)
|
||||
else:
|
||||
raise exception.InvalidParameterValue(_(
|
||||
"set_power_state called with invalid power state."))
|
||||
@ -368,17 +366,16 @@ class Power(base.PowerInterface):
|
||||
raise exception.PowerStateFailure(pstate=pstate)
|
||||
|
||||
@task_manager.require_exclusive_lock
|
||||
def reboot(self, task, node):
|
||||
"""Cycles the power to a node.
|
||||
def reboot(self, task):
|
||||
"""Cycles the power to the task's node.
|
||||
|
||||
:param task: a TaskManager instance.
|
||||
:param node: An Ironic node object.
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: InvalidParameterValue if required seamicro parameters are
|
||||
missing.
|
||||
:raises: PowerStateFailure if the final state of the node is not
|
||||
POWER_ON.
|
||||
"""
|
||||
state = _reboot(node)
|
||||
state = _reboot(task.node)
|
||||
|
||||
if state != states.POWER_ON:
|
||||
raise exception.PowerStateFailure(pstate=states.POWER_ON)
|
||||
|
@ -369,19 +369,17 @@ class SSHPower(base.PowerInterface):
|
||||
raise exception.InvalidParameterValue(_("Node %s does not have "
|
||||
"any port associated with it.") % node.uuid)
|
||||
try:
|
||||
_get_connection(node)
|
||||
_get_connection(task.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.
|
||||
def get_power_state(self, task):
|
||||
"""Get the current power state of the task's node.
|
||||
|
||||
Poll the host for the current power state of the node.
|
||||
|
||||
:param task: An instance of `ironic.manager.task_manager.TaskManager`.
|
||||
:param node: A single node.
|
||||
Poll the host for the current power state of the task's node.
|
||||
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:returns: power state. One of :class:`ironic.common.states`.
|
||||
:raises: InvalidParameterValue if any connection parameters are
|
||||
incorrect.
|
||||
@ -389,22 +387,20 @@ class SSHPower(base.PowerInterface):
|
||||
:raises: SSHCommandFailed on an error from ssh.
|
||||
:raises: SSHConnectFailed if ssh failed to connect to the node.
|
||||
"""
|
||||
driver_info = _parse_driver_info(node)
|
||||
driver_info = _parse_driver_info(task.node)
|
||||
driver_info['macs'] = driver_utils.get_node_mac_addresses(task)
|
||||
ssh_obj = _get_connection(node)
|
||||
ssh_obj = _get_connection(task.node)
|
||||
return _get_power_status(ssh_obj, driver_info)
|
||||
|
||||
@task_manager.require_exclusive_lock
|
||||
def set_power_state(self, task, node, pstate):
|
||||
def set_power_state(self, task, pstate):
|
||||
"""Turn the power on or off.
|
||||
|
||||
Set the power state of a node.
|
||||
Set the power state of the task's node.
|
||||
|
||||
:param task: An instance of `ironic.manager.task_manager.TaskManager`.
|
||||
:param node: A single node.
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:param pstate: Either POWER_ON or POWER_OFF from :class:
|
||||
`ironic.common.states`.
|
||||
|
||||
:raises: InvalidParameterValue if any connection parameters are
|
||||
incorrect, or if the desired power state is invalid.
|
||||
:raises: NodeNotFound.
|
||||
@ -412,9 +408,9 @@ class SSHPower(base.PowerInterface):
|
||||
:raises: SSHCommandFailed on an error from ssh.
|
||||
:raises: SSHConnectFailed if ssh failed to connect to the node.
|
||||
"""
|
||||
driver_info = _parse_driver_info(node)
|
||||
driver_info = _parse_driver_info(task.node)
|
||||
driver_info['macs'] = driver_utils.get_node_mac_addresses(task)
|
||||
ssh_obj = _get_connection(node)
|
||||
ssh_obj = _get_connection(task.node)
|
||||
|
||||
if pstate == states.POWER_ON:
|
||||
state = _power_on(ssh_obj, driver_info)
|
||||
@ -428,14 +424,12 @@ class SSHPower(base.PowerInterface):
|
||||
raise exception.PowerStateFailure(pstate=pstate)
|
||||
|
||||
@task_manager.require_exclusive_lock
|
||||
def reboot(self, task, node):
|
||||
"""Cycles the power to a node.
|
||||
def reboot(self, task):
|
||||
"""Cycles the power to the task's node.
|
||||
|
||||
Power cycles a node.
|
||||
|
||||
:param task: An instance of `ironic.manager.task_manager.TaskManager`.
|
||||
:param node: A single node.
|
||||
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: InvalidParameterValue if any connection parameters are
|
||||
incorrect.
|
||||
:raises: NodeNotFound.
|
||||
@ -443,9 +437,9 @@ class SSHPower(base.PowerInterface):
|
||||
:raises: SSHCommandFailed on an error from ssh.
|
||||
:raises: SSHConnectFailed if ssh failed to connect to the node.
|
||||
"""
|
||||
driver_info = _parse_driver_info(node)
|
||||
driver_info = _parse_driver_info(task.node)
|
||||
driver_info['macs'] = driver_utils.get_node_mac_addresses(task)
|
||||
ssh_obj = _get_connection(node)
|
||||
ssh_obj = _get_connection(task.node)
|
||||
current_pstate = _get_power_status(ssh_obj, driver_info)
|
||||
if current_pstate == states.POWER_ON:
|
||||
_power_off(ssh_obj, driver_info)
|
||||
|
@ -85,11 +85,10 @@ class NodePowerActionTestCase(base.DbTestCase):
|
||||
as get_power_mock:
|
||||
get_power_mock.return_value = states.POWER_OFF
|
||||
|
||||
conductor_utils.node_power_action(task, task.node,
|
||||
states.POWER_ON)
|
||||
conductor_utils.node_power_action(task, states.POWER_ON)
|
||||
|
||||
node.refresh()
|
||||
get_power_mock.assert_called_once_with(mock.ANY, mock.ANY)
|
||||
get_power_mock.assert_called_once_with(mock.ANY)
|
||||
self.assertEqual(states.POWER_ON, node['power_state'])
|
||||
self.assertIsNone(node['target_power_state'])
|
||||
self.assertIsNone(node['last_error'])
|
||||
@ -106,11 +105,10 @@ class NodePowerActionTestCase(base.DbTestCase):
|
||||
as get_power_mock:
|
||||
get_power_mock.return_value = states.POWER_ON
|
||||
|
||||
conductor_utils.node_power_action(task, task.node,
|
||||
states.POWER_OFF)
|
||||
conductor_utils.node_power_action(task, states.POWER_OFF)
|
||||
|
||||
node.refresh()
|
||||
get_power_mock.assert_called_once_with(mock.ANY, mock.ANY)
|
||||
get_power_mock.assert_called_once_with(mock.ANY)
|
||||
self.assertEqual(states.POWER_OFF, node['power_state'])
|
||||
self.assertIsNone(node['target_power_state'])
|
||||
self.assertIsNone(node['last_error'])
|
||||
@ -124,11 +122,10 @@ class NodePowerActionTestCase(base.DbTestCase):
|
||||
task = task_manager.TaskManager(self.context, node.uuid)
|
||||
|
||||
with mock.patch.object(self.driver.power, 'reboot') as reboot_mock:
|
||||
conductor_utils.node_power_action(task, task.node,
|
||||
states.REBOOT)
|
||||
conductor_utils.node_power_action(task, states.REBOOT)
|
||||
|
||||
node.refresh()
|
||||
reboot_mock.assert_called_once_with(mock.ANY, mock.ANY)
|
||||
reboot_mock.assert_called_once_with(mock.ANY)
|
||||
self.assertEqual(states.POWER_ON, node['power_state'])
|
||||
self.assertIsNone(node['target_power_state'])
|
||||
self.assertIsNone(node['last_error'])
|
||||
@ -150,18 +147,16 @@ class NodePowerActionTestCase(base.DbTestCase):
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
conductor_utils.node_power_action,
|
||||
task,
|
||||
task.node,
|
||||
"INVALID_POWER_STATE")
|
||||
|
||||
node.refresh()
|
||||
get_power_mock.assert_called_once_with(mock.ANY, mock.ANY)
|
||||
get_power_mock.assert_called_once_with(mock.ANY)
|
||||
self.assertEqual(states.POWER_ON, node['power_state'])
|
||||
self.assertIsNone(node['target_power_state'])
|
||||
self.assertIsNotNone(node['last_error'])
|
||||
|
||||
# last_error is cleared when a new transaction happens
|
||||
conductor_utils.node_power_action(task, task.node,
|
||||
states.POWER_OFF)
|
||||
conductor_utils.node_power_action(task, states.POWER_OFF)
|
||||
node.refresh()
|
||||
self.assertEqual(states.POWER_OFF, node['power_state'])
|
||||
self.assertIsNone(node['target_power_state'])
|
||||
@ -181,8 +176,7 @@ class NodePowerActionTestCase(base.DbTestCase):
|
||||
target_power_state=states.POWER_OFF)
|
||||
task = task_manager.TaskManager(self.context, node.uuid)
|
||||
|
||||
conductor_utils.node_power_action(task, task.node,
|
||||
states.POWER_OFF)
|
||||
conductor_utils.node_power_action(task, states.POWER_OFF)
|
||||
|
||||
node.refresh()
|
||||
self.assertEqual(states.POWER_OFF, node['power_state'])
|
||||
@ -206,11 +200,10 @@ class NodePowerActionTestCase(base.DbTestCase):
|
||||
|
||||
with mock.patch.object(self.driver.power, 'set_power_state') \
|
||||
as set_power_mock:
|
||||
conductor_utils.node_power_action(task, task.node,
|
||||
states.POWER_ON)
|
||||
conductor_utils.node_power_action(task, states.POWER_ON)
|
||||
|
||||
node.refresh()
|
||||
get_power_mock.assert_called_once_with(mock.ANY, mock.ANY)
|
||||
get_power_mock.assert_called_once_with(mock.ANY)
|
||||
self.assertFalse(set_power_mock.called,
|
||||
"set_power_state unexpectedly called")
|
||||
self.assertEqual(states.POWER_ON, node['power_state'])
|
||||
@ -235,11 +228,10 @@ class NodePowerActionTestCase(base.DbTestCase):
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
conductor_utils.node_power_action,
|
||||
task,
|
||||
task.node,
|
||||
states.POWER_ON)
|
||||
|
||||
node.refresh()
|
||||
get_power_state_mock.assert_called_once_with(mock.ANY, mock.ANY)
|
||||
get_power_state_mock.assert_called_once_with(mock.ANY)
|
||||
self.assertEqual(states.POWER_ON, node['power_state'])
|
||||
self.assertIsNone(node['target_power_state'])
|
||||
self.assertIsNotNone(node['last_error'])
|
||||
@ -265,12 +257,11 @@ class NodePowerActionTestCase(base.DbTestCase):
|
||||
exception.IronicException,
|
||||
conductor_utils.node_power_action,
|
||||
task,
|
||||
task.node,
|
||||
states.POWER_ON)
|
||||
|
||||
node.refresh()
|
||||
get_power_mock.assert_called_once_with(mock.ANY, mock.ANY)
|
||||
set_power_mock.assert_called_once_with(mock.ANY, mock.ANY,
|
||||
get_power_mock.assert_called_once_with(mock.ANY)
|
||||
set_power_mock.assert_called_once_with(mock.ANY,
|
||||
states.POWER_ON)
|
||||
self.assertEqual(states.POWER_OFF, node['power_state'])
|
||||
self.assertIsNone(node['target_power_state'])
|
||||
|
@ -164,7 +164,7 @@ class ManagerTestCase(tests_db_base.DbTestCase):
|
||||
states.POWER_ON)
|
||||
self.service._worker_pool.waitall()
|
||||
|
||||
get_power_mock.assert_called_once_with(mock.ANY, mock.ANY)
|
||||
get_power_mock.assert_called_once_with(mock.ANY)
|
||||
node.refresh()
|
||||
self.assertEqual(states.POWER_ON, node.power_state)
|
||||
self.assertIsNone(node.target_power_state)
|
||||
@ -223,7 +223,7 @@ class ManagerTestCase(tests_db_base.DbTestCase):
|
||||
self.assertEqual(exception.NoFreeConductorWorker, exc.exc_info[0])
|
||||
|
||||
spawn_mock.assert_called_once_with(mock.ANY, mock.ANY,
|
||||
mock.ANY, mock.ANY)
|
||||
mock.ANY)
|
||||
node.refresh()
|
||||
self.assertEqual(initial_state, node.power_state)
|
||||
self.assertIsNone(node.target_power_state)
|
||||
@ -256,9 +256,8 @@ class ManagerTestCase(tests_db_base.DbTestCase):
|
||||
new_state)
|
||||
self.service._worker_pool.waitall()
|
||||
|
||||
get_power_mock.assert_called_once_with(mock.ANY, mock.ANY)
|
||||
set_power_mock.assert_called_once_with(mock.ANY, mock.ANY,
|
||||
new_state)
|
||||
get_power_mock.assert_called_once_with(mock.ANY)
|
||||
set_power_mock.assert_called_once_with(mock.ANY, new_state)
|
||||
node.refresh()
|
||||
self.assertEqual(initial_state, node.power_state)
|
||||
self.assertIsNone(node.target_power_state)
|
||||
@ -1248,8 +1247,7 @@ class ManagerDoSyncPowerStateTestCase(tests_base.TestCase):
|
||||
self._do_sync_power_state('fake-power', 'fake-power')
|
||||
|
||||
self.assertFalse(self.power.validate.called)
|
||||
self.power.get_power_state.assert_called_once_with(self.task,
|
||||
self.node)
|
||||
self.power.get_power_state.assert_called_once_with(self.task)
|
||||
self.assertEqual('fake-power', self.node.power_state)
|
||||
self.assertFalse(self.node.save.called)
|
||||
self.assertFalse(node_power_action.called)
|
||||
@ -1258,8 +1256,7 @@ class ManagerDoSyncPowerStateTestCase(tests_base.TestCase):
|
||||
self._do_sync_power_state(None, states.POWER_ON)
|
||||
|
||||
self.power.validate.assert_called_once_with(self.task, self.node)
|
||||
self.power.get_power_state.assert_called_once_with(self.task,
|
||||
self.node)
|
||||
self.power.get_power_state.assert_called_once_with(self.task)
|
||||
self.node.save.assert_called_once_with(self.context)
|
||||
self.assertFalse(node_power_action.called)
|
||||
self.assertEqual(states.POWER_ON, self.node.power_state)
|
||||
@ -1268,7 +1265,7 @@ class ManagerDoSyncPowerStateTestCase(tests_base.TestCase):
|
||||
self._do_sync_power_state(None, states.POWER_ON,
|
||||
fail_validate=True)
|
||||
|
||||
self.power.validate.assert_called_once_with(self.task, self.node)
|
||||
self.power.validate.assert_called_once_with(self.task, self.task.node)
|
||||
self.assertFalse(self.power.get_power_state.called)
|
||||
self.assertFalse(self.node.save.called)
|
||||
self.assertFalse(node_power_action.called)
|
||||
@ -1279,8 +1276,7 @@ class ManagerDoSyncPowerStateTestCase(tests_base.TestCase):
|
||||
exception.IronicException('foo'))
|
||||
|
||||
self.assertFalse(self.power.validate.called)
|
||||
self.power.get_power_state.assert_called_once_with(self.task,
|
||||
self.node)
|
||||
self.power.get_power_state.assert_called_once_with(self.task)
|
||||
self.assertFalse(self.node.save.called)
|
||||
self.assertFalse(node_power_action.called)
|
||||
self.assertEqual('fake', self.node.power_state)
|
||||
@ -1291,8 +1287,7 @@ class ManagerDoSyncPowerStateTestCase(tests_base.TestCase):
|
||||
self._do_sync_power_state(states.POWER_ON, states.POWER_OFF)
|
||||
|
||||
self.assertFalse(self.power.validate.called)
|
||||
self.power.get_power_state.assert_called_once_with(self.task,
|
||||
self.node)
|
||||
self.power.get_power_state.assert_called_once_with(self.task)
|
||||
self.node.save.assert_called_once_with(self.context)
|
||||
self.assertFalse(node_power_action.called)
|
||||
self.assertEqual(states.POWER_OFF, self.node.power_state)
|
||||
@ -1304,11 +1299,9 @@ class ManagerDoSyncPowerStateTestCase(tests_base.TestCase):
|
||||
self._do_sync_power_state(states.POWER_ON, states.POWER_OFF)
|
||||
|
||||
self.assertFalse(self.power.validate.called)
|
||||
self.power.get_power_state.assert_called_once_with(self.task,
|
||||
self.node)
|
||||
self.power.get_power_state.assert_called_once_with(self.task)
|
||||
self.assertFalse(self.node.save.called)
|
||||
node_power_action.assert_called_once_with(self.task, self.node,
|
||||
states.POWER_ON)
|
||||
node_power_action.assert_called_once_with(self.task, states.POWER_ON)
|
||||
self.assertEqual(states.POWER_ON, self.node.power_state)
|
||||
|
||||
def test_state_changed_sync_failed(self, node_power_action):
|
||||
@ -1319,11 +1312,9 @@ class ManagerDoSyncPowerStateTestCase(tests_base.TestCase):
|
||||
|
||||
# Just testing that this test doesn't raise.
|
||||
self.assertFalse(self.power.validate.called)
|
||||
self.power.get_power_state.assert_called_once_with(self.task,
|
||||
self.node)
|
||||
self.power.get_power_state.assert_called_once_with(self.task)
|
||||
self.assertFalse(self.node.save.called)
|
||||
node_power_action.assert_called_once_with(self.task, self.node,
|
||||
states.POWER_ON)
|
||||
node_power_action.assert_called_once_with(self.task, states.POWER_ON)
|
||||
self.assertEqual(states.POWER_ON, self.node.power_state)
|
||||
self.assertEqual(1,
|
||||
self.service.power_state_sync_count[self.node.uuid])
|
||||
@ -1336,12 +1327,11 @@ class ManagerDoSyncPowerStateTestCase(tests_base.TestCase):
|
||||
states.POWER_OFF])
|
||||
|
||||
self.assertFalse(self.power.validate.called)
|
||||
power_exp_calls = [mock.call(self.task, self.node)] * 2
|
||||
power_exp_calls = [mock.call(self.task)] * 2
|
||||
self.assertEqual(power_exp_calls,
|
||||
self.power.get_power_state.call_args_list)
|
||||
self.node.save.assert_called_once_with(self.context)
|
||||
node_power_action.assert_called_once_with(self.task, self.node,
|
||||
states.POWER_ON)
|
||||
node_power_action.assert_called_once_with(self.task, states.POWER_ON)
|
||||
self.assertEqual(states.POWER_OFF, self.node.power_state)
|
||||
self.assertEqual(1,
|
||||
self.service.power_state_sync_count[self.node.uuid])
|
||||
@ -1355,12 +1345,11 @@ class ManagerDoSyncPowerStateTestCase(tests_base.TestCase):
|
||||
states.POWER_OFF])
|
||||
|
||||
self.assertFalse(self.power.validate.called)
|
||||
power_exp_calls = [mock.call(self.task, self.node)] * 3
|
||||
power_exp_calls = [mock.call(self.task)] * 3
|
||||
self.assertEqual(power_exp_calls,
|
||||
self.power.get_power_state.call_args_list)
|
||||
self.node.save.assert_called_once_with(self.context)
|
||||
npa_exp_calls = [mock.call(self.task, self.node,
|
||||
states.POWER_ON)] * 2
|
||||
npa_exp_calls = [mock.call(self.task, states.POWER_ON)] * 2
|
||||
self.assertEqual(npa_exp_calls, node_power_action.call_args_list)
|
||||
self.assertEqual(states.POWER_OFF, self.node.power_state)
|
||||
self.assertEqual(2,
|
||||
@ -1375,12 +1364,11 @@ class ManagerDoSyncPowerStateTestCase(tests_base.TestCase):
|
||||
states.POWER_ON])
|
||||
|
||||
self.assertFalse(self.power.validate.called)
|
||||
power_exp_calls = [mock.call(self.task, self.node)] * 3
|
||||
power_exp_calls = [mock.call(self.task)] * 3
|
||||
self.assertEqual(power_exp_calls,
|
||||
self.power.get_power_state.call_args_list)
|
||||
self.assertFalse(self.node.save.called)
|
||||
npa_exp_calls = [mock.call(self.task, self.node,
|
||||
states.POWER_ON)] * 2
|
||||
npa_exp_calls = [mock.call(self.task, states.POWER_ON)] * 2
|
||||
self.assertEqual(npa_exp_calls, node_power_action.call_args_list)
|
||||
self.assertEqual(states.POWER_ON, self.node.power_state)
|
||||
self.assertNotIn(self.node.uuid, self.service.power_state_sync_count)
|
||||
|
@ -55,13 +55,12 @@ class FakeDriverTestCase(base.TestCase):
|
||||
|
||||
def test_power_interface(self):
|
||||
self.driver.power.validate(self.task, self.node)
|
||||
self.driver.power.get_power_state(self.task, self.node)
|
||||
self.driver.power.get_power_state(self.task)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.power.set_power_state,
|
||||
self.task, self.node, states.NOSTATE)
|
||||
self.driver.power.set_power_state(self.task, self.node,
|
||||
states.POWER_ON)
|
||||
self.driver.power.reboot(self.task, self.node)
|
||||
self.task, states.NOSTATE)
|
||||
self.driver.power.set_power_state(self.task, states.POWER_ON)
|
||||
self.driver.power.reboot(self.task)
|
||||
|
||||
def test_deploy_interface(self):
|
||||
self.driver.deploy.validate(None, self.node)
|
||||
|
@ -154,17 +154,18 @@ class IPMINativeDriverTestCase(db_base.DbTestCase):
|
||||
|
||||
get_power_mock.side_effect = lambda: return_values.pop()
|
||||
|
||||
pstate = self.driver.power.get_power_state(None, self.node)
|
||||
self.assertEqual(states.POWER_OFF, pstate)
|
||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||
pstate = self.driver.power.get_power_state(task)
|
||||
self.assertEqual(states.POWER_OFF, pstate)
|
||||
|
||||
pstate = self.driver.power.get_power_state(None, self.node)
|
||||
self.assertEqual(states.POWER_ON, pstate)
|
||||
pstate = self.driver.power.get_power_state(task)
|
||||
self.assertEqual(states.POWER_ON, pstate)
|
||||
|
||||
pstate = self.driver.power.get_power_state(None, self.node)
|
||||
self.assertEqual(states.ERROR, pstate)
|
||||
self.assertEqual(3, get_power_mock.call_count,
|
||||
"pyghmi.ipmi.command.Command.get_power was not"
|
||||
" called 3 times.")
|
||||
pstate = self.driver.power.get_power_state(task)
|
||||
self.assertEqual(states.ERROR, pstate)
|
||||
self.assertEqual(3, get_power_mock.call_count,
|
||||
"pyghmi.ipmi.command.Command.get_power was not"
|
||||
" called 3 times.")
|
||||
|
||||
@mock.patch.object(ipminative, '_power_on')
|
||||
def test_set_power_on_ok(self, power_on_mock):
|
||||
@ -173,7 +174,7 @@ class IPMINativeDriverTestCase(db_base.DbTestCase):
|
||||
with task_manager.acquire(self.context,
|
||||
[self.node.uuid]) as task:
|
||||
self.driver.power.set_power_state(
|
||||
task, self.node, states.POWER_ON)
|
||||
task, states.POWER_ON)
|
||||
power_on_mock.assert_called_once_with(self.info)
|
||||
|
||||
@mock.patch.object(ipminative, '_power_off')
|
||||
@ -183,7 +184,7 @@ class IPMINativeDriverTestCase(db_base.DbTestCase):
|
||||
with task_manager.acquire(self.context,
|
||||
[self.node.uuid]) as task:
|
||||
self.driver.power.set_power_state(
|
||||
task, self.node, states.POWER_OFF)
|
||||
task, states.POWER_OFF)
|
||||
power_off_mock.assert_called_once_with(self.info)
|
||||
|
||||
@mock.patch('pyghmi.ipmi.command.Command')
|
||||
@ -197,7 +198,6 @@ class IPMINativeDriverTestCase(db_base.DbTestCase):
|
||||
self.assertRaises(exception.PowerStateFailure,
|
||||
self.driver.power.set_power_state,
|
||||
task,
|
||||
self.node,
|
||||
states.POWER_ON)
|
||||
ipmicmd.set_power.assert_called_once_with('on', 500)
|
||||
|
||||
@ -224,7 +224,7 @@ class IPMINativeDriverTestCase(db_base.DbTestCase):
|
||||
|
||||
with task_manager.acquire(self.context,
|
||||
[self.node.uuid]) as task:
|
||||
self.driver.power.reboot(task, self.node)
|
||||
self.driver.power.reboot(task)
|
||||
reboot_mock.assert_called_once_with(self.info)
|
||||
|
||||
@mock.patch('pyghmi.ipmi.command.Command')
|
||||
@ -237,8 +237,7 @@ class IPMINativeDriverTestCase(db_base.DbTestCase):
|
||||
[self.node.uuid]) as task:
|
||||
self.assertRaises(exception.PowerStateFailure,
|
||||
self.driver.power.reboot,
|
||||
task,
|
||||
self.node)
|
||||
task)
|
||||
ipmicmd.set_power.assert_called_once_with('boot', 500)
|
||||
|
||||
def test_vendor_passthru_validate__set_boot_device_good(self):
|
||||
|
@ -278,24 +278,25 @@ class IPMIToolDriverTestCase(db_base.DbTestCase):
|
||||
mock.call(self.info, "power status")]
|
||||
mock_exec.side_effect = returns
|
||||
|
||||
pstate = self.driver.power.get_power_state(None, self.node)
|
||||
self.assertEqual(states.POWER_OFF, pstate)
|
||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||
pstate = self.driver.power.get_power_state(task)
|
||||
self.assertEqual(states.POWER_OFF, pstate)
|
||||
|
||||
pstate = self.driver.power.get_power_state(None, self.node)
|
||||
self.assertEqual(states.POWER_ON, pstate)
|
||||
pstate = self.driver.power.get_power_state(task)
|
||||
self.assertEqual(states.POWER_ON, pstate)
|
||||
|
||||
pstate = self.driver.power.get_power_state(None, self.node)
|
||||
self.assertEqual(states.ERROR, pstate)
|
||||
pstate = self.driver.power.get_power_state(task)
|
||||
self.assertEqual(states.ERROR, pstate)
|
||||
|
||||
self.assertEqual(mock_exec.call_args_list, expected)
|
||||
|
||||
@mock.patch.object(ipmi, '_exec_ipmitool', autospec=True)
|
||||
def test_get_power_state_exception(self, mock_exec):
|
||||
mock_exec.side_effect = processutils.ProcessExecutionError("error")
|
||||
self.assertRaises(exception.IPMIFailure,
|
||||
self.driver.power.get_power_state,
|
||||
None,
|
||||
self.node)
|
||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||
self.assertRaises(exception.IPMIFailure,
|
||||
self.driver.power.get_power_state,
|
||||
task)
|
||||
mock_exec.assert_called_once_with(self.info, "power status")
|
||||
|
||||
@mock.patch.object(ipmi, '_power_on', autospec=True)
|
||||
@ -307,7 +308,6 @@ class IPMIToolDriverTestCase(db_base.DbTestCase):
|
||||
with task_manager.acquire(self.context,
|
||||
[self.node['uuid']]) as task:
|
||||
self.driver.power.set_power_state(task,
|
||||
self.node,
|
||||
states.POWER_ON)
|
||||
|
||||
mock_on.assert_called_once_with(self.info)
|
||||
@ -323,7 +323,6 @@ class IPMIToolDriverTestCase(db_base.DbTestCase):
|
||||
with task_manager.acquire(self.context,
|
||||
[self.node['uuid']]) as task:
|
||||
self.driver.power.set_power_state(task,
|
||||
self.node,
|
||||
states.POWER_OFF)
|
||||
|
||||
mock_off.assert_called_once_with(self.info)
|
||||
@ -340,7 +339,6 @@ class IPMIToolDriverTestCase(db_base.DbTestCase):
|
||||
self.assertRaises(exception.PowerStateFailure,
|
||||
self.driver.power.set_power_state,
|
||||
task,
|
||||
self.node,
|
||||
states.POWER_ON)
|
||||
|
||||
mock_on.assert_called_once_with(self.info)
|
||||
@ -351,7 +349,6 @@ class IPMIToolDriverTestCase(db_base.DbTestCase):
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.driver.power.set_power_state,
|
||||
task,
|
||||
self.node,
|
||||
"fake state")
|
||||
|
||||
@mock.patch.object(ipmi, '_exec_ipmitool', autospec=True)
|
||||
@ -384,7 +381,7 @@ class IPMIToolDriverTestCase(db_base.DbTestCase):
|
||||
|
||||
with task_manager.acquire(self.context,
|
||||
[self.node['uuid']]) as task:
|
||||
self.driver.power.reboot(task, self.node)
|
||||
self.driver.power.reboot(task)
|
||||
|
||||
self.assertEqual(manager.mock_calls, expected)
|
||||
|
||||
@ -403,8 +400,7 @@ class IPMIToolDriverTestCase(db_base.DbTestCase):
|
||||
[self.node['uuid']]) as task:
|
||||
self.assertRaises(exception.PowerStateFailure,
|
||||
self.driver.power.reboot,
|
||||
task,
|
||||
self.node)
|
||||
task)
|
||||
|
||||
self.assertEqual(manager.mock_calls, expected)
|
||||
|
||||
|
@ -698,8 +698,7 @@ class PXEDriverTestCase(db_base.DbTestCase):
|
||||
mock_update_neutron.assert_called_once_with(task)
|
||||
mock_node_set_boot.assert_called_once_with(task, 'pxe',
|
||||
persistent=True)
|
||||
mock_node_power_action.assert_called_once_with(task, task.node,
|
||||
states.REBOOT)
|
||||
mock_node_power_action.assert_called_once_with(task, states.REBOOT)
|
||||
|
||||
# ensure token file created
|
||||
t_path = pxe._get_token_file_path(self.node.uuid)
|
||||
@ -732,8 +731,7 @@ class PXEDriverTestCase(db_base.DbTestCase):
|
||||
self.node.uuid) as task:
|
||||
state = task.driver.deploy.tear_down(task)
|
||||
self.assertEqual(states.DELETED, state)
|
||||
node_power_mock.assert_called_once_with(task, task.node,
|
||||
states.POWER_OFF)
|
||||
node_power_mock.assert_called_once_with(task, states.POWER_OFF)
|
||||
|
||||
@mock.patch.object(manager_utils, 'node_power_action')
|
||||
def test_tear_down_removes_internal_attrs(self, mock_npa):
|
||||
@ -746,7 +744,7 @@ class PXEDriverTestCase(db_base.DbTestCase):
|
||||
self.node.save()
|
||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||
task.driver.deploy.tear_down(task)
|
||||
mock_npa.assert_called_once_with(task, task.node, states.POWER_OFF)
|
||||
mock_npa.assert_called_once_with(task, states.POWER_OFF)
|
||||
|
||||
self.node.refresh()
|
||||
self.assertNotIn('pxe_deploy_key', self.node.driver_info)
|
||||
|
@ -305,9 +305,9 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
||||
|
||||
with task_manager.acquire(self.context, [info['uuid']],
|
||||
shared=False) as task:
|
||||
task.resources[0].driver.power.reboot(task, self.node)
|
||||
task.resources[0].driver.power.reboot(task)
|
||||
|
||||
mock_reboot.assert_called_once_with(self.node)
|
||||
mock_reboot.assert_called_once_with(task.node)
|
||||
|
||||
def test_set_power_state_bad_state(self):
|
||||
info = seamicro ._parse_driver_info(self.node)
|
||||
@ -318,7 +318,7 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
||||
shared=False) as task:
|
||||
self.assertRaises(exception.IronicException,
|
||||
task.resources[0].driver.power.set_power_state,
|
||||
task, self.node, "BAD_PSTATE")
|
||||
task, "BAD_PSTATE")
|
||||
self.get_server_patcher.stop()
|
||||
|
||||
@mock.patch.object(seamicro, '_power_on')
|
||||
@ -330,10 +330,9 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
||||
with task_manager.acquire(self.context, [info['uuid']],
|
||||
shared=False) as task:
|
||||
task.resources[0].driver.power.set_power_state(task,
|
||||
self.node,
|
||||
states.POWER_ON)
|
||||
|
||||
mock_power_on.assert_called_once_with(self.node)
|
||||
mock_power_on.assert_called_once_with(task.node)
|
||||
|
||||
@mock.patch.object(seamicro, '_power_on')
|
||||
def test_set_power_state_on_fail(self, mock_power_on):
|
||||
@ -346,9 +345,9 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
||||
self.assertRaises(exception.PowerStateFailure,
|
||||
task.resources[0]
|
||||
.driver.power.set_power_state,
|
||||
task, self.node, states.POWER_ON)
|
||||
task, states.POWER_ON)
|
||||
|
||||
mock_power_on.assert_called_once_with(self.node)
|
||||
mock_power_on.assert_called_once_with(task.node)
|
||||
|
||||
@mock.patch.object(seamicro, '_power_off')
|
||||
def test_set_power_state_off_good(self, mock_power_off):
|
||||
@ -359,9 +358,9 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
||||
with task_manager.acquire(self.context, [info['uuid']],
|
||||
shared=False) as task:
|
||||
task.resources[0].driver.power.\
|
||||
set_power_state(task, self.node, states.POWER_OFF)
|
||||
set_power_state(task, states.POWER_OFF)
|
||||
|
||||
mock_power_off.assert_called_once_with(self.node)
|
||||
mock_power_off.assert_called_once_with(task.node)
|
||||
|
||||
@mock.patch.object(seamicro, '_power_off')
|
||||
def test_set_power_state_off_fail(self, mock_power_off):
|
||||
@ -374,9 +373,9 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
||||
self.assertRaises(exception.PowerStateFailure,
|
||||
task.resources[0]
|
||||
.driver.power.set_power_state,
|
||||
task, self.node, states.POWER_OFF)
|
||||
task, states.POWER_OFF)
|
||||
|
||||
mock_power_off.assert_called_once_with(self.node)
|
||||
mock_power_off.assert_called_once_with(task.node)
|
||||
|
||||
def test_vendor_passthru_validate_good(self):
|
||||
with task_manager.acquire(self.context, [self.node['uuid']],
|
||||
|
@ -614,14 +614,15 @@ class SSHDriverTestCase(db_base.DbTestCase):
|
||||
parse_drv_info_mock.return_value = info
|
||||
with task_manager.acquire(self.context, [info['uuid']],
|
||||
shared=False) as task:
|
||||
task.resources[0].driver.power.reboot(task, self.node)
|
||||
task.resources[0].driver.power.reboot(task)
|
||||
|
||||
parse_drv_info_mock.assert_called_once_with(self.node)
|
||||
get_mac_addr_mock.assert_called_once_with(mock.ANY)
|
||||
get_conn_mock.assert_called_once_with(self.node)
|
||||
get_power_stat_mock.assert_called_once_with(self.sshclient, info)
|
||||
power_off_mock.assert_called_once_with(self.sshclient, info)
|
||||
power_on_mock.assert_called_once_with(self.sshclient, info)
|
||||
parse_drv_info_mock.assert_called_once_with(task.node)
|
||||
get_mac_addr_mock.assert_called_once_with(mock.ANY)
|
||||
get_conn_mock.assert_called_once_with(task.node)
|
||||
get_power_stat_mock.assert_called_once_with(self.sshclient,
|
||||
info)
|
||||
power_off_mock.assert_called_once_with(self.sshclient, info)
|
||||
power_on_mock.assert_called_once_with(self.sshclient, info)
|
||||
|
||||
@mock.patch.object(driver_utils, 'get_node_mac_addresses')
|
||||
@mock.patch.object(ssh, '_get_connection')
|
||||
@ -645,14 +646,14 @@ class SSHDriverTestCase(db_base.DbTestCase):
|
||||
shared=False) as task:
|
||||
self.assertRaises(exception.PowerStateFailure,
|
||||
task.resources[0].driver.power.reboot,
|
||||
task,
|
||||
self.node)
|
||||
parse_drv_info_mock.assert_called_once_with(self.node)
|
||||
get_mac_addr_mock.assert_called_once_with(mock.ANY)
|
||||
get_conn_mock.assert_called_once_with(self.node)
|
||||
get_power_stat_mock.assert_called_once_with(self.sshclient, info)
|
||||
power_off_mock.assert_called_once_with(self.sshclient, info)
|
||||
power_on_mock.assert_called_once_with(self.sshclient, info)
|
||||
task)
|
||||
parse_drv_info_mock.assert_called_once_with(task.node)
|
||||
get_mac_addr_mock.assert_called_once_with(mock.ANY)
|
||||
get_conn_mock.assert_called_once_with(task.node)
|
||||
get_power_stat_mock.assert_called_once_with(self.sshclient,
|
||||
info)
|
||||
power_off_mock.assert_called_once_with(self.sshclient, info)
|
||||
power_on_mock.assert_called_once_with(self.sshclient, info)
|
||||
|
||||
@mock.patch.object(driver_utils, 'get_node_mac_addresses')
|
||||
@mock.patch.object(ssh, '_get_connection')
|
||||
@ -671,12 +672,11 @@ class SSHDriverTestCase(db_base.DbTestCase):
|
||||
exception.InvalidParameterValue,
|
||||
task.resources[0].driver.power.set_power_state,
|
||||
task,
|
||||
self.node,
|
||||
"BAD_PSTATE")
|
||||
|
||||
parse_drv_info_mock.assert_called_once_with(self.node)
|
||||
get_mac_addr_mock.assert_called_once_with(mock.ANY)
|
||||
get_conn_mock.assert_called_once_with(self.node)
|
||||
parse_drv_info_mock.assert_called_once_with(task.node)
|
||||
get_mac_addr_mock.assert_called_once_with(mock.ANY)
|
||||
get_conn_mock.assert_called_once_with(task.node)
|
||||
|
||||
@mock.patch.object(driver_utils, 'get_node_mac_addresses')
|
||||
@mock.patch.object(ssh, '_get_connection')
|
||||
@ -693,13 +693,13 @@ class SSHDriverTestCase(db_base.DbTestCase):
|
||||
parse_drv_info_mock.return_value = info
|
||||
with task_manager.acquire(self.context, [info['uuid']],
|
||||
shared=False) as task:
|
||||
task.resources[0].driver.power.set_power_state(task, self.node,
|
||||
task.resources[0].driver.power.set_power_state(task,
|
||||
states.POWER_ON)
|
||||
|
||||
parse_drv_info_mock.assert_called_once_with(self.node)
|
||||
get_mac_addr_mock.assert_called_once_with(mock.ANY)
|
||||
get_conn_mock.assert_called_once_with(self.node)
|
||||
power_on_mock.assert_called_once_with(self.sshclient, info)
|
||||
parse_drv_info_mock.assert_called_once_with(task.node)
|
||||
get_mac_addr_mock.assert_called_once_with(mock.ANY)
|
||||
get_conn_mock.assert_called_once_with(task.node)
|
||||
power_on_mock.assert_called_once_with(self.sshclient, info)
|
||||
|
||||
@mock.patch.object(driver_utils, 'get_node_mac_addresses')
|
||||
@mock.patch.object(ssh, '_get_connection')
|
||||
@ -720,13 +720,12 @@ class SSHDriverTestCase(db_base.DbTestCase):
|
||||
exception.PowerStateFailure,
|
||||
task.resources[0].driver.power.set_power_state,
|
||||
task,
|
||||
self.node,
|
||||
states.POWER_ON)
|
||||
|
||||
parse_drv_info_mock.assert_called_once_with(self.node)
|
||||
get_mac_addr_mock.assert_called_once_with(mock.ANY)
|
||||
get_conn_mock.assert_called_once_with(self.node)
|
||||
power_on_mock.assert_called_once_with(self.sshclient, info)
|
||||
parse_drv_info_mock.assert_called_once_with(task.node)
|
||||
get_mac_addr_mock.assert_called_once_with(mock.ANY)
|
||||
get_conn_mock.assert_called_once_with(task.node)
|
||||
power_on_mock.assert_called_once_with(self.sshclient, info)
|
||||
|
||||
@mock.patch.object(driver_utils, 'get_node_mac_addresses')
|
||||
@mock.patch.object(ssh, '_get_connection')
|
||||
@ -744,12 +743,12 @@ class SSHDriverTestCase(db_base.DbTestCase):
|
||||
with task_manager.acquire(self.context, [info['uuid']],
|
||||
shared=False) as task:
|
||||
task.resources[0].driver.power.set_power_state(
|
||||
task, self.node, states.POWER_OFF)
|
||||
task, states.POWER_OFF)
|
||||
|
||||
parse_drv_info_mock.assert_called_once_with(self.node)
|
||||
get_mac_addr_mock.assert_called_once_with(mock.ANY)
|
||||
get_conn_mock.assert_called_once_with(self.node)
|
||||
power_off_mock.assert_called_once_with(self.sshclient, info)
|
||||
parse_drv_info_mock.assert_called_once_with(task.node)
|
||||
get_mac_addr_mock.assert_called_once_with(mock.ANY)
|
||||
get_conn_mock.assert_called_once_with(task.node)
|
||||
power_off_mock.assert_called_once_with(self.sshclient, info)
|
||||
|
||||
@mock.patch.object(driver_utils, 'get_node_mac_addresses')
|
||||
@mock.patch.object(ssh, '_get_connection')
|
||||
@ -770,10 +769,9 @@ class SSHDriverTestCase(db_base.DbTestCase):
|
||||
exception.PowerStateFailure,
|
||||
task.resources[0].driver.power.set_power_state,
|
||||
task,
|
||||
self.node,
|
||||
states.POWER_OFF)
|
||||
|
||||
parse_drv_info_mock.assert_called_once_with(self.node)
|
||||
get_mac_addr_mock.assert_called_once_with(mock.ANY)
|
||||
get_conn_mock.assert_called_once_with(self.node)
|
||||
power_off_mock.assert_called_once_with(self.sshclient, info)
|
||||
parse_drv_info_mock.assert_called_once_with(task.node)
|
||||
get_mac_addr_mock.assert_called_once_with(mock.ANY)
|
||||
get_conn_mock.assert_called_once_with(task.node)
|
||||
power_off_mock.assert_called_once_with(self.sshclient, info)
|
||||
|
Loading…
x
Reference in New Issue
Block a user