@776166

Как передать через include_role в роль ansible переменную, которая сама является переменной?

Допустим, есть роль, которая в процессе работы должна создать БД. Внутри этой роли в vars/main.yml я определяю все необходимые названия для создания базы.
Например:
db_name: "{{ foo }}_{{ bar }}_dev"

И мне надо передать эти переменные в роль, которая обработает эти переменные и эту базу создаст.

- name: Create Database
  ansible.builtin.include_role:
    name: db
  vars:
    db_name: "{{ db_name }}"


И вот это всё не работает. Т.е. передать переменную можно, но только если определить её напрямую. А мне надо не напрямую. Мануалы и интернет как всегда ничего внятного ответить не могут.
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
@mureevms
У Ansible есть приоритет переменных. Переменная, которую вы пытаетесь вынести, по приоритету находятся ниже, чем roles/role_name/vars/main.yml. Скорее всего вы выносите эту переменную в host_vars или group_vars, что логично, но не достаточно, поскольку roles/role_name/vars/main.yml имеет больший приоитет. Для решения я бы рекомендовал использовать roles/role_name/defaults/main.yml файл, он имеет наименьший приоритет и переменная будет переопределена из любого другого места, если там объявлена.

Т.е. для вашего случая просто переименуйте каталог в роли с vars на defaults или же перенесите только эту переменную в defaults
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы