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.

Другие вопросы по тегам