diff --git a/docs/TOFS_pattern.rst b/docs/TOFS_pattern.rst index ec3bede..20233c8 100644 --- a/docs/TOFS_pattern.rst +++ b/docs/TOFS_pattern.rst @@ -325,6 +325,7 @@ We can simplify the ``conf.sls`` with the new ``files_switch`` macro to use in t * This uses ``config.get``, searching for ``ntp:tofs:source_files:Configure NTP`` to determine the list of template files to use. +* If this returns a result, the default of ``['/etc/ntp.conf.jinja']`` will be appended to it. * If this does not yield any results, the default of ``['/etc/ntp.conf.jinja']`` will be used. In ``libtofs.jinja``, we define this new macro ``files_switch``. @@ -426,7 +427,6 @@ The list of ``source_files`` can be given: tofs: source_files: Configure NTP: - - '/etc/ntp.conf.jinja' - '/etc/ntp.conf_alt.jinja' Resulting in: @@ -434,10 +434,13 @@ Resulting in: .. code-block:: sls - source: - - salt://ntp/files/theminion/etc/ntp.conf.jinja - salt://ntp/files/theminion/etc/ntp.conf_alt.jinja - - salt://ntp/files/Debian/etc/ntp.conf.jinja + - salt://ntp/files/theminion/etc/ntp.conf.jinja - salt://ntp/files/Debian/etc/ntp.conf_alt.jinja - - salt://ntp/files/default/etc/ntp.conf.jinja + - salt://ntp/files/Debian/etc/ntp.conf.jinja - salt://ntp/files/default/etc/ntp.conf_alt.jinja + - salt://ntp/files/default/etc/ntp.conf.jinja + +Note: This does *not* override the default value. +Rather, the value from the pillar/config is prepended to the default. diff --git a/nginx/libtofs.jinja b/nginx/libtofs.jinja index da656a5..9609be1 100644 --- a/nginx/libtofs.jinja +++ b/nginx/libtofs.jinja @@ -10,7 +10,7 @@ Params: * source_files: ordered list of files to look for - * lookup: key under ':tofs:source_files' to override + * lookup: key under ':tofs:source_files' to prepend to the list of source files * default_files_switch: if there's no config (e.g. pillar) ':tofs:files_switch' this is the ordered list of grains to @@ -55,14 +55,13 @@ tplroot ~ ':tofs:files_switch', default_files_switch ) %} - {#- Lookup source_files (v2), files (v1), or fallback to source_files parameter #} + {#- Lookup source_files (v2), files (v1), or fallback to an empty list #} {%- set src_files = salt['config.get']( tplroot ~ ':tofs:source_files:' ~ lookup, - salt['config.get']( - tplroot ~ ':tofs:files:' ~ lookup, - source_files - ) + salt['config.get'](tplroot ~ ':tofs:files:' ~ lookup, []) ) %} + {#- Append the default source_files #} + {%- set src_files = src_files + source_files %} {#- Only add to [''] when supporting older TOFS implementations #} {%- set path_prefix_exts = [''] %} {%- if v1_path_prefix != '' %} @@ -83,18 +82,25 @@ {%- for fs in fsl %} {%- for src_file in src_files %} {%- if fs %} - {%- set fs_dir = salt['config.get'](fs, fs) %} + {%- set fs_dirs = salt['config.get'](fs, fs) %} {%- else %} - {%- set fs_dir = salt['config.get'](tplroot ~ ':tofs:dirs:default', 'default') %} + {%- set fs_dirs = salt['config.get'](tplroot ~ ':tofs:dirs:default', 'default') %} {%- endif %} - {%- set url = [ - '- salt:/', - path_prefix_inc_ext.strip('/'), - files_dir.strip('/'), - fs_dir.strip('/'), - src_file.strip('/'), - ] | select | join('/') %} + {#- Force the `config.get` lookup result as a list where necessary #} + {#- since we need to also handle grains that are lists #} + {%- if fs_dirs is string %} + {%- set fs_dirs = [fs_dirs] %} + {%- endif %} + {%- for fs_dir in fs_dirs %} + {%- set url = [ + '- salt:/', + path_prefix_inc_ext.strip('/'), + files_dir.strip('/'), + fs_dir.strip('/'), + src_file.strip('/'), + ] | select | join('/') %} {{ url | indent(indent_width, true) }} + {%- endfor %} {%- endfor %} {%- endfor %} {%- endfor %}