我使用的是一个只有变量的简单模板。 这就是我的任务在我的剧本中的样子(实际上是我的剧本中使用的角色):
- 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'没有属性'applicationName'”
答案 0 :(得分:4)
您定义了一个名为myrole
的列表,然后尝试访问键myrole.applicationName
的值,因此您会收到一条错误消息,指出该列表不包含键/属性(这是真的 - - 列表只包含一组有序的元素。)
默认情况下,Ansible with_
循环 * 设置一个名为item
的变量,其中包含当前迭代中元素的值,因此在模板中您应该引用{ {1}}(不是保留完整的item
变量):
myrole
* 您可以使用loop control部分中的{{ item.applicationName }}
设置进行更改。