for循环中的Saltstack负载支柱 [英] Saltstack load pillar in a for loop
问题描述
我正在开发Salt的自动proftd安装,我不会从模板获取ftp用户,但是我无法使支柱工作,我将用户数据初始化为支柱,并将其调用为for循环,但是您不这样做不会在循环中获取主要用户数据.
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.
当我在小兵中打出salt.call支柱.get ftpusers时,响应为:
When i make salt-call pillar.get ftpusers in the minion, the response is:
本地:
这是我的支柱ftpusers.sls:
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
这是for循环:
{% 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 %}
当我进入小兵
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.
推荐答案
您的循环也应如下所示:
Your loop should also look like:
{% for user, args in pillar.get('ftpusers', {}).items() %}
此外,file.managed
的contents
参数不支持模板.您需要做的是将/srv/herma-ftp/.ftpusers
状态移到循环外,并使循环进入文件模板内.您的州的最终布局应如下所示:
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 %}
您的ftpserver/dot.ftpusers
如下所示:
{% for user, args in pillar.get('ftpusers', {}).items() %}
{{ user }}:{{ args['passhash'] }}:{{args['uuid'] }}:{{ args['guid'] }}::{{ args['home'] }}:{{ args['shel'] }}
{% endfor %}
这篇关于for循环中的Saltstack负载支柱的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!