pungi/bin/pungi-config-dump
Lubomír Sedlář 8b84aa384a config-dump: Allow freezing koji event
Accept similar argument to pungi-koji: either direct event ID, or a path
to a compose from which the event will be extracted.

It would be nice if we could reuse the path to compose given as source,
but there may be more that one compose, so ultimately we need a way to
overwrite it anyway.

JIRA: COMPOSE-3278
Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
2019-02-26 10:52:45 +01:00

88 lines
2.0 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
import pungi.util
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."
),
)
parser.add_argument(
"--freeze-event",
metavar="ID",
type=pungi.util.parse_koji_event,
help=(
"Include this koji event in the created config; "
"takes either event ID or path to a compose"
),
)
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
if args.freeze_event:
conf["koji_event"] = args.freeze_event
json.dump(conf, sys.stdout, sort_keys=True, indent=4)
return True
if __name__ == "__main__":
if not main():
sys.exit(1)