summaryrefslogtreecommitdiff
path: root/ironic_python_agent
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2020-08-24 13:29:27 +0000
committerGerrit Code Review <review@openstack.org>2020-08-24 13:29:27 +0000
commitcfede0c5bc75ea61f42c1a17809586191ebb4edf (patch)
tree455b4786c6e23534f3d352d5dfedafdbba180bd1 /ironic_python_agent
parenta8b865de9e37b80cccce0884359a796f10662f39 (diff)
parentf670f704f3e4bf9b05a97d1f39ab99febfe29cf7 (diff)
downloadironic-python-agent-cfede0c5bc75ea61f42c1a17809586191ebb4edf.tar.gz
Merge "Clarify connection error on heartbeats"
Diffstat (limited to 'ironic_python_agent')
-rw-r--r--ironic_python_agent/errors.py10
-rw-r--r--ironic_python_agent/ironic_api_client.py2
-rw-r--r--ironic_python_agent/tests/unit/test_ironic_api_client.py10
3 files changed, 22 insertions, 0 deletions
diff --git a/ironic_python_agent/errors.py b/ironic_python_agent/errors.py
index 99bbe2b8..bf0253dd 100644
--- a/ironic_python_agent/errors.py
+++ b/ironic_python_agent/errors.py
@@ -348,3 +348,13 @@ class ClockSyncError(RESTError):
"""Error raised when attempting to sync the system clock."""
message = 'Error syncing system clock'
+
+
+class HeartbeatConnectionError(IronicAPIError):
+ """Transitory connection failure occured attempting to contact the API."""
+
+ message = ("Error attempting to heartbeat - Possible transitory network "
+ "failure or blocking port may be present.")
+
+ def __init__(self, details):
+ super(HeartbeatConnectionError, self).__init__(details)
diff --git a/ironic_python_agent/ironic_api_client.py b/ironic_python_agent/ironic_api_client.py
index 747b133d..4738f22d 100644
--- a/ironic_python_agent/ironic_api_client.py
+++ b/ironic_python_agent/ironic_api_client.py
@@ -125,6 +125,8 @@ class APIClient(object):
try:
response = self._request('POST', path, data=data, headers=headers)
+ except requests.exceptions.ConnectionError as e:
+ raise errors.HeartbeatConnectionError(str(e))
except Exception as e:
raise errors.HeartbeatError(str(e))
diff --git a/ironic_python_agent/tests/unit/test_ironic_api_client.py b/ironic_python_agent/tests/unit/test_ironic_api_client.py
index 562f06be..bd710e77 100644
--- a/ironic_python_agent/tests/unit/test_ironic_api_client.py
+++ b/ironic_python_agent/tests/unit/test_ironic_api_client.py
@@ -234,6 +234,16 @@ class TestBaseIronicPythonAgent(base.IronicAgentTest):
uuid='deadbeef-dabb-ad00-b105-f00d00bab10c',
advertise_address=('192.0.2.1', '9999'))
+ def test_heartbeat_requests_connection_error(self):
+ self.api_client.session.request = mock.Mock()
+ self.api_client.session.request.side_effect = \
+ requests.exceptions.ConnectionError
+ self.assertRaisesRegex(errors.HeartbeatConnectionError,
+ 'transitory network failure or blocking port',
+ self.api_client.heartbeat,
+ uuid='meow',
+ advertise_address=('192.0.2.1', '9999'))
+
@mock.patch('eventlet.greenthread.sleep', autospec=True)
@mock.patch('ironic_python_agent.ironic_api_client.APIClient._do_lookup',
autospec=True)