Merge "Fix SeaMicro driver post landing for ba207b4aa0"

This commit is contained in:
Jenkins 2014-03-05 01:57:40 +00:00 committed by Gerrit Code Review
commit 9654a4e968
1 changed files with 31 additions and 14 deletions

View File

@ -1,4 +1,3 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
@ -75,13 +74,14 @@ def _parse_driver_info(node):
:param node: An Ironic node object.
:returns: SeaMicro driver info.
:raises: InvalidParameterValue if any required parameters are missing.
"""
info = node.get('driver_info', {})
api_endpoint = info.get('seamicro_api_endpoint', None)
username = info.get('seamicro_username', None)
password = info.get('seamicro_password', None)
server_id = info.get('seamicro_server_id', None)
api_endpoint = info.get('seamicro_api_endpoint')
username = info.get('seamicro_username')
password = info.get('seamicro_password')
server_id = info.get('seamicro_server_id')
api_version = info.get('seamicro_api_version', "2")
if not api_endpoint:
@ -124,6 +124,9 @@ def _get_power_status(node):
"""Get current power state of this node
:param node: Ironic node one of :class:`ironic.db.models.Node`
:raises: InvalidParameterValue if required seamicro parameters are
missing.
:raises: ServiceUnavailable on an error from SeaMicro Client.
:returns: Power state of the given node
"""
@ -138,10 +141,10 @@ def _get_power_status(node):
return states.POWER_ON
except seamicro_client_exception.NotFound:
raise exception.NodeNotFound(node=seamicro_info['uuid'])
raise exception.NodeNotFound(node=node.uuid)
except seamicro_client_exception.ClientException as ex:
LOG.error(_("SeaMicro client exception %(msg)s for node %(uuid)s"),
{'msg': ex.message, 'uuid': seamicro_info['uuid']})
{'msg': ex.message, 'uuid': node.uuid})
raise exception.ServiceUnavailable(message=ex.message)
@ -150,6 +153,8 @@ def _power_on(node, timeout=None):
:param node: An Ironic node object.
:param timeout: Time in seconds to wait till power on is complete.
:raises: InvalidParameterValue if required seamicro parameters are
missing.
:returns: Power state of the given node.
"""
if timeout is None:
@ -174,7 +179,7 @@ def _power_on(node, timeout=None):
server.power_on()
except seamicro_client_exception.ClientException:
LOG.warning(_("Power-on failed for node %s."),
seamicro_info['uuid'])
node.uuid)
timer = loopingcall.FixedIntervalLoopingCall(_wait_for_power_on,
state, retries)
@ -187,6 +192,8 @@ def _power_off(node, timeout=None):
:param node: Ironic node one of :class:`ironic.db.models.Node`
:param timeout: Time in seconds to wait till power off is compelete
:raises: InvalidParameterValue if required seamicro parameters are
missing.
:returns: Power state of the given node
"""
if timeout is None:
@ -211,7 +218,7 @@ def _power_off(node, timeout=None):
server.power_off()
except seamicro_client_exception.ClientException:
LOG.warning(_("Power-off failed for node %s."),
seamicro_info['uuid'])
node.uuid)
timer = loopingcall.FixedIntervalLoopingCall(_wait_for_power_off,
state, retries)
@ -223,6 +230,8 @@ def _reboot(node, timeout=None):
"""Reboot this node
:param node: Ironic node one of :class:`ironic.db.models.Node`
:param timeout: Time in seconds to wait till reboot is compelete
:raises: InvalidParameterValue if required seamicro parameters are
missing.
:returns: Power state of the given node
"""
if timeout is None:
@ -248,7 +257,7 @@ def _reboot(node, timeout=None):
server.reset()
except seamicro_client_exception.ClientException:
LOG.warning(_("Reboot failed for node %s."),
seamicro_info['uuid'])
node.uuid)
timer = loopingcall.FixedIntervalLoopingCall(_wait_for_reboot,
state, retries)
@ -310,7 +319,8 @@ class Power(base.PowerInterface):
Check that node 'driver_info' contains the required fields.
:param node: Single node object.
:raises: InvalidParameterValue
:raises: InvalidParameterValue if required seamicro parameters are
missing.
"""
_parse_driver_info(node)
@ -321,7 +331,9 @@ class Power(base.PowerInterface):
:param task: A instance of `ironic.manager.task_manager.TaskManager`.
:param node: A single node.
: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)
@ -336,6 +348,8 @@ class Power(base.PowerInterface):
:param node: A single node.
:param pstate: Either POWER_ON or POWER_OFF from :class:
`ironic.common.states`.
:raises: InvalidParameterValue if an invalid power state was specified.
:raises: PowerStateFailure if the desired power state couldn't be set.
"""
if pstate == states.POWER_ON:
@ -343,7 +357,7 @@ class Power(base.PowerInterface):
elif pstate == states.POWER_OFF:
state = _power_off(node)
else:
raise exception.IronicException(_(
raise exception.InvalidParameterValue(_(
"set_power_state called with invalid power state."))
if state != pstate:
@ -355,7 +369,10 @@ class Power(base.PowerInterface):
:param task: a TaskManager instance.
:param node: An Ironic node object.
:raises: InvalidParameterValue if required seamicro parameters are
missing.
:raises: PowerStateFailure if the final state of the node is not
POWER_ON.
"""
state = _reboot(node)