Jinja 条件下的盐

Salt with Jinja condition

我正在尝试根据 IP 第一个数字执行加盐状态。

{% if grains['fqdn_ip4'].startswith('10') %}
task
{% endif %}

我得到:

failed: Jinja variable 'list object' has no attribute 'startswith'

我的语法似乎不错,如果我用 id 替换 grain 项 fqdn_ip4,就可以了:

{% if grains['id'].startswith('10') %}
task
{% endif %}

虽然格式似乎有所不同:

salt-call grains.get id

returns

local:
admin.local

salt-call grains.get fqdn_ip4

returns

local:
- 10.25.64.33

所以我在 fqdn_ip4 值前面有一个“-”。

提前致谢,

B.

根据错误和 grains.get 输出,我们可以看到 fqdn_ip4 颗粒是 list/array。在具有 1 个以上 IP 地址的机器上,此粒度将包含多个元素。

示例:

minion:
  - 127.0.0.1
  - 1.2.3.4
  - 5.6.7.8

所以如果你想用列表的第一个元素匹配条件,你必须使用grains['fqdn_ip4'][0]。如下所示:

{% if grains['fqdn_ip4'][0].startswith('10') %}
show-ip:
  module.run:
    - name: test.echo
    - text: grains['fqdn_ip4'][0]
{% endif %}