From 58087332702d8c005675bf64f39cba106c764c54 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Wed, 12 Feb 2020 13:46:14 +0100 Subject: [PATCH] The pungi-config-validate --dump-schema now respects --schema-override. It is useful to actually check how the schema changed after applying --schema-override. This commit changes --dump-schema in a way that --schema-override is taken into account and dumped schema contains the changes done using the --schema-override. Signed-off-by: Jan Kaluza --- pungi/scripts/config_validate.py | 34 ++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/pungi/scripts/config_validate.py b/pungi/scripts/config_validate.py index 28e7b5f3..d4b9b5b5 100644 --- a/pungi/scripts/config_validate.py +++ b/pungi/scripts/config_validate.py @@ -72,6 +72,15 @@ def read_variants(compose, config): compose.all_variants[child.uid] = child +def make_final_schema(schema_overrides): + # Load schema including extra schemas JSON files. + schema = pungi.checks.make_schema() + for schema_override in schema_overrides: + with open(schema_override) as f: + schema = pungi.checks.update_schema(schema, json.load(f)) + return schema + + def run(config, topdir, has_old, offline, defined_variables, schema_overrides): # Load default values for undefined variables. This is useful for # validating templates that are supposed to be filled in later with @@ -88,12 +97,8 @@ def run(config, topdir, has_old, offline, defined_variables, schema_overrides): conf = pungi.util.load_config(config, defined_variables) # Remove the dummy variables used for defaults. config_utils.remove_unknown(conf, defined_variables) - # Load extra schemas JSON files. - schema = pungi.checks.make_schema() - for schema_override in schema_overrides: - with open(schema_override) as f: - schema = pungi.checks.update_schema(schema, json.load(f)) + schema = make_final_schema(schema_overrides) errors, warnings = pungi.checks.validate(conf, offline=offline, schema=schema) if errors or warnings: @@ -142,19 +147,18 @@ def run(config, topdir, has_old, offline, defined_variables, schema_overrides): return errors -class DumpSchemaAction(argparse.Action): - def __call__(self, parser, ns, values, option_string=None): - json.dump(pungi.checks.make_schema(), sys.stdout, sort_keys=True, indent=4) - print("") - sys.exit(0) +def dump_schema(schema_overrides): + # Load extra schemas JSON files. + schema = make_final_schema(schema_overrides) + json.dump(schema, sys.stdout, sort_keys=True, indent=4) + print("") def main(args=None): parser = argparse.ArgumentParser() parser.add_argument( "--dump-schema", - nargs=0, - action=DumpSchemaAction, + action="store_true", help="print JSON Schema of configuration and exit", ) parser.add_argument( @@ -166,7 +170,7 @@ def main(args=None): help="indicate if pungi-koji will be run with --old-composes option", ) parser.add_argument( - "--offline", action="store_true", help="Do not validate git references in URLs", + "--offline", action="store_true", help="Do not validate git references in URLs" ) parser.add_argument( "-e", @@ -192,6 +196,10 @@ def main(args=None): opts = parser.parse_args(args) defines = config_utils.extract_defines(opts.define) + if opts.dump_schema: + dump_schema(opts.schema_override) + sys.exit(0) + with pungi.util.temp_dir() as topdir: errors = run( opts.config,