summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Tantsur <dtantsur@protonmail.com>2021-08-05 16:17:03 +0200
committerDmitry Tantsur <dtantsur@protonmail.com>2021-08-05 16:17:03 +0200
commit528eb9e4a99762dea5ef5e08f3dd42d459ce2d1c (patch)
tree6a837ee71d4c2087cb1201b5699375f412ddf4e2
parent512364df9dca4e9b85c67a8e708857327e673892 (diff)
downloadironic-528eb9e4a99762dea5ef5e08f3dd42d459ce2d1c.tar.gz
Retry stdlib ssl.SSLError
Apparently, connection to the agent can fail with Unexpected error when processing next clean step. SSLError: ('timed out',): ssl.SSLError: ('timed out',) This change adds SSLError to retriable errors since most of them are related to temporary conditions, and the certificate validation failure is handled by requests separately. Change-Id: I4805d410b4bc98196e77d8c44a217e363dc88f0a
-rw-r--r--ironic/drivers/modules/agent_client.py3
-rw-r--r--ironic/tests/unit/drivers/modules/test_agent_client.py12
-rw-r--r--releasenotes/notes/sslerror-287edf7f8b3c5f1c.yaml4
3 files changed, 13 insertions, 6 deletions
diff --git a/ironic/drivers/modules/agent_client.py b/ironic/drivers/modules/agent_client.py
index cd5e04471..e03153833 100644
--- a/ironic/drivers/modules/agent_client.py
+++ b/ironic/drivers/modules/agent_client.py
@@ -14,6 +14,7 @@
from http import client as http_client
import os
+import ssl
from ironic_lib import metrics_utils
from oslo_log import log
@@ -203,7 +204,7 @@ class AgentClient(object):
url, params=request_params, data=body,
verify=self._get_verify(node),
timeout=CONF.agent.command_timeout)
- except (requests.ConnectionError, requests.Timeout) as e:
+ except (requests.ConnectionError, requests.Timeout, ssl.SSLError) as e:
result = self._handle_timeout_on_command_execution(node, method,
params, e)
response = None
diff --git a/ironic/tests/unit/drivers/modules/test_agent_client.py b/ironic/tests/unit/drivers/modules/test_agent_client.py
index 939663919..8bad2b96b 100644
--- a/ironic/tests/unit/drivers/modules/test_agent_client.py
+++ b/ironic/tests/unit/drivers/modules/test_agent_client.py
@@ -14,6 +14,7 @@
from http import client as http_client
import json
+import ssl
from unittest import mock
import requests
@@ -757,10 +758,11 @@ class TestAgentClientAttempts(base.TestCase):
method = 'standby.run_image'
image_info = {'image_id': 'test_image'}
params = {'image_info': image_info}
- self.client.session.post.side_effect = [requests.Timeout(error),
- requests.Timeout(error),
- requests.Timeout(error),
- requests.Timeout(error)]
+ self.client.session.post.side_effect = [
+ requests.Timeout(error),
+ ssl.SSLError('timed out'),
+ requests.ConnectionError(error),
+ requests.Timeout(error)]
self.client._get_command_url(self.node)
self.client._get_command_body(method, params)
@@ -781,7 +783,7 @@ class TestAgentClientAttempts(base.TestCase):
image_info = {'image_id': 'test_image'}
params = {'image_info': image_info}
self.client.session.post.side_effect = [requests.Timeout(error),
- requests.Timeout(error),
+ ssl.SSLError('timed out'),
MockResponse(response_data)]
response = self.client._command(self.node, method, params)
diff --git a/releasenotes/notes/sslerror-287edf7f8b3c5f1c.yaml b/releasenotes/notes/sslerror-287edf7f8b3c5f1c.yaml
new file mode 100644
index 000000000..9eac955bf
--- /dev/null
+++ b/releasenotes/notes/sslerror-287edf7f8b3c5f1c.yaml
@@ -0,0 +1,4 @@
+---
+fixes:
+ - |
+ Retries ``ssl.SSLError`` when connecting to the agent.