Skip to content

Instantly share code, notes, and snippets.

Created June 7, 2017 21:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/a23a0d965f68a4f238d85068148772e5 to your computer and use it in GitHub Desktop.
Save anonymous/a23a0d965f68a4f238d85068148772e5 to your computer and use it in GitHub Desktop.
{# Define master lists #}
{% set master_default_path = "files/default/" ~ grains['os'] ~ "/" ~ grains['osmajorrelease'] ~ "/etc" %}
{% set master_custom_path = "files/custom/" ~ grains['os'] ~ "/" ~ grains['osmajorrelease'] ~ "/" ~ grains['id'] ~ "/etc" %}
{% set master_default_file_list = salt.cp.list_master(prefix=master_default_path) %}
{% set master_custom_file_list = salt.cp.list_master(prefix=master_custom_path) %}
{% set trimmed_custom_list = [] %}
{% set master_file_list = [] %}
{# Create master file list #}
{% for file_path in master_default_file_list %}
{% set relative_path = file_path.split('/')[4:]|join('/') %}
{% do master_file_list.append(relative_path) %}
{% endfor %}
{% for file_path in master_custom_file_list %}
{% set relative_path = file_path.split('/')[5:]|join('/') %}
{% do master_file_list.append(relative_path) %}
{% do trimmed_custom_list.append(relative_path) %}
{% endfor %}
{# Remove duplicates from master list (requires custom salt/utils/jinja.py until SaltStack Nitrogen #}
{% set final_list = master_file_list | unique %}
{# Iterate through master list, check for custom, and push to minion #}
{% for file_path in final_list %}
{% if file_path in trimmed_custom_list %}
{{ "custom_" ~ file_path }}:
{% else %}
{{ file_path }}:
{% endif %}
file.managed:
- name: {{ "/" ~ file_path }}
{% if file_path in trimmed_custom_list %}
- source: salt://files/custom/{{ grains['os'] }}/{{ grains['osmajorrelease'] }}/{{ grains['id'] }}/{{ file_path }}
{% else %}
- source: salt://files/default/{{ grains['os'] }}/{{ grains['osmajorrelease'] }}/{{ file_path }}
{% endif %}
- mode: keep
{% endfor %}
{# Output to machine's /tmp for testing #}
/tmp/final.txt:
file.managed:
- contents: |
{{ final_list }}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment