Как получить доступ к переменной ansible блока в файле из того же блока - PullRequest
0 голосов
/ 13 июня 2019

Я определяю файлы переменных yml для ansible со следующей структурой:

appserver:
   root_directory: C:\app
   config_directory: '{{ root_directory }}\config'

кажется, что вторая переменная config_directory не может быть правильно интерпретирована, я получаю VARIABLE NOT FOUND ERROR.

Я попробовал с:

appserver:
   root_directory: C:\app
   config_directory: '{{ appserver.root_directory }}\config'

Это тоже не работает, у меня очень длинный след ошибки, самая интересная часть:

recursive loop detected in template string:{{ appserver.root_directory }}\config

Когда я использую двойные кавычки вместопростых кавычек,

appserver: корневой_каталог: C: \ app config_directory: "{{appserver.root_directory}} \ config"

Я получаю следующую ошибку:

 The offending line appears to be:

 app_root: D:\WynsureEnvironments\Application
 wynsure_root: "{{ appserver.root_directory }}\config"
                                              ^ here
 We could be wrong, but this one looks like it might be an issue with
 missing quotes.  Always quote template expression brackets when they
 start a value. For instance:

with_items:
  - {{ foo }}

Должно быть записано как:

with_items:
  - "{{ foo }}"

Как использовать переменные блоки, как я могу использовать переменные для назначения новых переменных?

Спасибо!

1 Ответ

2 голосов
/ 13 июня 2019

Вы не можете использовать такое рекурсивное объявление переменной jinja2 в ansible.

Вот 2 альтернативных решения (не исчерпывающий список):

  1. Не используйте хэш.Предварительно добавьте свои имена.Обычно этот тип соглашений об именах встречается, например, в ролях многократного использования в ansible galaxy
appserver_root_directory: C:\app
appserver_config_directory: '{{ appserver_root_directory }}\config'
Если вам действительно нужен хеш такого типа, объявите «приватную» переменную вне вашего хэша и повторно используйте ее внутри.
_appserver_root: C:\app
appserver:
  root_directory: "{{ _appserver_root }}"
  config_directory: "{{ _appserver_root }}\config"
...