Ansible模板模块不解析with_items变量

时间:2017-03-29 04:15:48

标签: ansible jinja2 ansible-template

我使用的是一个只有变量的简单模板。 这就是我的任务在我的剧本中的样子(实际上是我的剧本中使用的角色):

- 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'”

1 个答案:

答案 0 :(得分:4)

您定义了一个名为myrole的列表,然后尝试访问键myrole.applicationName的值,因此您会收到一条错误消息,指出该列表不包含键/属性(这是真的 - - 列表只包含一组有序的元素。)

默认情况下,Ansible with_循环 * 设置一个名为item的变量,其中包含当前迭代中元素的值,因此在模板中您应该引用{ {1}}(不是保留完整的item变量):

myrole

* 您可以使用loop control部分中的{{ item.applicationName }} 设置进​​行更改。