Salt: [question] Iterate on state files

Created on 14 Apr 2016  Β·  2Comments  Β·  Source: saltstack/salt

How can I iterate on files located in files dir of the state?

Example of state dir structure:

generic/
β”œβ”€β”€ files/
β”‚Β Β  └── custom1.repo
β”‚Β Β  └──custom2.repo
β”‚Β Β  └── ...

β”œβ”€β”€ init.sls

I need to do something like

{% for file in files %}
install_repo_{{ file }}:
  file.managed:
    - name: /etc/yum.repos.d/{{ file }}
    - source: salt://generic/files/{{ file }}
    - template: jinja
{% endfor %}
Question

Most helpful comment

{% set files = [] %}
{% for f in salt['cp.list_master']() %}
  {% if f.startswith('generic/files'') %}
    {% do files.append(f) %}
  {% endif %}
{% endfor %}

{% for file in files %}
install_repo_{{ file }}:
  file.managed:
    - name: /etc/yum.repos.d/{{ file }}
    - source: salt://generic/files/{{ file }}
    - template: jinja
{% endfor %}

All 2 comments

{% set files = [] %}
{% for f in salt['cp.list_master']() %}
  {% if f.startswith('generic/files'') %}
    {% do files.append(f) %}
  {% endif %}
{% endfor %}

{% for file in files %}
install_repo_{{ file }}:
  file.managed:
    - name: /etc/yum.repos.d/{{ file }}
    - source: salt://generic/files/{{ file }}
    - template: jinja
{% endfor %}

@ngortheone, this would be even better:

{% for file in salt['cp.list_master'](prefix='generic/files') %}
install_repo_{{ file }}:
  file.managed:
    - name: /etc/yum.repos.d/{{ file }}
    - source: salt://generic/files/{{ file }}
    - template: jinja
{% endfor %}

Although I generally like to keep jinja logic separate from yaml as much as possible, like in the salt-pkg-tests repo, but in this case it doesn't seem too bad.

Was this page helpful?
0 / 5 - 0 ratings