summaryrefslogtreecommitdiff
path: root/cloudinit/sources/DataSourceLXD.py
diff options
context:
space:
mode:
Diffstat (limited to 'cloudinit/sources/DataSourceLXD.py')
-rw-r--r--cloudinit/sources/DataSourceLXD.py16
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(