diff --git a/pycloudlib/lxd/_images.py b/pycloudlib/lxd/_images.py index c1f4e004..e0747999 100644 --- a/pycloudlib/lxd/_images.py +++ b/pycloudlib/lxd/_images.py @@ -1,13 +1,16 @@ """LXD/LXD images' related functionalities.""" +import contextlib import functools import itertools import json +import logging from typing import Any, List, Optional, Sequence, Tuple from pycloudlib.util import subp _REMOTE_DAILY = "ubuntu-daily" _REMOTE_RELEASE = "ubuntu" +log = logging.getLogger(__name__) def find_last_fingerprint( @@ -145,4 +148,13 @@ def _find_images( if filters is not None: compiled_filters = map(lambda f: f"{f[0]}={f[1]}", filters) cmd.extend(compiled_filters) - return json.loads(subp(cmd)) + iter = 5 + + # retry for resilience against connection reset by peer + for i in range(iter): + try: + return json.loads(subp(cmd)) + except RuntimeError as e: + if i == iter - 1: + raise e + log.warning("Failed to get image list, retrying due to: %s", e)