From e22be542884266ef781c67fad9ded19e38b0b6fa Mon Sep 17 00:00:00 2001 From: Alexandre Allard Date: Mon, 10 Aug 2020 13:26:16 +0200 Subject: [PATCH] charts: add option to change path of CSC defaults This is needed as we put Loki inside logging directory, so the path is not metalk8s/addons/loki/config/loki.yaml but metalk8s/addons/logging/loki/config/loki.yaml, so we need to be able to set the path. Refs: #2682 (cherry picked from commit daea4b25b8d14274164178b742bbe4124ffd65ec) --- charts/render.py | 67 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 20 deletions(-) diff --git a/charts/render.py b/charts/render.py index b6d3133a66..1fcfea6378 100755 --- a/charts/render.py +++ b/charts/render.py @@ -177,6 +177,32 @@ def main(): ) parser.add_argument('values', help="Our custom chart values") + class ActionServiceConfigArgs(argparse.Action): + def __call__(self, parser, args, values, option_string=None): + if len(values) > 3: + raise argparse.ArgumentTypeError( + 'Argument "{0}" requires between 1 and 3 arguments' + .format(option_string) + ) + + name = values.pop(0) + try: + configmap = values.pop(0) + except IndexError: + configmap = 'metalk8s-{0}-config'.format(name) + try: + path = values.pop(0) + except IndexError: + path = 'metalk8s/addons/{0}/config/{1}.yaml'.format( + args.name, name + ) + + option = getattr(args, self.dest) + if option is None: + setattr(args, self.dest, [[name, configmap, path]]) + else: + option.append([name, configmap, path]) + ''' To use this argument, follow the format below: --service-config service_name service_configmap_name @@ -189,11 +215,12 @@ def main(): # Todo: Add kind & apiVersion to the service-config nargs parser.add_argument( '--service-config', - action='append', - nargs=2, + action=ActionServiceConfigArgs, + nargs='+', required=False, dest="service_configs", - help="Example: --service-config grafana metalk8s-grafana-config" + help="Example: --service-config grafana metalk8s-grafana-config " + "metalk8s/addons/prometheus-operator/config/grafana.yaml" ) parser.add_argument('path', help="Path to the chart directory") args = parser.parse_args() @@ -212,27 +239,27 @@ def main(): doc=fixup_doc( doc=doc ) + ) if doc else None + + import_csc_yaml = [] + config = [] + for name, configmap, path in args.service_configs: + import_csc_yaml.append( + "{{% import_yaml '{0}' as {1}_defaults with context %}}".format( + path, name + ) ) - if args.service_configs: - import_csc_yaml = '\n'.join( - ("{{% import_yaml 'metalk8s/addons/{0}/config/{1}.yaml' as " - "{1}_defaults with context %}}").format( - args.name, service_config[0] - ) for service_config in args.service_configs - ) - - config = '\n'.join( - ("{{%- set {0} = salt.metalk8s_service_configuration" - ".get_service_conf('{1}', '{2}', {0}_defaults) %}}").format( - service_config[0], args.namespace, service_config[1] - ) for service_config in args.service_configs + config.append( + "{{%- set {0} = salt.metalk8s_service_configuration" + ".get_service_conf('{1}', '{2}', {0}_defaults) %}}".format( + name, args.namespace, configmap + ) ) - else: - import_csc_yaml = '' - config = '' sys.stdout.write(START_BLOCK.format( - csc_defaults=import_csc_yaml, configlines=config).lstrip() + csc_defaults='\n'.join(import_csc_yaml), + configlines='\n'.join(config) + ).lstrip() ) sys.stdout.write('\n')