无法使用 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-xxxxxxxx
和 print-my-xxxxxx
。您可以使用 package.tag
或任何具有唯一值的此类键。
我正在尝试读取状态 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-xxxxxxxx
和 print-my-xxxxxx
。您可以使用 package.tag
或任何具有唯一值的此类键。