From e3cd230c066e92397d6f91f13818daab49def1ac Mon Sep 17 00:00:00 2001 From: Ben Nemec Date: Fri, 17 Aug 2018 21:07:09 +0000 Subject: [PATCH] Add support for machine-readable files to validator In some cases it may be easier to generate a machine-readable sample config file and use that to validate a config file instead of using the config generator directly. Change-Id: I7afe65c4abcbf8cdf1f5299ed3826c7205074e28 --- oslo_config/validator.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/oslo_config/validator.py b/oslo_config/validator.py index 350496b1..b296d92b 100644 --- a/oslo_config/validator.py +++ b/oslo_config/validator.py @@ -25,6 +25,7 @@ import logging import sys import pkg_resources +import yaml from oslo_config import cfg from oslo_config import generator @@ -33,13 +34,16 @@ from oslo_config import generator _validator_opts = [ cfg.MultiStrOpt( 'namespace', - required=True, help='Option namespace under "oslo.config.opts" in which to query ' 'for options.'), cfg.StrOpt( 'input-file', required=True, help='Config file to validate.'), + cfg.StrOpt( + 'opt-data', + help='Path to a YAML file containing definitions of options, as ' + 'output by the config generator.'), cfg.BoolOpt( 'fatal-warnings', default=False, @@ -77,8 +81,15 @@ def _validate_opt(group, option, opt_data): def _validate(conf): conf.register_opts(_validator_opts) - groups = generator._get_groups(generator._list_opts(conf.namespace)) - opt_data = generator._generate_machine_readable_data(groups, conf) + if conf.namespace: + groups = generator._get_groups(generator._list_opts(conf.namespace)) + opt_data = generator._generate_machine_readable_data(groups, conf) + elif conf.opt_data: + with open(conf.opt_data) as f: + opt_data = yaml.safe_load(f) + else: + # TODO(bnemec): Implement this logic with group? + raise RuntimeError('Neither namespace or opt-data provided.') sections = {} parser = cfg.ConfigParser(conf.input_file, sections) parser.parse()