From 6047bea7198d7ef6ecaafdb479f1c7d231098b3b Mon Sep 17 00:00:00 2001 From: Yuxiang Zhu Date: Mon, 13 Feb 2023 18:17:19 +0800 Subject: [PATCH] [ART-3324] Ignore disabled dependents Currently a disabled (or wip) image will be loaded anyway if it is listed as a dependent of an enabled image. This PR changes the behavior to ignore disabled dependents unless `--load-disabled` or `--load-wip` option is specified. --- doozerlib/image.py | 4 +++- doozerlib/runtime.py | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/doozerlib/image.py b/doozerlib/image.py index 0e2ded3f9..588c957ac 100644 --- a/doozerlib/image.py +++ b/doozerlib/image.py @@ -27,7 +27,9 @@ def __init__(self, runtime, data_obj: Dict, commitish: Optional[str] = None, clo self.dependencies: Set[str] = set() dependents = self.config.get('dependents', []) for d in dependents: - dependent: ImageMetadata = self.runtime.late_resolve_image(d, add=True) + dependent = self.runtime.late_resolve_image(d, add=True, required=False) + if not dependent: + continue dependent.dependencies.add(self.distgit_key) self.children.append(dependent) if clone_source: diff --git a/doozerlib/runtime.py b/doozerlib/runtime.py index 8ba2bfb06..c75f12707 100644 --- a/doozerlib/runtime.py +++ b/doozerlib/runtime.py @@ -1074,9 +1074,14 @@ def resolve_image(self, distgit_name, required=True): raise DoozerFatalError("Unable to find image metadata in group / included images: %s" % distgit_name) return self.image_map[distgit_name] - def late_resolve_image(self, distgit_name, add=False): + def late_resolve_image(self, distgit_name, add=False, required=True): """Resolve image and retrieve meta, optionally adding to image_map. - If image not found, error will be thrown""" + If image not found, error will be thrown + :param distgit_name: Distgit key + :param add: Add the image to image_map + :param required: If False, return None if the image is not enabled + :return: Image meta + """ if distgit_name in self.image_map: return self.image_map[distgit_name] @@ -1086,6 +1091,13 @@ def late_resolve_image(self, distgit_name, add=False): if not data_obj: raise DoozerFatalError('Unable to resolve image metadata for {}'.format(distgit_name)) + mode = data_obj.data.get("mode", "enabled") + if mode == "disabled" and not self.load_disabled or mode == "wip" and not self.load_wip: + if required: + raise DoozerFatalError('Attempted to load image {} but it has mode {}'.format(distgit_name, mode)) + self.logger.warning("Image %s will not be loaded because it has mode %s", distgit_name, mode) + return None + meta = ImageMetadata(self, data_obj, self.upstream_commitish_overrides.get(data_obj.key)) if add: self.image_map[distgit_name] = meta