summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Tantsur <dtantsur@protonmail.com>2022-01-20 17:20:24 +0100
committerDmitry Tantsur <dtantsur@protonmail.com>2022-02-01 19:29:29 +0100
commit8de7e84d5b0fdbdb2fa84d9b687819bdb48060e7 (patch)
tree8b92af1b9cea0db432f6fbe7427aea62b4634bd1
parent79a532c7af87e38423bc7353d2b7a176631e22e4 (diff)
downloadironic-8de7e84d5b0fdbdb2fa84d9b687819bdb48060e7.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.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 b344abb74..0a3219b71 100644
--- a/ironic/drivers/modules/inspector.py
+++ b/ironic/drivers/modules/inspector.py
@@ -21,6 +21,7 @@ from urllib import parse as urlparse
import eventlet
from futurist import periodics
+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):