我的角色设置如下
角色/测试/任务/main.yml
- name: Generate people files
template: src=test.j2 dest=/tmp/{{ item.name }}.cfg
loop: "{{people}}"
角色/测试/模板/test.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 中提取值就好了。
关于循环的一些事情我只是不明白。我究竟做错了什么?