我的角色设置如下
角色/测试/任务/main.yml
- name: Generate people files
template: src=test.j2 dest=/tmp/{{ item.name}}.cfg
loop: "{{people}}"
角色/测试/模板/测试.j2
First Var: {{ item.var1 }}
Second Var: {{ item.var2 }}
角色/测试/vars/main.yml
---
people:
- name: TheSimpsons
var1: homer
var2: simpson
- name: StarWars
var1: han
var2: solo
角色/测试/默认/main.yml
people:
- var2: skywalker
我的剧本
- hosts: localhost
roles:
- test
当我运行剧本时,一切都按预期进行。我在 /tmp 中获得了两个包含正确文本的新文件。但是,如果我从 vars/main.yml 文件中删除此 var2 行...
var2: solo
我希望 defaults/main.yml 中的 var2 值显示在输出中,但我得到的只是这个错误
failed: [localhost] (item={u'var1': u'han', u'name': u'StarWars'}) => {
"changed": false,
"item": {
"name": "StarWars",
"var1": "han"
},
"msg": "AnsibleUndefinedVariable: 'dict object' has no attribute 'var2'"
}
我尝试了大约 10 种不同的方式来格式化我的 defaults/main.yml,但每次都会出现相同的错误。
如果我设置一个不循环的测试,并且 defaults/main.yml 和 vars/main.yml 是平面的“键:值”对,我可以让它从 defaults/main/yml 中提取值。
我对循环有些不明白。我做错了什么?