pungi/bin/pungi-config-dump
Lubomír Sedlář df35f26910 Add script to merge and dump multiple configuration files
The script can either take config from an existing compose, or load
files by path. By default it will perform full validation (and add
default values and resolved git references). This can be turned off.

The final JSON is printed to stdout.

JIRA: COMPOSE-3066
Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
2018-11-26 07:59:31 +01:00

75 lines
1.7 KiB
Python
Executable File

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import argparse
import json
import os
import sys
import kobo.conf
import pungi.checks
def load_file(source, conf):
try:
with open(source) as f:
conf.load_from_dict(json.load(f))
except ValueError:
conf.load_from_file(source)
def load_source(source, conf):
if os.path.isfile(source):
load_file(source, conf)
else:
load_file(os.path.join(source, "logs/global/config-dump.global.log"), conf)
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
"sources",
metavar="SOURCE",
nargs="+",
help=(
"Source for the configuration; either a compose "
"or arbitrary number of config files."
),
)
group = parser.add_mutually_exclusive_group()
group.add_argument(
"--just-dump",
action="store_true",
help=(
"Do not transform the config in any way. Default values are not "
"added, git references are not resolved."
),
)
group.add_argument(
"--offline", action="store_true", help="Do not resolve git references."
)
args = parser.parse_args()
conf = kobo.conf.PyConfigParser()
for source in args.sources:
load_source(source, conf)
if not args.just_dump:
errors, _ = pungi.checks.validate(conf, offline=args.offline)
if errors:
for error in errors:
print(error, file=sys.stderr)
return False
json.dump(conf, sys.stdout, sort_keys=True, indent=4)
return True
if __name__ == "__main__":
if not main():
sys.exit(1)