Ansible 模板模块不解析 with_items 变量
Ansible template module not parsing with_items variable
我使用的是一个简单的模板,其中只有变量。
这是我的任务在我的剧本中的样子(实际上是我的剧本中使用的角色):
- name: Ensure the conf file exists
template:
src: file.conf.j2
dest: '/opt/file.conf'
with_items: '{{ myrole }}'
我将变量保存在 group_vars 中。 file.conf.j2
中的任何变量都将正确扩展,如 {{ myrole_user }}
,但在扩展 with_items 变量之一时失败,如 {{ myrole.applicationName }}
.
我的 group_vars 看起来像这样:
myrole_user: regularuser
myrole:
- { applicationName: foo, othervar: bar }
这是 Ansible 错误:
"msg": "AnsibleUndefinedVariable: 'list object' has no attribute 'applicationName'"
您定义了一个名为 myrole
的列表,然后尝试访问键 myrole.applicationName
的值,因此您收到一条错误消息,指出该列表不包含 key/attribute (这是真的——一个列表只包含一组有序的元素)。
Ansible with_
默认循环* 设置一个名为 item
的变量包含当前迭代中元素的值,所以在模板中你应该引用 item
(而不是保持不变的 myrole
变量):
{{ item.applicationName }}
* 您可以使用 loop control 部分中的 loop_var
设置更改它。
我使用的是一个简单的模板,其中只有变量。 这是我的任务在我的剧本中的样子(实际上是我的剧本中使用的角色):
- name: Ensure the conf file exists
template:
src: file.conf.j2
dest: '/opt/file.conf'
with_items: '{{ myrole }}'
我将变量保存在 group_vars 中。 file.conf.j2
中的任何变量都将正确扩展,如 {{ myrole_user }}
,但在扩展 with_items 变量之一时失败,如 {{ myrole.applicationName }}
.
我的 group_vars 看起来像这样:
myrole_user: regularuser
myrole:
- { applicationName: foo, othervar: bar }
这是 Ansible 错误:
"msg": "AnsibleUndefinedVariable: 'list object' has no attribute 'applicationName'"
您定义了一个名为 myrole
的列表,然后尝试访问键 myrole.applicationName
的值,因此您收到一条错误消息,指出该列表不包含 key/attribute (这是真的——一个列表只包含一组有序的元素)。
Ansible with_
默认循环* 设置一个名为 item
的变量包含当前迭代中元素的值,所以在模板中你应该引用 item
(而不是保持不变的 myrole
变量):
{{ item.applicationName }}
* 您可以使用 loop control 部分中的 loop_var
设置更改它。