diff --git a/openvpn/libmapstack.jinja b/openvpn/libmapstack.jinja index 4e8c7f8..c671c0e 100644 --- a/openvpn/libmapstack.jinja +++ b/openvpn/libmapstack.jinja @@ -196,6 +196,19 @@ {%- set yaml_names = [yaml_names] %} {%- endif %} +{#- Try to load a `.yaml.jinja` file for each `.yaml` file #} +{%- set all_yaml_names = [] %} +{%- for name in yaml_names %} +{%- set extension = name.rpartition(".")[2] %} +{%- if extension not in ["yaml", "jinja"] %} +{%- do all_yaml_names.extend([name ~ ".yaml", name ~ ".yaml.jinja"]) %} +{%- elif extension == "yaml" %} +{%- do all_yaml_names.extend([name, name ~ ".jinja"]) %} +{%- else %} +{%- do all_yaml_names.append(name) %} +{%- endif %} +{%- endfor %} + {#- `yaml_dirname` can be an empty string with literal path like `myconf.yaml` #} {%- set yaml_dir = [ param_dir, @@ -204,15 +217,10 @@ | select | join("/") %} -{%- for yaml_name in yaml_names %} -{#- Make sure to have a `.yaml` extension #} -{#- Use `.rpartition` to strip last `.yaml` in `dir.yaml/file.yaml` #} +{%- for yaml_name in all_yaml_names %} {%- set yaml_filename = [ yaml_dir.rstrip("/"), - yaml_name.rpartition(".yaml") - | reject("equalto", ".yaml") - | join - ~ ".yaml" + yaml_name ] | select | join("/") %} diff --git a/openvpn/map.jinja b/openvpn/map.jinja index 9fdba2b..7340d53 100644 --- a/openvpn/map.jinja +++ b/openvpn/map.jinja @@ -38,6 +38,7 @@ {#- Load formula parameters values #} {%- set _formula_matchers = ["defaults.yaml"] + map_sources %} + {%- set _formula_settings = mapstack( matchers=_formula_matchers, dirs=[formula_param_dir], @@ -59,3 +60,7 @@ {%- do salt["log.debug"]("map.jinja: save parameters in variable 'mapdata'") %} {%- set mapdata = _formula_settings["values"] %} + +{#- Per formula post-processing of `mapdata` if it exists #} +{%- do salt["log.debug"]("map.jinja: post-processing of 'mapdata'") %} +{%- include tplroot ~ "/post-map.jinja" ignore missing %} diff --git a/openvpn/parameters/defaults.yaml b/openvpn/parameters/defaults.yaml index c8f563c..f123143 100644 --- a/openvpn/parameters/defaults.yaml +++ b/openvpn/parameters/defaults.yaml @@ -1,4 +1,3 @@ -# yamllint disable-file # -*- coding: utf-8 -*- # vim: ft=yaml --- @@ -14,7 +13,7 @@ values: group: nobody # None, will default to 'user' log_user: ~ - multi_services: {{ salt['grains.has_value']('systemd') }} + multi_services: false pkgs: ['openvpn'] service: openvpn service_function: running diff --git a/openvpn/parameters/defaults.yaml.jinja b/openvpn/parameters/defaults.yaml.jinja new file mode 100644 index 0000000..3e068d0 --- /dev/null +++ b/openvpn/parameters/defaults.yaml.jinja @@ -0,0 +1,15 @@ +{#- -*- coding: utf-8 -*- #} +{#- vim: ft=jinja #} +{#- + Setup variables after loading `defaults.yaml`. + + This jinja2 file must return a valid `map.jinja` YAML which will + be merged into `defaults.yaml`. + + If you do not need to provide calculated defaults, you can remove + this file or provide at least an empty dict, e.g. values: {} +#} +--- +values: + multi_services: {{ salt['grains.has_value']('systemd') }} +...