无法使用 Jinja 读取具有字典结构数组的 Pillar

Unable to read Pillar having array with dictionary structure using Jinja

我正在尝试读取状态 sls 文件中盐柱文件中的字典数组,但无法读取。

root@xxxxxxx:/srv/salt# salt-master --version
salt-master 3003.3

我有如下支柱文件:

支柱文件:

common:
  sysctl.net.core.netdev_max_backlog: 16384
  sysctl.net.core.optmem_max: 25165824
  sysctl.net.core.rmem_max: 33554432
  sysctl.net.core.somaxconn: 16384
deploy2:
  packages:
    - repo_name: xxxxxxxx
      tag: xxxxxx
      path: /tmp/sp_repo_1
    - repo_name: xxxxxx
      tag: sxxxxxx
      path: /tmp/sp_repo_2

我的状态文件如下:

{% for package in salt.pillar.get('deploy2:packages') %}

print my data:
  cmd.run:
    - name: "echo {{ package.repo_name }}"

{% endfor %}

错误:

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:
    Data failed to compile:
----------
    Rendering SLS 'base:test' failed: while constructing a mapping
  in "<unicode string>", line 3, column 1
found conflicting ID 'print my data'
  in "<unicode string>", line 9, column 1

在执行上下文中 运行 状态的 ID 应该是唯一的。

当您迭代具有两个元素的字典数组时,它会创建两个状态 ID 作为 print my data,这是不允许的。为避免这种情况,我们需要在 ID 本身中使用 dict 的某些元素,以便它是唯一的。

示例:

{% for package in salt.pillar.get('deploy2:packages') %}
print-my-{{ package.repo_name }}:
  cmd.run:
    - name: "echo {{ package.repo_name }}"
{% endfor %}

这将创建 2 个唯一 ID - print-my-xxxxxxxxprint-my-xxxxxx。您可以使用 package.tag 或任何具有唯一值的此类键。