From 3e94088e1ff7c0134b110cd669d4e9552985db38 Mon Sep 17 00:00:00 2001 From: Achilleas Koutsou Date: Mon, 27 Mar 2023 18:14:50 +0200 Subject: [PATCH] tools/osbuild-mpp: resolve manifest lists Add support for resolving manifest lists in osbuild-mpp. Adds an `index` boolean field to the container image struct for mpp-resolve-images. When enabled, the preprocessor will also store the manifest-list digest as a separate skopeo-index source and add it to the skopeo stage under the `manifest-lists` input. --- tools/osbuild-mpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tools/osbuild-mpp b/tools/osbuild-mpp index 2f44dd69..8ac86346 100755 --- a/tools/osbuild-mpp +++ b/tools/osbuild-mpp @@ -1495,12 +1495,14 @@ class ManifestFileV2(ManifestFile): return refs = element_enter(inputs_images, "references", {}) + manifest_lists = [] for image in element_enter(mpp, "images", []): source = image["source"] name = image.get("name", source) digest = image.get("digest", None) tag = image.get("tag", None) + index = image.get("index", False) main_manifest = ImageManifest.load(source, tag=tag, digest=digest) @@ -1529,6 +1531,23 @@ class ManifestFileV2(ManifestFile): "name": name } + if index: + manifest_lists.append(main_manifest.digest) + container_index_source = element_enter(self.sources, "org.osbuild.skopeo-index", {}) + index_items = element_enter(container_index_source, "items", {}) + index_items[main_manifest.digest] = { + "image": { + "name": source + } + } + + # if we collected manifest lists, create the manifest-lists input array for the stage + if manifest_lists: + inputs_manifests = element_enter(inputs, "manifest-lists", {}) + inputs_manifests["type"] = "org.osbuild.files" + inputs_manifests["origin"] = "org.osbuild.source" + inputs_manifests["references"] = manifest_lists + def main(): parser = argparse.ArgumentParser(description="Manifest pre processor")