for循环中的Saltstack负载支柱 [英] Saltstack load pillar in a for loop

查看:264
本文介绍了for循环中的Saltstack负载支柱的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发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.managedcontents参数不支持模板.您需要做的是将/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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆