From 2318bf75f6ac8f7d5b5e80a37dfb22a9c4ffce46 Mon Sep 17 00:00:00 2001 From: Robert Hoffmann Date: Wed, 31 Jul 2024 11:07:40 +0200 Subject: [PATCH] Fix: ignore resolve error while looking up node Log a warning instead of throwing an exception if an address of some node cannot be resolved, so new nodes can be registered in ironic. This solves the problem that if an address of any other node is not resolvable, no new node can be registered, even if its own address is resolvable. Closes-bug: #2072544 Change-Id: If7f65bcac2bb23c148ba27d45166d4a978df1e79 Signed-off-by: Robert Hoffmann --- ironic_inspector/common/ironic.py | 7 ++----- ironic_inspector/test/unit/test_common_ironic.py | 8 -------- .../notes/ignore-resolve-error-5c20514598e0dbbf.yaml | 7 +++++++ 3 files changed, 9 insertions(+), 13 deletions(-) create mode 100644 releasenotes/notes/ignore-resolve-error-5c20514598e0dbbf.yaml diff --git a/ironic_inspector/common/ironic.py b/ironic_inspector/common/ironic.py index 9d4a111de..eb8d6a76a 100644 --- a/ironic_inspector/common/ironic.py +++ b/ironic_inspector/common/ironic.py @@ -137,11 +137,8 @@ def get_ipmi_address(node): elif family == socket.AF_INET6: ipv6 = ip except socket.gaierror: - msg = _('Failed to resolve the hostname (%(value)s)' - ' for node %(uuid)s') - raise utils.Error(msg % {'value': value, - 'uuid': node.id}, - node_info=node) + LOG.warning('Failed to resolve the hostname (%s)' + ' for node %s', value, node.id, node_info=node) return (value, ipv4, ipv6) if ipv4 or ipv6 else none_address return none_address diff --git a/ironic_inspector/test/unit/test_common_ironic.py b/ironic_inspector/test/unit/test_common_ironic.py index bf538a916..0848db6f6 100644 --- a/ironic_inspector/test/unit/test_common_ironic.py +++ b/ironic_inspector/test/unit/test_common_ironic.py @@ -71,14 +71,6 @@ class TestGetIpmiAddress(base.BaseTest): mock_socket.assert_called_once_with(self.ipmi_address, None, 0, 0, socket.SOL_TCP) - @mock.patch('socket.getaddrinfo', autospec=True) - def test_bad_hostname_errors(self, mock_socket): - node = mock.Mock(spec=['driver_info', 'uuid'], - driver_info={'ipmi_address': 'meow'}, - id='uuid1') - mock_socket.side_effect = socket.gaierror('Boom') - self.assertRaises(utils.Error, ir_utils.get_ipmi_address, node) - def test_additional_fields(self): node = mock.Mock(spec=['driver_info', 'uuid'], driver_info={'foo': self.ipmi_ipv4}) diff --git a/releasenotes/notes/ignore-resolve-error-5c20514598e0dbbf.yaml b/releasenotes/notes/ignore-resolve-error-5c20514598e0dbbf.yaml new file mode 100644 index 000000000..47ebc75a3 --- /dev/null +++ b/releasenotes/notes/ignore-resolve-error-5c20514598e0dbbf.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + No longer throws an exception if an address of some node cannot be + resolved, but just logs a warning instead. This fixes the issue that + if an address of any other node is not resolvable, no new node can be + registered, even if its own address is resolvable.