#!/usr/bin/python3 """ Tree inputs Open the tree produced by the pipeline supplied via the first and only entry in `references`. The tree is opened in read only mode. If the id is `null` or the empty string it returns an empty tree. """ import json import sys from osbuild.objectstore import StoreClient SCHEMA = """ "additionalProperties": false, "required": ["type", "origin", "references"], "properties": { "type": { "enum": ["org.osbuild.tree"] }, "origin": { "description": "The origin of the input (must be 'org.osbuild.pipeline')", "type": "string", "enum": ["org.osbuild.pipeline"] }, "references": { "description": "Exactly one pipeline identifier to ues as tree input", "oneOf": [{ "type": "array", "additionalItems": false, "items": [{ "type": "string" }] }, { "type": "object", "additionalProperties": false, "patternProperties": { ".*": { "type": "object", "additionalProperties": false } }, "minProperties": 1, "maxProperties": 1 }] } } """ def error(msg): json.dump({"error": msg}, sys.stdout) sys.exit(1) def main(): args = json.load(sys.stdin) refs = args["refs"] # input verification *must* have been done via schema # verification. It is expected that origin is a pipeline # and we have exactly one reference, i.e. a pipeline id pid, _ = refs.popitem() store = StoreClient(connect_to=args["api"]["store"]) if not pid: path = store.mkdtemp(prefix="empty") else: path = store.read_tree(pid) if not path: error(f"Could not find pipeline with id '{pid}'") json.dump({"path": path}, sys.stdout) return 0 if __name__ == '__main__': r = main() sys.exit(r)