diff options
Diffstat (limited to 'cloudinit/sources/DataSourceLXD.py')
-rw-r--r-- | cloudinit/sources/DataSourceLXD.py | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/cloudinit/sources/DataSourceLXD.py b/cloudinit/sources/DataSourceLXD.py index eea1e294..ab440cc8 100644 --- a/cloudinit/sources/DataSourceLXD.py +++ b/cloudinit/sources/DataSourceLXD.py @@ -11,6 +11,7 @@ Notes: import os import socket import stat +import time from enum import Flag, auto from json.decoder import JSONDecodeError from typing import Any, Dict, List, Optional, Union, cast @@ -299,7 +300,20 @@ def _get_json_response( def _do_request( session: requests.Session, url: str, do_raise: bool = True ) -> requests.Response: - response = session.get(url) + for retries in range(30, 0, -1): + response = session.get(url) + if 500 == response.status_code: + # retry every 0.1 seconds for 3 seconds in the case of 500 error + # tis evil, but it also works around a bug + time.sleep(0.1) + LOG.warning( + "[GET] [HTTP:%d] %s, retrying %d more time(s)", + response.status_code, + url, + retries, + ) + else: + break LOG.debug("[GET] [HTTP:%d] %s", response.status_code, url) if do_raise and not response.ok: raise sources.InvalidMetaDataException( |