From 4af6a8f4381216e52459caafddb68da123a7ddf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= Date: Fri, 1 Apr 2016 09:26:41 +0200 Subject: [PATCH] Add a utility to validate config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This script will create all phases and run all validation methods. Fixes #244 Signed-off-by: Lubomír Sedlář --- bin/pungi-config-validate | 100 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100755 bin/pungi-config-validate diff --git a/bin/pungi-config-validate b/bin/pungi-config-validate new file mode 100755 index 00000000..20f8094b --- /dev/null +++ b/bin/pungi-config-validate @@ -0,0 +1,100 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from __future__ import print_function + +import argparse +import kobo.conf +import os +import sys +import tempfile +import contextlib +import shutil + +here = sys.path[0] +if here != '/usr/bin': + # Git checkout + sys.path[0] = os.path.dirname(here) + +import pungi.compose +import pungi.phases + + +class ValidationCompose(pungi.compose.Compose): + def __init__(self, conf, has_old): + self.conf = conf + self._logger = None + self.just_phases = [] + self.skip_phases = [] + self.has_old_composes = has_old + + @property + def old_composes(self): + return '/dummy' if self.has_old_composes else None + + +@contextlib.contextmanager +def in_temp_dir(): + tempdir = tempfile.mkdtemp() + yield tempdir + shutil.rmtree(tempdir) + + +def run(config, topdir, has_old): + conf = kobo.conf.PyConfigParser() + conf.load_from_file(config) + + compose = ValidationCompose(conf, has_old) + + pkgset_phase = pungi.phases.PkgsetPhase(compose) + phases = [ + pungi.phases.InitPhase(compose), + pungi.phases.BuildinstallPhase(compose), + pkgset_phase, + pungi.phases.GatherPhase(compose, pkgset_phase), + pungi.phases.ExtraFilesPhase(compose, pkgset_phase), + pungi.phases.CreaterepoPhase(compose), + pungi.phases.AtomicInstallerPhase(compose), + pungi.phases.OSTreePhase(compose), + pungi.phases.ProductimgPhase(compose, pkgset_phase), + pungi.phases.CreateisoPhase(compose), + pungi.phases.LiveImagesPhase(compose), + pungi.phases.LiveMediaPhase(compose), + pungi.phases.ImageBuildPhase(compose), + pungi.phases.ImageChecksumPhase(compose), + pungi.phases.TestPhase(compose), + ] + + errors = [] + for phase in phases: + if phase.skip(): + continue + try: + phase.validate() + except ValueError as ex: + for i in str(ex).splitlines(): + errors.append("%s: %s" % (phase.name.upper(), i)) + + return errors + + +def main(args=None): + parser = argparse.ArgumentParser() + parser.add_argument('config', metavar='CONFIG', + help='configuration file to validate') + parser.add_argument('--old-composes', action='store_true', + help='indicate if pungi-koji will be run with --old-composes option') + opts = parser.parse_args(args) + + with in_temp_dir() as topdir: + errors = run(opts.config, topdir, opts.old_composes) + + for msg in errors: + print(msg) + + return bool(errors) + + +if __name__ == '__main__': + if main(): + sys.exit(1)