Ansible: ссылка Jinja в динамическом инвентаре
Так что я использую playbook на основе group_vars, которые используются для настройки IIS для самых разных веб-сайтов.
Групповые переменные состоят из 2 основных диктов (один из них содержит сложные списки диктов списков диктов.)
Сложный имеет ссылки на переменные из firstdict в Jinja2 (например, {{ firstdic.sitename }})
Это прекрасно работает с group_vars, ссылки разрешаются движком jinja2 в Ansible. Но когда дело доходит до динамического инвентаря, весь диктат не устанавливается, когда ссылается на переменные из первого диктанта.
Вот немного JSON (как из моего динамического инвентаря):
"firstdict": { "sitename": "mysitename" }
"complexdict": {"someotherdict": {"sitepath": "{{ firstdict.sitename }}"}}
При использовании этого JSON модуль отладки обнаружит, что complexdict не определен.
Тем не менее, часть jinja2 правильно анализируется и выполняется, как это будет работать.
Динамический учет инвентаря:
"complexdict": {"someotherdict": {"sitepath": "{{ \"foo\" }}"}}
Модуль отладки возвращается:
"complexdict": {
"someotherdict": {
"sitepath": "foo"
}
}
Есть ли проблема с переменным приоритетом? Что-нибудь еще, что я должен знать, почему это не могло работать так?
Спасибо за вашу помощь, мастера Ansible:)
PS: я уже пробовал эмпирически избегать, избегать фигурных скобок, двойных кавычек и так далее.
1 ответ
Работает для меня:
./inventory/test.sh:
#!/bin/bash
cat << EndOfJSON
{
"test" : {
"hosts" : [ "localhost" ],
"vars" : {
"firstdict": { "sitename": "mysitename" },
"complexdict": {"someotherdict": {"sitepath": "{{ firstdict.sitename }}"}}
}
}
}
EndOfJSON
./playbook.yml
---
- hosts: test
connection: local
gather_facts: no
tasks:
- debug:
var: complexdict
выход:
TASK [debug] *******************************************************************
ok: [localhost] => {
"complexdict": {
"someotherdict": {
"sitepath": "mysitename"
}
}
}
Если это не так, пожалуйста, обновите ваш вопрос с полной MCVE.