summaryrefslogtreecommitdiff
path: root/ironic
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-08-13 14:19:45 +0000
committerGerrit Code Review <review@openstack.org>2014-08-13 14:19:45 +0000
commit1929555815f91212812cd4662d40ac2714df8b3b (patch)
tree59e6d582789b4812d1ef8cdcf3a10b5d518adab2 /ironic
parentdf8b6f06a51779d13c94a9f364f730586d5d48b2 (diff)
parent3419b38b1128a44147733b3ff003cdf0f61bebc6 (diff)
downloadironic-1929555815f91212812cd4662d40ac2714df8b3b.tar.gz
Merge "Raise MissingParameterValue instead of Invalid"
Diffstat (limited to 'ironic')
-rw-r--r--ironic/api/controllers/v1/node.py2
-rw-r--r--ironic/api/controllers/v1/port.py2
-rw-r--r--ironic/common/exception.py4
-rw-r--r--ironic/conductor/manager.py49
-rw-r--r--ironic/conductor/rpcapi.py9
-rw-r--r--ironic/drivers/base.py12
-rw-r--r--ironic/drivers/modules/fake.py6
-rw-r--r--ironic/drivers/modules/ilo/common.py19
-rw-r--r--ironic/drivers/modules/ipminative.py25
-rw-r--r--ironic/drivers/modules/ipmitool.py35
-rw-r--r--ironic/drivers/modules/pxe.py17
-rw-r--r--ironic/drivers/modules/seamicro.py29
-rw-r--r--ironic/drivers/modules/ssh.py13
-rw-r--r--ironic/drivers/utils.py5
-rw-r--r--ironic/tests/conductor/test_conductor_utils.py4
-rw-r--r--ironic/tests/conductor/test_manager.py4
-rw-r--r--ironic/tests/drivers/ilo/test_common.py12
-rw-r--r--ironic/tests/drivers/test_ipminative.py4
-rw-r--r--ironic/tests/drivers/test_ipmitool.py8
-rw-r--r--ironic/tests/drivers/test_pxe.py10
-rw-r--r--ironic/tests/drivers/test_seamicro.py10
-rw-r--r--ironic/tests/drivers/test_ssh.py10
22 files changed, 191 insertions, 98 deletions
diff --git a/ironic/api/controllers/v1/node.py b/ironic/api/controllers/v1/node.py
index e659b9991..df8b0a8b9 100644
--- a/ironic/api/controllers/v1/node.py
+++ b/ironic/api/controllers/v1/node.py
@@ -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)
diff --git a/ironic/api/controllers/v1/port.py b/ironic/api/controllers/v1/port.py
index 0158dc3f2..cb9961ef8 100644
--- a/ironic/api/controllers/v1/port.py
+++ b/ironic/api/controllers/v1/port.py
@@ -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)
diff --git a/ironic/common/exception.py b/ironic/common/exception.py
index 7c7dbdd09..7209b065a 100644
--- a/ironic/common/exception.py
+++ b/ironic/common/exception.py
@@ -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
diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py
index 64e53a09e..5d8e27e48 100644
--- a/ironic/conductor/manager.py
+++ b/ironic/conductor/manager.py
@@ -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`.
diff --git a/ironic/conductor/rpcapi.py b/ironic/conductor/rpcapi.py
index 3c9164245..177424a93 100644
--- a/ironic/conductor/rpcapi.py
+++ b/ironic/conductor/rpcapi.py
@@ -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`.
diff --git a/ironic/drivers/base.py b/ironic/drivers/base.py
index 0a6446a26..7b4c1f929 100644
--- a/ironic/drivers/base.py
+++ b/ironic/drivers/base.py
@@ -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.
diff --git a/ironic/drivers/modules/fake.py b/ironic/drivers/modules/fake.py
index e2ea7aceb..6474a8d92 100644
--- a/ironic/drivers/modules/fake.py
+++ b/ironic/drivers/modules/fake.py
@@ -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)
diff --git a/ironic/drivers/modules/ilo/common.py b/ironic/drivers/modules/ilo/common.py
index a386f0294..26650ee1e 100644
--- a/ironic/drivers/modules/ilo/common.py
+++ b/ironic/drivers/modules/ilo/common.py
@@ -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.
"""
diff --git a/ironic/drivers/modules/ipminative.py b/ironic/drivers/modules/ipminative.py
index 53303c861..517132a4b 100644
--- a/ironic/drivers/modules/ipminative.py
+++ b/ironic/drivers/modules/ipminative.py
@@ -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:
diff --git a/ironic/drivers/modules/ipmitool.py b/ironic/drivers/modules/ipmitool.py
index 24faca872..a4a633060 100644
--- a/ironic/drivers/modules/ipmitool.py
+++ b/ironic/drivers/modules/ipmitool.py
@@ -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):
diff --git a/ironic/drivers/modules/pxe.py b/ironic/drivers/modules/pxe.py
index ad22e7f28..ce410d335 100644
--- a/ironic/drivers/modules/pxe.py
+++ b/ironic/drivers/modules/pxe.py
@@ -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)
diff --git a/ironic/drivers/modules/seamicro.py b/ironic/drivers/modules/seamicro.py
index 0274e0f37..6481d3c27 100644
--- a/ironic/drivers/modules/seamicro.py
+++ b/ironic/drivers/modules/seamicro.py
@@ -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():
diff --git a/ironic/drivers/modules/ssh.py b/ironic/drivers/modules/ssh.py
index 429f6d048..9795cc439 100644
--- a/ironic/drivers/modules/ssh.py
+++ b/ironic/drivers/modules/ssh.py
@@ -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:
diff --git a/ironic/drivers/utils.py b/ironic/drivers/utils.py
index 47ceef275..c91045440 100644
--- a/ironic/drivers/utils.py
+++ b/ironic/drivers/utils.py
@@ -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)
diff --git a/ironic/tests/conductor/test_conductor_utils.py b/ironic/tests/conductor/test_conductor_utils.py
index 6db87f144..f36c3d139 100644
--- a/ironic/tests/conductor/test_conductor_utils.py
+++ b/ironic/tests/conductor/test_conductor_utils.py
@@ -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,
diff --git a/ironic/tests/conductor/test_manager.py b/ironic/tests/conductor/test_manager.py
index dc2a071f7..f3f6dcc82 100644
--- a/ironic/tests/conductor/test_manager.py
+++ b/ironic/tests/conductor/test_manager.py
@@ -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)
diff --git a/ironic/tests/drivers/ilo/test_common.py b/ironic/tests/drivers/ilo/test_common.py
index 397279145..1f3c87aa5 100644
--- a/ironic/tests/drivers/ilo/test_common.py
+++ b/ironic/tests/drivers/ilo/test_common.py
@@ -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):
diff --git a/ironic/tests/drivers/test_ipminative.py b/ironic/tests/drivers/test_ipminative.py
index 576846551..6bf476775 100644
--- a/ironic/tests/drivers/test_ipminative.py
+++ b/ironic/tests/drivers/test_ipminative.py
@@ -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)
diff --git a/ironic/tests/drivers/test_ipmitool.py b/ironic/tests/drivers/test_ipmitool.py
index 9ac46ac33..b6ef7f357 100644
--- a/ironic/tests/drivers/test_ipmitool.py
+++ b/ironic/tests/drivers/test_ipmitool.py
@@ -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):
diff --git a/ironic/tests/drivers/test_pxe.py b/ironic/tests/drivers/test_pxe.py
index 541a1fc60..2722ede48 100644
--- a/ironic/tests/drivers/test_pxe.py
+++ b/ironic/tests/drivers/test_pxe.py
@@ -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):
diff --git a/ironic/tests/drivers/test_seamicro.py b/ironic/tests/drivers/test_seamicro.py
index 42c8f4ced..c9c973c0a 100644
--- a/ironic/tests/drivers/test_seamicro.py
+++ b/ironic/tests/drivers/test_seamicro.py
@@ -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)
diff --git a/ironic/tests/drivers/test_ssh.py b/ironic/tests/drivers/test_ssh.py
index a9d68edef..d018cf7d8 100644
--- a/ironic/tests/drivers/test_ssh.py
+++ b/ironic/tests/drivers/test_ssh.py
@@ -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)