templates - for 循环中的 Saltstack 负载支柱

标签 templates jinja2 salt-stack jaml

我正在开发一个带有 Salt 的自动 proftd 安装,我不会从模板中获取 ftp 用户,但我无法在支柱上工作,我用用户数据初始化了支柱并将其调用到 for 循环中,但你不这样做不在循环中获取支柱用户数据。

当我在minion中进行salt-callpillar.get ftpusers时,响应是:

本地:

这是我的支柱 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

不要指望这一点,因为无法获取支柱数据。

最佳答案

你的循环也应该是这样的:

{% for user, args in pillar.get('ftpusers', {}).items() %}

此外,file.managedcontents 参数不支持模板化。您需要做的是将 /srv/herma-ftp/.ftpusers 状态移到循环之外,并在文件模板内创建循环。状态的最终布局应如下所示:

/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 %}

关于templates - for 循环中的 Saltstack 负载支柱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27169509/

相关文章:

c++ - 如何轻松地将 C++ 枚举映射到字符串

.so 文件中的 C++ 模板化函数

python - 如何使用 Jinja2 模板添加嵌套 groupby

python - 如何动态选择要在 flask 中使用的模板目录?

python - 在 Jinja2 中获取请求参数

C++:为什么编译器在不使用时实例化模板

amazon-ec2 - 是否可以在 cloud-config 中使用变量

python - 使用 Salt 的 LocalClient,如何获得相同的结果或在 test.ping 命令中指定 '-v' arg?

python - salt 栈 : Properties (computed values) for data from SLS files?

c++ - 传递本地创建的 lambda 用于回调,然后超出范围