Saltstack load pillar in a for loop
Your loop should also look like:
{% for user, args in pillar.get('ftpusers', {}).items() %}
Also, contents
argument for a file.managed
doesn't support templating. What you need to do is move /srv/herma-ftp/.ftpusers
state outside of the loop, and make the loop inside the file template. The final layout of your state should look like:
/srv/herma-ftp/.ftpusers
file.managed:
source: salt://ftpserver/dot.ftpusers
template: jinja
...
...
{% for user, args in pillar.get('ftpusers', {}).items() %}
/srv/herma-ftp/{{user}}:
file.managed:
...
{% endfor %}
And your ftpserver/dot.ftpusers
would look like:
{% for user, args in pillar.get('ftpusers', {}).items() %}
{{ user }}:{{ args['passhash'] }}:{{args['uuid'] }}:{{ args['guid'] }}::{{ args['home'] }}:{{ args['shel'] }}
{% endfor %}
feb992
Updated on June 08, 2022Comments
-
feb992 almost 2 years
I am developing a automatic proftd installation whit Salt, i wont to get the ftp users from a template but I cant get work the pillar, i initialized the pillar whit the users data and call it into a for loop, but you don't get the pillar user data in the loop.
When i make salt-call pillar.get ftpusers in the minion, the response is:
local:
This is my pillar ftpusers.sls:
ftp-server.ftpusers: user: - user: user - passhash: j2k3hk134123l1234ljh!"·$ser - uuid: 1001 - guid: 1001 - home: /srv/ftp/user - shel: /bin/false
And this is the for loop:
{% for users in pillar.get('ftpusers', {}).items() %} /srv/herma-ftp/.ftpusers: file.managed: - user: root - group: root - mode: 444 - contents:'{{ user }}:{{ args['passhash'] }}:{{args['uuid'] }}:{{ args['guid'] }}::{{ args['home'] }}:{{ args['shel'] }}' - require: - file: /srv/herma-ftp /srv/herma-ftp/{{user}}: file.directory: - user: nobody - group: nobody - dir_mode: 775 - makedirs: True - require: - file: /srv/herma-ftp - watch: - file: /srv/herma-ftp module.run: - name: file.set_selinux_context - path: {{ args['home']}} - type: public_content_t - unless: - stat -c %C {{ args['home'] }} |grep -q public_content_t {% endfor %}
When I make in the minion
salt-call -l debug state.sls herma-ftp-server saltenv=My-enviroment test=True
Don't expect this for because don't can get the pillar data.