Raise MissingParameterValue instead of Invalid
There are several functions that were raising InvalidParameterValue, when it should be a MissingParamenteValue. This way we can differentiate both exceptions when needed. Change-Id: Ia5ce05e30b3fb00261854857aeef46238a8b00f8
This commit is contained in:
parent
e8fc1cf7c5
commit
3419b38b11
|
@ -589,7 +589,7 @@ class NodesController(rest.RestController):
|
|||
maintenance, marker, limit, sort_key, sort_dir,
|
||||
expand=False, resource_url=None):
|
||||
if self.from_chassis and not chassis_uuid:
|
||||
raise exception.InvalidParameterValue(_(
|
||||
raise exception.MissingParameterValue(_(
|
||||
"Chassis id not specified."))
|
||||
|
||||
limit = api_utils.validate_limit(limit)
|
||||
|
|
|
@ -177,7 +177,7 @@ class PortsController(rest.RestController):
|
|||
sort_key, sort_dir, expand=False,
|
||||
resource_url=None):
|
||||
if self.from_nodes and not node_uuid:
|
||||
raise exception.InvalidParameterValue(_(
|
||||
raise exception.MissingParameterValue(_(
|
||||
"Node id not specified."))
|
||||
|
||||
limit = api_utils.validate_limit(limit)
|
||||
|
|
|
@ -181,6 +181,10 @@ class InvalidParameterValue(Invalid):
|
|||
message = _("%(err)s")
|
||||
|
||||
|
||||
class MissingParameterValue(InvalidParameterValue):
|
||||
message = _("%(err)s")
|
||||
|
||||
|
||||
class NotFound(IronicException):
|
||||
message = _("Resource could not be found.")
|
||||
code = 404
|
||||
|
|
|
@ -230,6 +230,7 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
return self.run_periodic_tasks(context, raise_on_error=raise_on_error)
|
||||
|
||||
@messaging.expected_exceptions(exception.InvalidParameterValue,
|
||||
exception.MissingParameterValue,
|
||||
exception.NodeLocked,
|
||||
exception.NodeInWrongPowerState)
|
||||
def update_node(self, context, node_obj):
|
||||
|
@ -273,6 +274,7 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
return node_obj
|
||||
|
||||
@messaging.expected_exceptions(exception.InvalidParameterValue,
|
||||
exception.MissingParameterValue,
|
||||
exception.NoFreeConductorWorker,
|
||||
exception.NodeLocked)
|
||||
def change_node_power_state(self, context, node_id, new_state):
|
||||
|
@ -303,7 +305,8 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
@messaging.expected_exceptions(exception.NoFreeConductorWorker,
|
||||
exception.NodeLocked,
|
||||
exception.InvalidParameterValue,
|
||||
exception.UnsupportedDriverExtension)
|
||||
exception.UnsupportedDriverExtension,
|
||||
exception.MissingParameterValue)
|
||||
def vendor_passthru(self, context, node_id, driver_method, info):
|
||||
"""RPC method to encapsulate vendor action.
|
||||
|
||||
|
@ -316,6 +319,7 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
:param driver_method: the name of the vendor method.
|
||||
:param info: vendor method args.
|
||||
:raises: InvalidParameterValue if supplied info is not valid.
|
||||
:raises: MissingParameterValue if missing supplied info
|
||||
:raises: UnsupportedDriverExtension if current driver does not have
|
||||
vendor interface or method is unsupported.
|
||||
:raises: NoFreeConductorWorker when there is no free worker to start
|
||||
|
@ -340,6 +344,7 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
method=driver_method, **info)
|
||||
|
||||
@messaging.expected_exceptions(exception.InvalidParameterValue,
|
||||
exception.MissingParameterValue,
|
||||
exception.UnsupportedDriverExtension,
|
||||
exception.DriverNotFound)
|
||||
def driver_vendor_passthru(self, context, driver_name, driver_method,
|
||||
|
@ -352,6 +357,7 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
:param driver_name: name of the driver on which to call the method.
|
||||
:param driver_method: name of the vendor method, for use by the driver.
|
||||
:param info: user-supplied data to pass through to the driver.
|
||||
:raises: MissingParameterValue if missing supplied info
|
||||
:raises: InvalidParameterValue if supplied info is not valid.
|
||||
:raises: UnsupportedDriverExtension if current driver does not have
|
||||
vendor interface, if the vendor interface does not implement
|
||||
|
@ -404,7 +410,9 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
@messaging.expected_exceptions(exception.NoFreeConductorWorker,
|
||||
exception.NodeLocked,
|
||||
exception.NodeInMaintenance,
|
||||
exception.InstanceDeployFailure)
|
||||
exception.InstanceDeployFailure,
|
||||
exception.InvalidParameterValue,
|
||||
exception.MissingParameterValue)
|
||||
def do_node_deploy(self, context, node_id, rebuild=False):
|
||||
"""RPC method to initiate deployment to a node.
|
||||
|
||||
|
@ -451,7 +459,8 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
|
||||
try:
|
||||
task.driver.deploy.validate(task)
|
||||
except exception.InvalidParameterValue as e:
|
||||
except (exception.InvalidParameterValue,
|
||||
exception.MissingParameterValue) as e:
|
||||
raise exception.InstanceDeployFailure(_(
|
||||
"RPC do_node_deploy failed to validate deploy info. "
|
||||
"Error: %(msg)s") % {'msg': e})
|
||||
|
@ -503,7 +512,9 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
|
||||
@messaging.expected_exceptions(exception.NoFreeConductorWorker,
|
||||
exception.NodeLocked,
|
||||
exception.InstanceDeployFailure)
|
||||
exception.InstanceDeployFailure,
|
||||
exception.InvalidParameterValue,
|
||||
exception.MissingParameterValue)
|
||||
def do_node_tear_down(self, context, node_id):
|
||||
"""RPC method to tear down an existing node deployment.
|
||||
|
||||
|
@ -532,7 +543,8 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
|
||||
try:
|
||||
task.driver.deploy.validate(task)
|
||||
except exception.InvalidParameterValue as e:
|
||||
except (exception.InvalidParameterValue,
|
||||
exception.MissingParameterValue) as e:
|
||||
raise exception.InstanceDeployFailure(_(
|
||||
"RPC do_node_tear_down failed to validate deploy info. "
|
||||
"Error: %(msg)s") % {'msg': e})
|
||||
|
@ -614,7 +626,8 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
if node.power_state is None:
|
||||
try:
|
||||
task.driver.power.validate(task)
|
||||
except exception.InvalidParameterValue:
|
||||
except (exception.InvalidParameterValue,
|
||||
exception.MissingParameterValue) as e:
|
||||
return
|
||||
|
||||
try:
|
||||
|
@ -838,7 +851,8 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
iface.validate(task)
|
||||
result = True
|
||||
except (exception.InvalidParameterValue,
|
||||
exception.UnsupportedDriverExtension) as e:
|
||||
exception.UnsupportedDriverExtension,
|
||||
exception.MissingParameterValue) as e:
|
||||
result = False
|
||||
reason = str(e)
|
||||
else:
|
||||
|
@ -927,7 +941,8 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
@messaging.expected_exceptions(exception.NodeLocked,
|
||||
exception.UnsupportedDriverExtension,
|
||||
exception.NodeConsoleNotEnabled,
|
||||
exception.InvalidParameterValue)
|
||||
exception.InvalidParameterValue,
|
||||
exception.MissingParameterValue)
|
||||
def get_console_information(self, context, node_id):
|
||||
"""Get connection information about the console.
|
||||
|
||||
|
@ -937,6 +952,7 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
support console.
|
||||
:raises: NodeConsoleNotEnabled if the console is not enabled.
|
||||
:raises: InvalidParameterValue when the wrong driver info is specified.
|
||||
:raises: MissingParameterValue if missing supplied info.
|
||||
"""
|
||||
LOG.debug('RPC get_console_information called for node %s' % node_id)
|
||||
|
||||
|
@ -955,7 +971,8 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
@messaging.expected_exceptions(exception.NoFreeConductorWorker,
|
||||
exception.NodeLocked,
|
||||
exception.UnsupportedDriverExtension,
|
||||
exception.InvalidParameterValue)
|
||||
exception.InvalidParameterValue,
|
||||
exception.MissingParameterValue)
|
||||
def set_console_mode(self, context, node_id, enabled):
|
||||
"""Enable/Disable the console.
|
||||
|
||||
|
@ -969,6 +986,7 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
:raises: UnsupportedDriverExtension if the node's driver doesn't
|
||||
support console.
|
||||
:raises: InvalidParameterValue when the wrong driver info is specified.
|
||||
:raises: MissingParameterValue if missing supplied info.
|
||||
:raises: NoFreeConductorWorker when there is no free worker to start
|
||||
async task
|
||||
"""
|
||||
|
@ -1135,7 +1153,8 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
|
||||
@messaging.expected_exceptions(exception.NodeLocked,
|
||||
exception.UnsupportedDriverExtension,
|
||||
exception.InvalidParameterValue)
|
||||
exception.InvalidParameterValue,
|
||||
exception.MissingParameterValue)
|
||||
def set_boot_device(self, context, node_id, device, persistent=False):
|
||||
"""Set the boot device for a node.
|
||||
|
||||
|
@ -1152,7 +1171,7 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
support management.
|
||||
:raises: InvalidParameterValue when the wrong driver info is
|
||||
specified or an invalid boot device is specified.
|
||||
|
||||
:raises: MissingParameterValue if missing supplied info.
|
||||
"""
|
||||
LOG.debug('RPC set_boot_device called for node %(node)s with '
|
||||
'device %(device)s', {'node': node_id, 'device': device})
|
||||
|
@ -1167,7 +1186,8 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
|
||||
@messaging.expected_exceptions(exception.NodeLocked,
|
||||
exception.UnsupportedDriverExtension,
|
||||
exception.InvalidParameterValue)
|
||||
exception.InvalidParameterValue,
|
||||
exception.MissingParameterValue)
|
||||
def get_boot_device(self, context, node_id):
|
||||
"""Get the current boot device.
|
||||
|
||||
|
@ -1180,6 +1200,7 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
support management.
|
||||
:raises: InvalidParameterValue when the wrong driver info is
|
||||
specified.
|
||||
:raises: MissingParameterValue if missing supplied info.
|
||||
:returns: a dictionary containing:
|
||||
|
||||
:boot_device: the boot device, one of
|
||||
|
@ -1198,7 +1219,8 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
|
||||
@messaging.expected_exceptions(exception.NodeLocked,
|
||||
exception.UnsupportedDriverExtension,
|
||||
exception.InvalidParameterValue)
|
||||
exception.InvalidParameterValue,
|
||||
exception.MissingParameterValue)
|
||||
def get_supported_boot_devices(self, context, node_id):
|
||||
"""Get the list of supported devices.
|
||||
|
||||
|
@ -1211,6 +1233,7 @@ class ConductorManager(periodic_task.PeriodicTasks):
|
|||
support management.
|
||||
:raises: InvalidParameterValue when the wrong driver info is
|
||||
specified.
|
||||
:raises: MissingParameterValue if missing supplied info.
|
||||
:returns: A list with the supported boot devices defined
|
||||
in :mod:`ironic.common.boot_devices`.
|
||||
|
||||
|
|
|
@ -156,6 +156,7 @@ class ConductorAPI(object):
|
|||
:param info: info for node driver.
|
||||
:param topic: RPC topic. Defaults to self.topic.
|
||||
:raises: InvalidParameterValue if supplied info is not valid.
|
||||
:raises: MissingParameterValue if a required parameter is missing
|
||||
:raises: UnsupportedDriverExtension if current driver does not have
|
||||
vendor interface.
|
||||
:raises: NoFreeConductorWorker when there is no free worker to start
|
||||
|
@ -176,6 +177,7 @@ class ConductorAPI(object):
|
|||
:param info: data to pass through to the driver.
|
||||
:param topic: RPC topic. Defaults to self.topic.
|
||||
:raises: InvalidParameterValue for parameter errors.
|
||||
:raises: MissingParameterValue if a required parameter is missing
|
||||
:raises: UnsupportedDriverExtension if the driver doesn't have a vendor
|
||||
interface, or if the vendor interface does not support the
|
||||
specified driver_method.
|
||||
|
@ -196,6 +198,7 @@ class ConductorAPI(object):
|
|||
:param topic: RPC topic. Defaults to self.topic.
|
||||
:raises: InstanceDeployFailure
|
||||
:raises: InvalidParameterValue if validation fails
|
||||
:raises: MissingParameterValue if a required parameter is missing
|
||||
:raises: NoFreeConductorWorker when there is no free worker to start
|
||||
async task.
|
||||
|
||||
|
@ -215,6 +218,7 @@ class ConductorAPI(object):
|
|||
:param topic: RPC topic. Defaults to self.topic.
|
||||
:raises: InstanceDeployFailure
|
||||
:raises: InvalidParameterValue if validation fails
|
||||
:raises: MissingParameterValue if a required parameter is missing
|
||||
:raises: NoFreeConductorWorker when there is no free worker to start
|
||||
async task.
|
||||
|
||||
|
@ -277,6 +281,7 @@ class ConductorAPI(object):
|
|||
:raises: UnsupportedDriverExtension if the node's driver doesn't
|
||||
support console.
|
||||
:raises: InvalidParameterValue when the wrong driver info is specified.
|
||||
:raises: MissingParameterValue if a required parameter is missing
|
||||
"""
|
||||
cctxt = self.client.prepare(topic=topic or self.topic, version='1.11')
|
||||
return cctxt.call(context, 'get_console_information', node_id=node_id)
|
||||
|
@ -292,6 +297,7 @@ class ConductorAPI(object):
|
|||
:raises: UnsupportedDriverExtension if the node's driver doesn't
|
||||
support console.
|
||||
:raises: InvalidParameterValue when the wrong driver info is specified.
|
||||
:raises: MissingParameterValue if a required parameter is missing
|
||||
:raises: NoFreeConductorWorker when there is no free worker to start
|
||||
async task.
|
||||
"""
|
||||
|
@ -348,6 +354,7 @@ class ConductorAPI(object):
|
|||
support management.
|
||||
:raises: InvalidParameterValue when the wrong driver info is
|
||||
specified or an invalid boot device is specified.
|
||||
:raises: MissingParameterValue if missing supplied info.
|
||||
"""
|
||||
cctxt = self.client.prepare(topic=topic or self.topic, version='1.17')
|
||||
return cctxt.call(context, 'set_boot_device', node_id=node_id,
|
||||
|
@ -365,6 +372,7 @@ class ConductorAPI(object):
|
|||
support management.
|
||||
:raises: InvalidParameterValue when the wrong driver info is
|
||||
specified.
|
||||
:raises: MissingParameterValue if missing supplied info.
|
||||
:returns: a dictionary containing:
|
||||
|
||||
:boot_device: the boot device, one of
|
||||
|
@ -388,6 +396,7 @@ class ConductorAPI(object):
|
|||
support management.
|
||||
:raises: InvalidParameterValue when the wrong driver info is
|
||||
specified.
|
||||
:raises: MissingParameterValue if missing supplied info.
|
||||
:returns: A list with the supported boot devices defined
|
||||
in :mod:`ironic.common.boot_devices`.
|
||||
|
||||
|
|
|
@ -126,6 +126,7 @@ class DeployInterface(object):
|
|||
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: InvalidParameterValue
|
||||
:raises: MissingParameterValue
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
|
@ -229,6 +230,7 @@ class PowerInterface(object):
|
|||
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: InvalidParameterValue
|
||||
:raises: MissingParameterValue
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
|
@ -236,6 +238,7 @@ class PowerInterface(object):
|
|||
"""Return the power state of the task's node.
|
||||
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: MissingParameterValue if a required parameter is missing.
|
||||
:returns: a power state. One of :mod:`ironic.common.states`.
|
||||
"""
|
||||
|
||||
|
@ -245,6 +248,7 @@ class PowerInterface(object):
|
|||
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:param power_state: Any power state from :mod:`ironic.common.states`.
|
||||
:raises: MissingParameterValue if a required parameter is missing.
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
|
@ -252,6 +256,7 @@ class PowerInterface(object):
|
|||
"""Perform a hard reboot of the task's node.
|
||||
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: MissingParameterValue if a required parameter is missing.
|
||||
"""
|
||||
|
||||
|
||||
|
@ -277,6 +282,7 @@ class ConsoleInterface(object):
|
|||
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: InvalidParameterValue
|
||||
:raises: MissingParameterValue
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
|
@ -324,6 +330,7 @@ class RescueInterface(object):
|
|||
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: InvalidParameterValue
|
||||
:raises: MissingParameterValue
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
|
@ -371,6 +378,7 @@ class VendorInterface(object):
|
|||
:raises: UnsupportedDriverExtension if 'method' can not be mapped to
|
||||
the supported interfaces.
|
||||
:raises: InvalidParameterValue if **kwargs does not contain 'method'.
|
||||
:raises: MissingParameterValue
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
|
@ -383,6 +391,7 @@ class VendorInterface(object):
|
|||
:raises: UnsupportedDriverExtension if 'method' can not be mapped to
|
||||
the supported interfaces.
|
||||
:raises: InvalidParameterValue if **kwargs does not contain 'method'.
|
||||
:raises: MissingParameterValue when a required parameter is missing
|
||||
"""
|
||||
|
||||
def driver_vendor_passthru(self, context, method, **kwargs):
|
||||
|
@ -422,6 +431,7 @@ class ManagementInterface(object):
|
|||
|
||||
:param task: a task from TaskManager.
|
||||
:raises: InvalidParameterValue
|
||||
:raises: MissingParameterValue
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
|
@ -446,6 +456,7 @@ class ManagementInterface(object):
|
|||
Default: False.
|
||||
:raises: InvalidParameterValue if an invalid boot device is
|
||||
specified.
|
||||
:raises: MissingParameterValue if a required parameter is missing
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
|
@ -456,6 +467,7 @@ class ManagementInterface(object):
|
|||
all drivers support this.
|
||||
|
||||
:param task: a task from TaskManager.
|
||||
:raises: MissingParameterValue if a required parameter is missing
|
||||
:returns: a dictionary containing:
|
||||
:boot_device: the boot device, one of
|
||||
:mod:`ironic.common.boot_devices` or None if it is unknown.
|
||||
|
|
|
@ -35,7 +35,7 @@ def _raise_unsupported_error(method=None):
|
|||
raise exception.InvalidParameterValue(_(
|
||||
"Unsupported method (%s) passed through to vendor extension.")
|
||||
% method)
|
||||
raise exception.InvalidParameterValue(_(
|
||||
raise exception.MissingParameterValue(_(
|
||||
"Method not specified when calling vendor extension."))
|
||||
|
||||
|
||||
|
@ -100,7 +100,7 @@ class FakeVendorA(base.VendorInterface):
|
|||
if method == 'first_method':
|
||||
bar = kwargs.get('bar')
|
||||
if not bar:
|
||||
raise exception.InvalidParameterValue(_(
|
||||
raise exception.MissingParameterValue(_(
|
||||
"Parameter 'bar' not passed to method 'first_method'."))
|
||||
return
|
||||
_raise_unsupported_error(method)
|
||||
|
@ -128,7 +128,7 @@ class FakeVendorB(base.VendorInterface):
|
|||
if method == 'second_method':
|
||||
bar = kwargs.get('bar')
|
||||
if not bar:
|
||||
raise exception.InvalidParameterValue(_(
|
||||
raise exception.MissingParameterValue(_(
|
||||
"Parameter 'bar' not passed to method 'second_method'."))
|
||||
return
|
||||
_raise_unsupported_error(method)
|
||||
|
|
|
@ -67,8 +67,9 @@ def parse_driver_info(node):
|
|||
:param node: an ironic node object.
|
||||
:returns: a dict containing information from driver_info
|
||||
and default values.
|
||||
:raises: InvalidParameterValue if some mandatory information
|
||||
is missing on the node or on invalid inputs.
|
||||
:raises: InvalidParameterValue on invalid inputs.
|
||||
:raises: MissingParameterValue if some mandatory information
|
||||
is missing on the node
|
||||
"""
|
||||
info = node.driver_info
|
||||
d_info = {}
|
||||
|
@ -79,6 +80,10 @@ def parse_driver_info(node):
|
|||
d_info[param] = info[param]
|
||||
except KeyError:
|
||||
error_msgs.append(_("'%s' not supplied to IloDriver.") % param)
|
||||
if error_msgs:
|
||||
msg = (_("The following parameters were mising while parsing "
|
||||
"driver_info:\n%s") % "\n".join(error_msgs))
|
||||
raise exception.MissingParameterValue(msg)
|
||||
|
||||
for param in OPTIONAL_PROPERTIES:
|
||||
value = info.get(param, CONF.ilo.get(param))
|
||||
|
@ -105,8 +110,9 @@ def get_ilo_object(node):
|
|||
|
||||
:param node: an ironic node object.
|
||||
:returns: an IloClient object.
|
||||
:raises: InvalidParameterValue if some mandatory information
|
||||
is missing on the node or on invalid inputs.
|
||||
:raises: InvalidParameterValue on invalid inputs.
|
||||
:raises: MissingParameterValue if some mandatory information
|
||||
is missing on the node
|
||||
"""
|
||||
driver_info = parse_driver_info(node)
|
||||
ilo_object = ilo_client.IloClient(driver_info['ilo_address'],
|
||||
|
@ -126,8 +132,9 @@ def get_ilo_license(node):
|
|||
:param node: an ironic node object.
|
||||
:returns: a constant defined in this module which
|
||||
refers to the current license installed on the node.
|
||||
:raises: InvalidParameterValue if some mandatory information
|
||||
is missing on the node or on invalid inputs.
|
||||
:raises: InvalidParameterValue on invalid inputs.
|
||||
:raises: MissingParameterValue if some mandatory information
|
||||
is missing on the node
|
||||
:raises: IloOperationError if it failed to retrieve the
|
||||
installed licenses from the iLO.
|
||||
"""
|
||||
|
|
|
@ -69,14 +69,14 @@ _BOOT_DEVICES_MAP = {
|
|||
|
||||
def _parse_driver_info(node):
|
||||
"""Gets the bmc access info for the given node.
|
||||
:raises: InvalidParameterValue when required ipmi credentials
|
||||
:raises: MissingParameterValue when required ipmi credentials
|
||||
are missing.
|
||||
"""
|
||||
|
||||
info = node.driver_info or {}
|
||||
missing_info = [key for key in REQUIRED_PROPERTIES if not info.get(key)]
|
||||
if missing_info:
|
||||
raise exception.InvalidParameterValue(_(
|
||||
raise exception.MissingParameterValue(_(
|
||||
"The following IPMI credentials are not supplied"
|
||||
" to IPMI driver: %s."
|
||||
) % missing_info)
|
||||
|
@ -229,7 +229,7 @@ class NativeIPMIPower(base.PowerInterface):
|
|||
"""Check that node['driver_info'] contains IPMI credentials.
|
||||
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: InvalidParameterValue when required ipmi credentials
|
||||
:raises: MissingParameterValue when required ipmi credentials
|
||||
are missing.
|
||||
"""
|
||||
_parse_driver_info(task.node)
|
||||
|
@ -240,7 +240,7 @@ class NativeIPMIPower(base.PowerInterface):
|
|||
: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
|
||||
:raises: MissingParameterValue when required ipmi credentials
|
||||
are missing.
|
||||
:raises: IPMIFailure when the native ipmi call fails.
|
||||
"""
|
||||
|
@ -254,8 +254,10 @@ class NativeIPMIPower(base.PowerInterface):
|
|||
: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: MissingParameterValue when required ipmi credentials
|
||||
are missing.
|
||||
:raises: InvalidParameterValue when an invalid power state
|
||||
is specified or required ipmi credentials are missing.
|
||||
is specified
|
||||
:raises: PowerStateFailure when invalid power state is returned
|
||||
from ipmi.
|
||||
"""
|
||||
|
@ -277,7 +279,7 @@ class NativeIPMIPower(base.PowerInterface):
|
|||
|
||||
: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
|
||||
:raises: MissingParameterValue when required ipmi credentials
|
||||
are missing.
|
||||
:raises: PowerStateFailure when invalid power state is returned
|
||||
from ipmi.
|
||||
|
@ -299,7 +301,7 @@ class NativeIPMIManagement(base.ManagementInterface):
|
|||
task's node contains the required credentials information.
|
||||
|
||||
:param task: a task from TaskManager.
|
||||
:raises: InvalidParameterValue when required ipmi credentials
|
||||
:raises: MissingParameterValue when required ipmi credentials
|
||||
are missing.
|
||||
|
||||
"""
|
||||
|
@ -326,10 +328,11 @@ class NativeIPMIManagement(base.ManagementInterface):
|
|||
:param persistent: Boolean value. True if the boot device will
|
||||
persist to all future boots, False if not.
|
||||
Default: False.
|
||||
:raises: InvalidParameterValue if an invalid boot device is
|
||||
specified or if required ipmi parameters are missing.
|
||||
:raises: InvalidParameterValue if an invalid boot device is specified
|
||||
or required ipmi credentials are missing.
|
||||
:raises: MissingParameterValue when required ipmi credentials
|
||||
are missing.
|
||||
:raises: IPMIFailure on an error from pyghmi.
|
||||
|
||||
"""
|
||||
if device not in self.get_supported_boot_devices():
|
||||
raise exception.InvalidParameterValue(_(
|
||||
|
@ -353,7 +356,7 @@ class NativeIPMIManagement(base.ManagementInterface):
|
|||
Returns the current boot device of the node.
|
||||
|
||||
:param task: a task from TaskManager.
|
||||
:raises: InvalidParameterValue if required IPMI parameters
|
||||
:raises: MissingParameterValue if required IPMI parameters
|
||||
are missing.
|
||||
:raises: IPMIFailure on an error from pyghmi.
|
||||
:returns: a dictionary containing:
|
||||
|
|
|
@ -158,13 +158,14 @@ def _parse_driver_info(node):
|
|||
|
||||
:param node: the Node of interest.
|
||||
:returns: dictionary of parameters.
|
||||
:raises: InvalidParameterValue if any required parameters are missing.
|
||||
:raises: InvalidParameterValue when an invalid value is specified
|
||||
:raises: MissingParameterValue when a required ipmi parameter is missing.
|
||||
|
||||
"""
|
||||
info = node.driver_info or {}
|
||||
missing_info = [key for key in REQUIRED_PROPERTIES if not info.get(key)]
|
||||
if missing_info:
|
||||
raise exception.InvalidParameterValue(_(
|
||||
raise exception.MissingParameterValue(_(
|
||||
"The following IPMI credentials are not supplied"
|
||||
" to IPMI driver: %s."
|
||||
) % missing_info)
|
||||
|
@ -465,6 +466,7 @@ class IPMIPower(base.PowerInterface):
|
|||
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: InvalidParameterValue if required ipmi parameters are missing.
|
||||
:raises: MissingParameterValue if a required parameter is missing.
|
||||
|
||||
"""
|
||||
_parse_driver_info(task.node)
|
||||
|
@ -479,6 +481,7 @@ class IPMIPower(base.PowerInterface):
|
|||
: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: MissingParameterValue if a required parameter is missing.
|
||||
:raises: IPMIFailure on an error from ipmitool (from _power_status
|
||||
call).
|
||||
|
||||
|
@ -493,8 +496,8 @@ class IPMIPower(base.PowerInterface):
|
|||
: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
|
||||
or if an invalid power state was specified.
|
||||
:raises: InvalidParameterValue if an invalid power state was specified.
|
||||
:raises: MissingParameterValue if required ipmi parameters are missing
|
||||
:raises: PowerStateFailure if the power couldn't be set to pstate.
|
||||
|
||||
"""
|
||||
|
@ -516,7 +519,8 @@ class IPMIPower(base.PowerInterface):
|
|||
"""Cycles the power to the task's node.
|
||||
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: InvalidParameterValue if required ipmi parameters are missing.
|
||||
:raises: MissingParameterValue if required ipmi parameters are missing.
|
||||
:raises: InvalidParameterValue if an invalid power state was specified.
|
||||
:raises: PowerStateFailure if the final state of the node is not
|
||||
POWER_ON.
|
||||
|
||||
|
@ -552,6 +556,7 @@ class IPMIManagement(base.ManagementInterface):
|
|||
:param task: a task from TaskManager.
|
||||
:raises: InvalidParameterValue if required IPMI parameters
|
||||
are missing.
|
||||
:raises: MissingParameterValue if a required parameter is missing.
|
||||
|
||||
"""
|
||||
_parse_driver_info(task.node)
|
||||
|
@ -578,8 +583,8 @@ class IPMIManagement(base.ManagementInterface):
|
|||
:param persistent: Boolean value. True if the boot device will
|
||||
persist to all future boots, False if not.
|
||||
Default: False.
|
||||
:raises: InvalidParameterValue if an invalid boot device is
|
||||
specified or if required ipmi parameters are missing.
|
||||
:raises: InvalidParameterValue if an invalid boot device is specified
|
||||
:raises: MissingParameterValue if required ipmi parameters are missing.
|
||||
:raises: IPMIFailure on an error from ipmitool.
|
||||
|
||||
"""
|
||||
|
@ -609,6 +614,7 @@ class IPMIManagement(base.ManagementInterface):
|
|||
:raises: InvalidParameterValue if required IPMI parameters
|
||||
are missing.
|
||||
:raises: IPMIFailure on an error from ipmitool.
|
||||
:raises: MissingParameterValue if a required parameter is missing.
|
||||
:returns: a dictionary containing:
|
||||
|
||||
:boot_device: the boot device, one of
|
||||
|
@ -655,6 +661,7 @@ class IPMIManagement(base.ManagementInterface):
|
|||
:raises: FailedToGetSensorData when getting the sensor data fails.
|
||||
:raises: FailedToParseSensorData when parsing sensor data fails.
|
||||
:raises: InvalidParameterValue if required ipmi parameters are missing
|
||||
:raises: MissingParameterValue if a required parameter is missing.
|
||||
:returns: returns a dict of sensor data group by sensor type.
|
||||
|
||||
"""
|
||||
|
@ -680,6 +687,8 @@ class VendorPassthru(base.VendorInterface):
|
|||
:param task: a TaskManager instance.
|
||||
:param raw_bytes: a string of raw bytes to send, e.g. '0x00 0x01'
|
||||
:raises: IPMIFailure on an error from ipmitool.
|
||||
:raises: MissingParameterValue if a required parameter is missing.
|
||||
:raises: InvalidParameterValue when an invalid value is specified.
|
||||
|
||||
"""
|
||||
node_uuid = task.node.uuid
|
||||
|
@ -705,6 +714,8 @@ class VendorPassthru(base.VendorInterface):
|
|||
:param task: a TaskManager instance.
|
||||
:param warm: boolean parameter to decide on warm or cold reset.
|
||||
:raises: IPMIFailure on an error from ipmitool.
|
||||
:raises: MissingParameterValue if a required parameter is missing.
|
||||
:raises: InvalidParameterValue when an invalid value is specified
|
||||
|
||||
"""
|
||||
node_uuid = task.node.uuid
|
||||
|
@ -745,7 +756,9 @@ class VendorPassthru(base.VendorInterface):
|
|||
:param kwargs: info for action.
|
||||
:raises: InvalidParameterValue if **kwargs does not contain 'method',
|
||||
'method' is not supported or a byte string is not given for
|
||||
'raw_bytes', or required IPMI credentials are missing.
|
||||
'raw_bytes'.
|
||||
:raises: MissingParameterValue if a required parameter is missing.
|
||||
|
||||
"""
|
||||
method = kwargs['method']
|
||||
if method == 'send_raw':
|
||||
|
@ -775,6 +788,8 @@ class VendorPassthru(base.VendorInterface):
|
|||
:raises: InvalidParameterValue if required IPMI credentials
|
||||
are missing.
|
||||
:raises: IPMIFailure if ipmitool fails for any method.
|
||||
:raises: MissingParameterValue when a required parameter is missing
|
||||
|
||||
"""
|
||||
|
||||
method = kwargs['method']
|
||||
|
@ -808,10 +823,12 @@ class IPMIShellinaboxConsole(base.ConsoleInterface):
|
|||
|
||||
:param task: a task from TaskManager.
|
||||
:raises: InvalidParameterValue
|
||||
:raises: MissingParameterValue when a required parameter is missing
|
||||
|
||||
"""
|
||||
driver_info = _parse_driver_info(task.node)
|
||||
if not driver_info['port']:
|
||||
raise exception.InvalidParameterValue(_(
|
||||
raise exception.MissingParameterValue(_(
|
||||
"IPMI terminal port not supplied to IPMI driver."))
|
||||
|
||||
def start_console(self, task):
|
||||
|
|
|
@ -122,7 +122,7 @@ def _check_for_missing_params(info_dict, param_prefix=''):
|
|||
missing_info.append(param_prefix + label)
|
||||
|
||||
if missing_info:
|
||||
raise exception.InvalidParameterValue(_(
|
||||
raise exception.MissingParameterValue(_(
|
||||
"Can not validate PXE bootloader. The following parameters "
|
||||
"were not passed to ironic: %s") % missing_info)
|
||||
|
||||
|
@ -136,6 +136,7 @@ def _parse_driver_info(node):
|
|||
|
||||
:param node: a single Node.
|
||||
:returns: A dict with the driver_info values.
|
||||
:raises: MissingParameterValue
|
||||
"""
|
||||
info = node.driver_info
|
||||
d_info = {}
|
||||
|
@ -156,6 +157,8 @@ def _parse_instance_info(node):
|
|||
|
||||
:param node: a single Node.
|
||||
:returns: A dict with the instance_info values.
|
||||
:raises: MissingParameterValue
|
||||
:raises: InvalidParameterValue
|
||||
"""
|
||||
|
||||
info = node.instance_info
|
||||
|
@ -204,6 +207,8 @@ def _parse_deploy_info(node):
|
|||
|
||||
:param node: a single Node.
|
||||
:returns: A dict with the instance_info and driver_info values.
|
||||
:raises: MissingParameterValue
|
||||
:raises: InvalidParameterValue
|
||||
"""
|
||||
info = {}
|
||||
info.update(_parse_instance_info(node))
|
||||
|
@ -471,6 +476,7 @@ def _validate_glance_image(ctx, deploy_info):
|
|||
'kernel_id' and 'ramdisk_id' properties.
|
||||
|
||||
:raises: InvalidParameterValue.
|
||||
:raises: MissingParameterValue
|
||||
"""
|
||||
image_id = deploy_info['image_source']
|
||||
try:
|
||||
|
@ -493,7 +499,7 @@ def _validate_glance_image(ctx, deploy_info):
|
|||
|
||||
if missing_props:
|
||||
props = ', '.join(missing_props)
|
||||
raise exception.InvalidParameterValue(_(
|
||||
raise exception.MissingParameterValue(_(
|
||||
"Image %(image)s is missing the following properties: "
|
||||
"%(properties)s") % {'image': image_id, 'properties': props})
|
||||
|
||||
|
@ -509,17 +515,18 @@ class PXEDeploy(base.DeployInterface):
|
|||
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: InvalidParameterValue.
|
||||
:raises: MissingParameterValue
|
||||
"""
|
||||
node = task.node
|
||||
if not driver_utils.get_node_mac_addresses(task):
|
||||
raise exception.InvalidParameterValue(_("Node %s does not have "
|
||||
raise exception.MissingParameterValue(_("Node %s does not have "
|
||||
"any port associated with it.") % node.uuid)
|
||||
|
||||
d_info = _parse_deploy_info(node)
|
||||
|
||||
if CONF.pxe.ipxe_enabled:
|
||||
if not CONF.pxe.http_url or not CONF.pxe.http_root:
|
||||
raise exception.InvalidParameterValue(_(
|
||||
raise exception.MissingParameterValue(_(
|
||||
"iPXE boot is enabled but no HTTP URL or HTTP "
|
||||
"root was specified."))
|
||||
|
||||
|
@ -652,7 +659,7 @@ class VendorPassthru(base.VendorInterface):
|
|||
|
||||
missing = [key for key in params.keys() if params[key] is None]
|
||||
if missing:
|
||||
raise exception.InvalidParameterValue(_(
|
||||
raise exception.MissingParameterValue(_(
|
||||
"Parameters %s were not passed to ironic"
|
||||
" for deploy.") % missing)
|
||||
|
||||
|
|
|
@ -96,13 +96,13 @@ def _parse_driver_info(node):
|
|||
|
||||
:param node: An Ironic node object.
|
||||
:returns: SeaMicro driver info.
|
||||
:raises: InvalidParameterValue if any required parameters are missing.
|
||||
:raises: MissingParameterValue if any required parameters are missing.
|
||||
"""
|
||||
|
||||
info = node.driver_info or {}
|
||||
missing_info = [key for key in REQUIRED_PROPERTIES if not info.get(key)]
|
||||
if missing_info:
|
||||
raise exception.InvalidParameterValue(_(
|
||||
raise exception.MissingParameterValue(_(
|
||||
"SeaMicro driver requires the following to be set: %s.")
|
||||
% missing_info)
|
||||
|
||||
|
@ -140,7 +140,7 @@ 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
|
||||
:raises: MissingParameterValue if required seamicro parameters are
|
||||
missing.
|
||||
:raises: ServiceUnavailable on an error from SeaMicro Client.
|
||||
:returns: Power state of the given node
|
||||
|
@ -169,7 +169,7 @@ 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
|
||||
:raises: MissingParameterValue if required seamicro parameters are
|
||||
missing.
|
||||
:returns: Power state of the given node.
|
||||
"""
|
||||
|
@ -208,7 +208,7 @@ 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
|
||||
:raises: MissingParameterValue if required seamicro parameters are
|
||||
missing.
|
||||
:returns: Power state of the given node
|
||||
"""
|
||||
|
@ -246,7 +246,7 @@ 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
|
||||
:raises: MissingParameterValue if required seamicro parameters are
|
||||
missing.
|
||||
:returns: Power state of the given node
|
||||
"""
|
||||
|
@ -338,7 +338,7 @@ class Power(base.PowerInterface):
|
|||
Check that node 'driver_info' contains the required fields.
|
||||
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: InvalidParameterValue if required seamicro parameters are
|
||||
:raises: MissingParameterValue if required seamicro parameters are
|
||||
missing.
|
||||
"""
|
||||
_parse_driver_info(task.node)
|
||||
|
@ -349,10 +349,10 @@ class Power(base.PowerInterface):
|
|||
Poll the host for the current power state of the 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.
|
||||
:raises: MissingParameterValue when a required parameter is missing
|
||||
:returns: power state. One of :class:`ironic.common.states`.
|
||||
|
||||
"""
|
||||
return _get_power_status(task.node)
|
||||
|
||||
|
@ -366,6 +366,7 @@ class Power(base.PowerInterface):
|
|||
:param pstate: Either POWER_ON or POWER_OFF from :class:
|
||||
`ironic.common.states`.
|
||||
:raises: InvalidParameterValue if an invalid power state was specified.
|
||||
:raises: MissingParameterValue when a required parameter is missing
|
||||
:raises: PowerStateFailure if the desired power state couldn't be set.
|
||||
"""
|
||||
|
||||
|
@ -385,7 +386,7 @@ class Power(base.PowerInterface):
|
|||
"""Cycles the power to the task's node.
|
||||
|
||||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: InvalidParameterValue if required seamicro parameters are
|
||||
:raises: MissingParameterValue if required seamicro parameters are
|
||||
missing.
|
||||
:raises: PowerStateFailure if the final state of the node is not
|
||||
POWER_ON.
|
||||
|
@ -424,7 +425,7 @@ class VendorPassthru(base.VendorInterface):
|
|||
node = task.node
|
||||
vlan_id = kwargs.get('vlan_id')
|
||||
if not vlan_id:
|
||||
raise exception.InvalidParameterValue(_("No vlan id provided"))
|
||||
raise exception.MissingParameterValue(_("No vlan id provided"))
|
||||
|
||||
seamicro_info = _parse_driver_info(node)
|
||||
try:
|
||||
|
@ -461,7 +462,7 @@ class VendorPassthru(base.VendorInterface):
|
|||
if volume_id is None:
|
||||
volume_size = kwargs.get('volume_size')
|
||||
if volume_size is None:
|
||||
raise exception.InvalidParameterValue(
|
||||
raise exception.MissingParameterValue(
|
||||
_("No volume size provided for creating volume"))
|
||||
volume_id = _create_volume(seamicro_info, volume_size)
|
||||
|
||||
|
@ -493,8 +494,7 @@ class Management(base.ManagementInterface):
|
|||
task's node contains the required credentials information.
|
||||
|
||||
:param task: a task from TaskManager.
|
||||
:raises: InvalidParameterValue if required seamicro parameters
|
||||
are missing.
|
||||
:raises: MissingParameterValue when a required parameter is missing
|
||||
|
||||
"""
|
||||
_parse_driver_info(task.node)
|
||||
|
@ -523,6 +523,7 @@ class Management(base.ManagementInterface):
|
|||
:raises: InvalidParameterValue if an invalid boot device is
|
||||
specified or if required seamicro parameters are missing.
|
||||
:raises: IronicException on an error from seamicro-client.
|
||||
:raises: MissingParameterValue when a required parameter is missing
|
||||
|
||||
"""
|
||||
if device not in self.get_supported_boot_devices():
|
||||
|
|
|
@ -237,14 +237,14 @@ def _parse_driver_info(node):
|
|||
|
||||
:param node: the Node of interest.
|
||||
:returns: dictionary of information.
|
||||
:raises: InvalidParameterValue if any required parameters are missing
|
||||
or incorrect.
|
||||
:raises: InvalidParameterValue if any required parameters are incorrect.
|
||||
:raises: MissingParameterValue if any required parameters are missing.
|
||||
|
||||
"""
|
||||
info = node.driver_info or {}
|
||||
missing_info = [key for key in REQUIRED_PROPERTIES if not info.get(key)]
|
||||
if missing_info:
|
||||
raise exception.InvalidParameterValue(_(
|
||||
raise exception.MissingParameterValue(_(
|
||||
"SSHPowerDriver requires the following to be set: %s.")
|
||||
% missing_info)
|
||||
|
||||
|
@ -471,6 +471,7 @@ class SSHPower(base.PowerInterface):
|
|||
:returns: power state. One of :class:`ironic.common.states`.
|
||||
:raises: InvalidParameterValue if any connection parameters are
|
||||
incorrect.
|
||||
:raises: MissingParameterValue when a required parameter is missing
|
||||
:raises: NodeNotFound.
|
||||
:raises: SSHCommandFailed on an error from ssh.
|
||||
:raises: SSHConnectFailed if ssh failed to connect to the node.
|
||||
|
@ -491,6 +492,7 @@ class SSHPower(base.PowerInterface):
|
|||
`ironic.common.states`.
|
||||
:raises: InvalidParameterValue if any connection parameters are
|
||||
incorrect, or if the desired power state is invalid.
|
||||
:raises: MissingParameterValue when a required parameter is missing
|
||||
:raises: NodeNotFound.
|
||||
:raises: PowerStateFailure if it failed to set power state to pstate.
|
||||
:raises: SSHCommandFailed on an error from ssh.
|
||||
|
@ -520,6 +522,7 @@ class SSHPower(base.PowerInterface):
|
|||
:param task: a TaskManager instance containing the node to act on.
|
||||
:raises: InvalidParameterValue if any connection parameters are
|
||||
incorrect.
|
||||
:raises: MissingParameterValue when a required parameter is missing
|
||||
:raises: NodeNotFound.
|
||||
:raises: PowerStateFailure if it failed to set power state to POWER_ON.
|
||||
:raises: SSHCommandFailed on an error from ssh.
|
||||
|
@ -552,7 +555,7 @@ class SSHManagement(base.ManagementInterface):
|
|||
:param task: a task from TaskManager.
|
||||
:raises: InvalidParameterValue if any connection parameters are
|
||||
incorrect.
|
||||
|
||||
:raises: MissingParameterValue if a required parameter is missing
|
||||
"""
|
||||
_parse_driver_info(task.node)
|
||||
|
||||
|
@ -579,6 +582,7 @@ class SSHManagement(base.ManagementInterface):
|
|||
Default: False. Ignored by this driver.
|
||||
:raises: InvalidParameterValue if an invalid boot device is
|
||||
specified or if any connection parameters are incorrect.
|
||||
:raises: MissingParameterValue if a required parameter is missing
|
||||
:raises: SSHConnectFailed if ssh failed to connect to the node.
|
||||
:raises: SSHCommandFailed on an error from ssh.
|
||||
:raises: NotImplementedError if the virt_type does not support
|
||||
|
@ -610,6 +614,7 @@ class SSHManagement(base.ManagementInterface):
|
|||
:param task: a task from TaskManager.
|
||||
:raises: InvalidParameterValue if any connection parameters are
|
||||
incorrect.
|
||||
:raises: MissingParameterValue if a required parameter is missing
|
||||
:raises: SSHConnectFailed if ssh failed to connect to the node.
|
||||
:raises: SSHCommandFailed on an error from ssh.
|
||||
:returns: a dictionary containing:
|
||||
|
|
|
@ -21,7 +21,7 @@ def _raise_unsupported_error(method=None):
|
|||
raise exception.UnsupportedDriverExtension(_(
|
||||
"Unsupported method (%s) passed through to vendor extension.")
|
||||
% method)
|
||||
raise exception.InvalidParameterValue(_(
|
||||
raise exception.MissingParameterValue(_(
|
||||
"Method not specified when calling vendor extension."))
|
||||
|
||||
|
||||
|
@ -64,6 +64,7 @@ class MixinVendorInterface(base.VendorInterface):
|
|||
:raises: UnsupportedDriverExtension if 'method' can not be mapped to
|
||||
the supported interfaces.
|
||||
:raises: InvalidParameterValue if **kwargs does not contain 'method'.
|
||||
:raisee: MissingParameterValue if missing parameters in kwargs.
|
||||
|
||||
"""
|
||||
route = self._map(**kwargs)
|
||||
|
@ -76,7 +77,7 @@ class MixinVendorInterface(base.VendorInterface):
|
|||
|
||||
:raises: UnsupportedDriverExtension if 'method' can not be mapped to
|
||||
the supported interfaces.
|
||||
:raises: InvalidParameterValue if **kwargs does not contain 'method'.
|
||||
:raises: MissingParameterValue if **kwargs does not contain 'method'.
|
||||
|
||||
"""
|
||||
route = self._map(**kwargs)
|
||||
|
|
|
@ -37,9 +37,11 @@ class NodeSetBootDeviceTestCase(base.DbTestCase):
|
|||
def test_node_set_boot_device_non_existent_device(self):
|
||||
mgr_utils.mock_the_extension_manager(driver="fake_ipmitool")
|
||||
self.driver = driver_factory.get_driver("fake_ipmitool")
|
||||
ipmi_info = utils.get_test_ipmi_info()
|
||||
node = obj_utils.create_test_node(self.context,
|
||||
uuid=cmn_utils.generate_uuid(),
|
||||
driver='fake_ipmitool')
|
||||
driver='fake_ipmitool',
|
||||
driver_info=ipmi_info)
|
||||
task = task_manager.TaskManager(self.context, node.uuid)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
conductor_utils.node_set_boot_device,
|
||||
|
|
|
@ -519,7 +519,7 @@ class VendorPassthruTestCase(_ServiceSetUpMixin, tests_db_base.DbTestCase):
|
|||
# Verify reservation has been cleared.
|
||||
self.assertIsNone(node.reservation)
|
||||
|
||||
def test_vendor_passthru_invalid_method_parameters(self):
|
||||
def test_vendor_passthru_missing_method_parameters(self):
|
||||
node = obj_utils.create_test_node(self.context, driver='fake')
|
||||
info = {'invalid_param': 'whatever'}
|
||||
self._start_service()
|
||||
|
@ -528,7 +528,7 @@ class VendorPassthruTestCase(_ServiceSetUpMixin, tests_db_base.DbTestCase):
|
|||
self.service.vendor_passthru,
|
||||
self.context, node.uuid, 'first_method', info)
|
||||
# Compare true exception hidden by @messaging.expected_exceptions
|
||||
self.assertEqual(exception.InvalidParameterValue, exc.exc_info[0])
|
||||
self.assertEqual(exception.MissingParameterValue, exc.exc_info[0])
|
||||
|
||||
node.refresh()
|
||||
self.assertIsNone(node.last_error)
|
||||
|
|
|
@ -59,7 +59,7 @@ class IloCommonMethodsTestCase(base.TestCase):
|
|||
driver='ilo',
|
||||
driver_info=INFO_DICT)
|
||||
del node.driver_info['ilo_address']
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
ilo_common.parse_driver_info, node)
|
||||
|
||||
def test_parse_driver_info_missing_username(self):
|
||||
|
@ -67,7 +67,7 @@ class IloCommonMethodsTestCase(base.TestCase):
|
|||
driver='ilo',
|
||||
driver_info=INFO_DICT)
|
||||
del node.driver_info['ilo_username']
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
ilo_common.parse_driver_info, node)
|
||||
|
||||
def test_parse_driver_info_missing_password(self):
|
||||
|
@ -75,7 +75,7 @@ class IloCommonMethodsTestCase(base.TestCase):
|
|||
driver='ilo',
|
||||
driver_info=INFO_DICT)
|
||||
del node.driver_info['ilo_password']
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
ilo_common.parse_driver_info, node)
|
||||
|
||||
def test_parse_driver_info_invalid_timeout(self):
|
||||
|
@ -99,13 +99,13 @@ class IloCommonMethodsTestCase(base.TestCase):
|
|||
driver='ilo',
|
||||
driver_info=INFO_DICT)
|
||||
del node.driver_info['ilo_password']
|
||||
node.driver_info['client_port'] = 'qwe'
|
||||
del node.driver_info['ilo_address']
|
||||
try:
|
||||
ilo_common.parse_driver_info(node)
|
||||
self.fail("parse_driver_info did not throw exception.")
|
||||
except exception.InvalidParameterValue as e:
|
||||
except exception.MissingParameterValue as e:
|
||||
self.assertIn('ilo_password', str(e))
|
||||
self.assertIn('client_port', str(e))
|
||||
self.assertIn('ilo_address', str(e))
|
||||
|
||||
@mock.patch.object(ilo_common, 'ilo_client')
|
||||
def test_get_ilo_object(self, ilo_client_mock):
|
||||
|
|
|
@ -68,7 +68,7 @@ class IPMINativePrivateMethodTestCase(base.TestCase):
|
|||
del info['ipmi_username']
|
||||
|
||||
node = obj_utils.get_test_node(self.context, driver_info=info)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
ipminative._parse_driver_info,
|
||||
node)
|
||||
|
||||
|
@ -312,5 +312,5 @@ class IPMINativeDriverTestCase(db_base.DbTestCase):
|
|||
uuid=utils.generate_uuid(),
|
||||
driver='fake_ipminative')
|
||||
with task_manager.acquire(self.context, node.uuid) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
task.driver.management.validate, task)
|
||||
|
|
|
@ -134,14 +134,16 @@ class IPMIToolPrivateMethodTestCase(base.TestCase):
|
|||
ipmi._parse_driver_info(node)
|
||||
|
||||
# make sure error is raised when ipmi_address is missing
|
||||
info = dict(INFO_DICT)
|
||||
del info['ipmi_address']
|
||||
node = obj_utils.get_test_node(self.context, driver_info=info)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
ipmi._parse_driver_info,
|
||||
node)
|
||||
|
||||
# test the invalid priv_level value
|
||||
self.info['priv_level'] = 'ABCD'
|
||||
info = dict(INFO_DICT)
|
||||
info['ipmi_priv_level'] = 'ABCD'
|
||||
node = obj_utils.get_test_node(self.context, driver_info=info)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
ipmi._parse_driver_info,
|
||||
|
@ -915,7 +917,7 @@ class IPMIToolDriverTestCase(db_base.DbTestCase):
|
|||
uuid=utils.generate_uuid(),
|
||||
driver='fake_ipmitool')
|
||||
with task_manager.acquire(self.context, node.uuid) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
task.driver.management.validate, task)
|
||||
|
||||
def test__parse_ipmi_sensor_data_ok(self):
|
||||
|
|
|
@ -78,7 +78,7 @@ class PXEValidateParametersTestCase(base.TestCase):
|
|||
info = dict(DRV_INFO_DICT)
|
||||
del info['pxe_deploy_kernel']
|
||||
node = obj_utils.create_test_node(self.context, driver_info=info)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
pxe._parse_driver_info,
|
||||
node)
|
||||
|
||||
|
@ -87,7 +87,7 @@ class PXEValidateParametersTestCase(base.TestCase):
|
|||
info = dict(DRV_INFO_DICT)
|
||||
del info['pxe_deploy_ramdisk']
|
||||
node = obj_utils.create_test_node(self.context, driver_info=info)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
pxe._parse_driver_info,
|
||||
node)
|
||||
|
||||
|
@ -115,7 +115,7 @@ class PXEValidateParametersTestCase(base.TestCase):
|
|||
info = dict(INST_INFO_DICT)
|
||||
del info['image_source']
|
||||
node = obj_utils.create_test_node(self.context, instance_info=info)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
pxe._parse_instance_info,
|
||||
node)
|
||||
|
||||
|
@ -124,7 +124,7 @@ class PXEValidateParametersTestCase(base.TestCase):
|
|||
info = dict(INST_INFO_DICT)
|
||||
del info['root_gb']
|
||||
node = obj_utils.create_test_node(self.context, instance_info=info)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
pxe._parse_instance_info,
|
||||
node)
|
||||
|
||||
|
@ -590,7 +590,7 @@ class PXEDriverTestCase(db_base.DbTestCase):
|
|||
with task_manager.acquire(self.context, self.node.uuid,
|
||||
shared=True) as task:
|
||||
task.node['instance_info'] = json.dumps(info)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
task.driver.deploy.validate, task)
|
||||
|
||||
def test_validate_fail_no_port(self):
|
||||
|
|
|
@ -101,7 +101,7 @@ class SeaMicroValidateParametersTestCase(base.TestCase):
|
|||
info = dict(INFO_DICT)
|
||||
del info['seamicro_api_endpoint']
|
||||
node = obj_utils.get_test_node(self.context, driver_info=info)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
seamicro._parse_driver_info,
|
||||
node)
|
||||
|
||||
|
@ -110,7 +110,7 @@ class SeaMicroValidateParametersTestCase(base.TestCase):
|
|||
info = dict(INFO_DICT)
|
||||
del info['seamicro_username']
|
||||
node = obj_utils.get_test_node(self.context, driver_info=info)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
seamicro._parse_driver_info,
|
||||
node)
|
||||
|
||||
|
@ -119,7 +119,7 @@ class SeaMicroValidateParametersTestCase(base.TestCase):
|
|||
info = dict(INFO_DICT)
|
||||
del info['seamicro_password']
|
||||
node = obj_utils.get_test_node(self.context, driver_info=info)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
seamicro._parse_driver_info,
|
||||
node)
|
||||
|
||||
|
@ -128,7 +128,7 @@ class SeaMicroValidateParametersTestCase(base.TestCase):
|
|||
info = dict(INFO_DICT)
|
||||
del info['seamicro_server_id']
|
||||
node = obj_utils.get_test_node(self.context, driver_info=info)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
seamicro._parse_driver_info,
|
||||
node)
|
||||
|
||||
|
@ -584,5 +584,5 @@ class SeaMicroPowerDriverTestCase(db_base.DbTestCase):
|
|||
uuid=utils.generate_uuid(),
|
||||
driver='fake_seamicro')
|
||||
with task_manager.acquire(self.context, node.uuid) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
task.driver.management.validate, task)
|
||||
|
|
|
@ -120,7 +120,7 @@ class SSHValidateParametersTestCase(base.TestCase):
|
|||
info = db_utils.get_test_ssh_info()
|
||||
del info['ssh_address']
|
||||
node = obj_utils.get_test_node(self.context, driver_info=info)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
ssh._parse_driver_info,
|
||||
node)
|
||||
|
||||
|
@ -129,11 +129,11 @@ class SSHValidateParametersTestCase(base.TestCase):
|
|||
info = db_utils.get_test_ssh_info()
|
||||
del info['ssh_username']
|
||||
node = obj_utils.get_test_node(self.context, driver_info=info)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
ssh._parse_driver_info,
|
||||
node)
|
||||
|
||||
def test__parse_driver_info_missing_creds(self):
|
||||
def test__parse_driver_info_invalid_creds(self):
|
||||
# make sure error is raised when info is missing
|
||||
info = db_utils.get_test_ssh_info('no-creds')
|
||||
node = obj_utils.get_test_node(self.context, driver_info=info)
|
||||
|
@ -146,7 +146,7 @@ class SSHValidateParametersTestCase(base.TestCase):
|
|||
info = db_utils.get_test_ssh_info()
|
||||
del info['ssh_virt_type']
|
||||
node = obj_utils.get_test_node(self.context, driver_info=info)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
ssh._parse_driver_info,
|
||||
node)
|
||||
|
||||
|
@ -864,5 +864,5 @@ class SSHDriverTestCase(db_base.DbTestCase):
|
|||
uuid=utils.generate_uuid(),
|
||||
driver='fake_ssh')
|
||||
with task_manager.acquire(self.context, node.uuid) as task:
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
task.driver.management.validate, task)
|
||||
|
|
Loading…
Reference in New Issue