diff options
author | Dmitry Tantsur <dtantsur@protonmail.com> | 2022-01-20 17:20:24 +0100 |
---|---|---|
committer | Dmitry Tantsur <dtantsur@protonmail.com> | 2022-01-20 17:20:24 +0100 |
commit | 503e3658243bf8d793063734151c4f94e3af1fe4 (patch) | |
tree | 22d7d0e10ec81afee530fbf09b2f6fd8f8a81e6e /ironic | |
parent | c65cbb7aef1289b44d2f1ff0c3f0aaa7c31284c0 (diff) | |
download | ironic-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
Diffstat (limited to 'ironic')
-rw-r--r-- | ironic/drivers/modules/inspector.py | 12 | ||||
-rw-r--r-- | ironic/tests/unit/drivers/modules/test_inspector.py | 12 |
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): |