diff options
author | Dmitry Tantsur <dtantsur@protonmail.com> | 2022-01-20 17:20:24 +0100 |
---|---|---|
committer | Dmitry Tantsur <dtantsur@protonmail.com> | 2022-02-01 19:30:02 +0100 |
commit | 09a95de301acfd5d609505623caeaa5a37e0126c (patch) | |
tree | 7e6be635baebed2a59cbcdb67f586dd2c4c7bcf5 | |
parent | 6095d36fc1f87f594a023fc53103cb1e94e54d92 (diff) | |
download | ironic-09a95de301acfd5d609505623caeaa5a37e0126c.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
(cherry picked from commit 503e3658243bf8d793063734151c4f94e3af1fe4)
-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 825e0b459..42e745373 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 d0a529852..005b3434b 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): |