我正在开发使用 Salt 的自动 proftpd 安装。我想从模板中获取 ftp 用户,但我无法使用 pillar。我用用户数据初始化了 pillar,并将其调用到 for 循环中,但循环中却没有获取 pillar 用户数据。
当我在 minion 中进行 salt-call 时pillar.get ftpusers
,响应是:
local:
这是我的支柱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
不要指望这一点,因为无法获得支柱数据。
答案1
您应该注意到,pillars 的工作方式类似于字典。在当前语法中,要访问 pillar,键名称是“ftp-server.ftpusers”,而不是 ftpusers。如果您想要层次结构中的信息,通常的方法是:
ftp-server:
ftpusers:
user:
- user: user
- passhash: j2k3hk134123l1234ljh!"·$ser
- uuid: 1001
- guid: 1001
- home: /srv/ftp/user
- shel: /bin/false
然后在模板中:
{%- set ftp-server = pillar.get("ftp-server", {}) %}
{%- for users in ftp-server.get('ftpusers', {}).items() %}
{%- do_something() %}
{%- endfor %}