summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Tantsur <dtantsur@protonmail.com>2022-01-20 17:20:24 +0100
committerDmitry Tantsur <dtantsur@protonmail.com>2022-01-20 17:20:24 +0100
commit503e3658243bf8d793063734151c4f94e3af1fe4 (patch)
tree22d7d0e10ec81afee530fbf09b2f6fd8f8a81e6e
parentc65cbb7aef1289b44d2f1ff0c3f0aaa7c31284c0 (diff)
downloadironic-503e3658243bf8d793063734151c4f94e3af1fe4.tar.gz
Inspector: better error message on DiscoveryFailure
The keystoneauth's error message on connection problems is very confusing: Version requested but version discovery document was not found and allow_version_hack was False While I'm trying to improve the situation in [1], it still won't be perfect. This patch adds some context to DiscoveryFailure. We should probably do the same for other services, but inspector is particularly affected since it can be used standalone. [1] https://review.opendev.org/c/openstack/keystoneauth/+/825540 Change-Id: Ibd41580d1389c7584639bf000e330fec5ee1b73d
-rw-r--r--ironic/drivers/modules/inspector.py12
-rw-r--r--ironic/tests/unit/drivers/modules/test_inspector.py12
2 files changed, 21 insertions, 3 deletions
diff --git a/ironic/drivers/modules/inspector.py b/ironic/drivers/modules/inspector.py
index ba29e0f14..833934793 100644
--- a/ironic/drivers/modules/inspector.py
+++ b/ironic/drivers/modules/inspector.py
@@ -20,6 +20,7 @@ import shlex
from urllib import parse as urlparse
import eventlet
+from keystoneauth1 import exceptions as ks_exception
import openstack
from oslo_log import log as logging
@@ -66,9 +67,14 @@ def _get_client(context):
conf['ironic-inspector'] = conf.pop('inspector')
# TODO(pas-ha) investigate possibility of passing user context here,
# similar to what neutron/glance-related code does
- return openstack.connection.Connection(
- session=session,
- oslo_conf=conf).baremetal_introspection
+ try:
+ return openstack.connection.Connection(
+ session=session,
+ oslo_conf=conf).baremetal_introspection
+ except ks_exception.DiscoveryFailure as exc:
+ raise exception.ConfigInvalid(
+ _("Could not contact ironic-inspector for version discovery: %s")
+ % exc)
def _get_callback_endpoint(client):
diff --git a/ironic/tests/unit/drivers/modules/test_inspector.py b/ironic/tests/unit/drivers/modules/test_inspector.py
index 3356ce813..09d70eba9 100644
--- a/ironic/tests/unit/drivers/modules/test_inspector.py
+++ b/ironic/tests/unit/drivers/modules/test_inspector.py
@@ -13,6 +13,7 @@
from unittest import mock
import eventlet
+from keystoneauth1 import exceptions as ks_exception
import openstack
from ironic.common import context
@@ -61,6 +62,17 @@ class GetClientTestCase(db_base.DbTestCase):
self.assertEqual(1, mock_auth.call_count)
self.assertEqual(1, mock_session.call_count)
+ def test__get_client_connection_problem(
+ self, mock_conn, mock_session, mock_auth):
+ mock_conn.side_effect = ks_exception.DiscoveryFailure("")
+ self.assertRaises(exception.ConfigInvalid,
+ inspector._get_client, self.context)
+ mock_conn.assert_called_once_with(
+ session=mock.sentinel.session,
+ oslo_conf=mock.ANY)
+ self.assertEqual(1, mock_auth.call_count)
+ self.assertEqual(1, mock_session.call_count)
+
class BaseTestCase(db_base.DbTestCase):
def setUp(self):