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:30:02 +0100
commit09a95de301acfd5d609505623caeaa5a37e0126c (patch)
tree7e6be635baebed2a59cbcdb67f586dd2c4c7bcf5
parent6095d36fc1f87f594a023fc53103cb1e94e54d92 (diff)
downloadironic-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.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 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):