盐栈:在模板中使用状态 jinja 变量

Her*_*erg 9 template saltstack

我想做的是为每个 openvpn 用户生成多个配置文件。我在支柱中有 IP 地址和其他配置。

例如:

openvpn:
  - user1:
    ip: 1.2.3.4
    config:
      - line1
      - line2
Run Code Online (Sandbox Code Playgroud)

在 SLS 中,我想做一些类似的事情:

{% for vpnuser in salt['pillar.get']('openvpn') %}
/etc/openvpn/ccd/{{ vpnuser }}:
  file.managed:
    - template: jinja
    - source: salt://openvpn/ccdtemplate
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

在 ccdtemplate 中,我想根据用户和存储在柱子中的该用户的配置数据生成配置。

但是因此我需要从状态中知道变量“vpnuser”的内容。

是否可以将变量从状态传递到 jinja 模板?

Chr*_*uet 10

您可以使用defaults关键字将您需要的任何值传递给模板。在您的情况下,这将是:

{% for vpnuser in salt['pillar.get']('openvpn') %}
/etc/openvpn/ccd/{{ vpnuser }}:
  file.managed:
    - template: jinja
    - source: salt://openvpn/ccdtemplate
    - defaults:
        vpnuser: {{ vpnuser }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

这记录在http://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html

  • 您可以像使用 `defaults` 一样使用 `context` 选项,这有点令人困惑。他们试图这样澄清:“一般的最佳实践是将默认值放在 `defaults` 中,条件覆盖进入 `context`。” (2认同)