У меня есть настройка роли следующим образом
роли/тест/задача/main.yml
- имя: Генерировать файлы людей
шаблон: src=test.j2 dest=/tmp/{{ item.name}}.cfg
цикл: "{{люди}}"
роли/тест/шаблон/test.j2
Первая переменная: {{ item.var1 }}
Вторая переменная: {{ item.var2 }}
роли/тест/vars/main.yml
---
люди:
- название: Симпсоны
вар1: Гомер
var2: Симпсон
- название: Звездные войны
var1: хан
вар2: соло
роли/тест/по умолчанию/main.yml
люди:
- var2: скайуокер
моя пьеса
- хосты: локальный
роли:
- тестовое задание
Когда я запускаю свою пьесу, все работает так, как ожидалось. Я получаю два новых файла в /tmp с правильным текстом. Однако, если я удалю эту строку var2 из моего файла vars/main.yml...
вар2: соло
Я бы ожидал, что значение var2 из моих defaults/main.yml появится в выводе, но все, что я получаю, это эта ошибка
failed: [localhost] (item={u'var1': u'han', u'name': u'StarWars'}) => {
«изменено»: ложь,
"предмет": {
"имя": "Звездные войны",
"var1": "хан"
},
"msg": "AnsibleUndefinedVariable: 'объект dict' не имеет атрибута 'var2'"
}
Я пробовал форматировать файл defaults/main.yml примерно 10 разными способами, но каждый раз получаю одну и ту же ошибку.
Если я настрою тест, который не зацикливается, а defaults/main.yml и vars/main.yml представляют собой плоские пары «ключ: значение», я могу заставить его очень хорошо извлекать значения из defaults/main/yml.
Что-то про зацикливание я просто не понимаю. Что я делаю не так?