summaryrefslogtreecommitdiff
path: root/ironic
diff options
context:
space:
mode:
authorSam Betts <sam@code-smash.net>2018-05-08 14:08:02 +0100
committerJim Rollenhagen <jim@jimrollenhagen.com>2018-05-08 22:52:19 +0000
commit6ff9a6b14c22c2cf640ba7a20828fed976b25f03 (patch)
treed559fc86617dd9c2d391ae0b081cc7cc4b6546c8 /ironic
parent02d8fa139357677240d55248b7bb8ad4d6a90c0a (diff)
downloadironic-6ff9a6b14c22c2cf640ba7a20828fed976b25f03.tar.gz
Make validation failure on node deploy a 4XX code
Missing information and other validation issues with instance_info is a user error and should be a 4XX code HTTP response, currently Ironic responds with a 5XX code indicating something has gone wrong with the service. Change-Id: If76e2aba97e0ed9fa63ad3c411ed92969164d3dc Story: #2001983 Task: #19600
Diffstat (limited to 'ironic')
-rw-r--r--ironic/common/exception.py2
-rw-r--r--ironic/conductor/manager.py2
-rw-r--r--ironic/tests/unit/conductor/test_manager.py1
3 files changed, 4 insertions, 1 deletions
diff --git a/ironic/common/exception.py b/ironic/common/exception.py
index f33cac85f..8ab107d9f 100644
--- a/ironic/common/exception.py
+++ b/ironic/common/exception.py
@@ -104,6 +104,8 @@ class IronicException(Exception):
self.kwargs['code'] = self.code
except AttributeError:
pass
+ else:
+ self.code = int(kwargs['code'])
if not message:
try:
diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py
index 6e3182358..801f7808c 100644
--- a/ironic/conductor/manager.py
+++ b/ironic/conductor/manager.py
@@ -827,7 +827,7 @@ class ConductorManager(base_manager.BaseConductorManager):
raise exception.InstanceDeployFailure(
_("Failed to validate deploy or power info for node "
"%(node_uuid)s. Error: %(msg)s") %
- {'node_uuid': node.uuid, 'msg': e})
+ {'node_uuid': node.uuid, 'msg': e}, code=e.code)
LOG.debug("do_node_deploy Calling event: %(event)s for node: "
"%(node)s", {'event': event, 'node': node.uuid})
diff --git a/ironic/tests/unit/conductor/test_manager.py b/ironic/tests/unit/conductor/test_manager.py
index eb6cd3eed..7efbdc681 100644
--- a/ironic/tests/unit/conductor/test_manager.py
+++ b/ironic/tests/unit/conductor/test_manager.py
@@ -1218,6 +1218,7 @@ class ServiceDoNodeDeployTestCase(mgr_utils.ServiceSetUpMixin,
self.context, node.uuid)
# Compare true exception hidden by @messaging.expected_exceptions
self.assertEqual(exception.InstanceDeployFailure, exc.exc_info[0])
+ self.assertEqual(exc.exc_info[1].code, 400)
# Check the message of InstanceDeployFailure. In a
# messaging.rpc.ExpectedException sys.exc_info() is stored in exc_info
# in the exception object. So InstanceDeployFailure will be in