6

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

- name: Ensure the conf file exists
  template:
    src: file.conf.j2
    dest: '/opt/file.conf'
  with_items: '{{ myrole }}'

我将变量保存在 group_vars 中。in 中的任何变量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'"

4

1 回答 1

8

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

默认情况下Ansiblewith_循环*设置一个名为的变量,该变量item包含当前迭代中元素的值,因此在模板中您应该引用item(而不是myrole保持不变的变量):

{{ item.applicationName }}

*您可以通过循环控制部分loop_var中的设置来更改它。

于 2017-03-29T04:20:18.287 回答