在 ansible 角色中引用 defaults/main.yml 中的变量

在 ansible 角色中引用 defaults/main.yml 中的变量

我的角色设置如下

角色/测试/任务/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 中提取值。

我对循环有些不明白。我做错了什么?

相关内容