#ansible
#ansible
Вопрос:
У меня есть следующая структура..
playbook/main.yml:
- role: my-role
vars:
src_path: "{{ src_path_from_inventory }}"
my-role/defaults/main.yml:
src_path: /opt/src
Итак, мне интересно, есть ли какой-либо способ использовать мою роль по умолчанию, если мой «src_path_from_inventory» не определен в моем инвентаре.
Похоже, что значение роли по умолчанию принимается, только если я вообще не указываю «src_path» в разделе vars моего playbook.
Я пробовал использовать default (опустить), но оно не принимает значение роли по умолчанию. Рассматривает мою переменную только как пустую, а не как неопределенную.
Я пробовал с помощью default («), но она также не принимает значение роли по умолчанию.
РЕДАКТИРОВАТЬ (более точно) :
Я хочу сделать что-то подобное, потому что мы развертываем большую систему (обратный прокси, несколько интерфейсных приложений и множество внутренних служб), и у нас также много клиентов. Чтобы сохранить инвентарь легким и чистым, мы не хотим указывать что-либо в нем, если мы можем этого избежать. В основном этими двумя способами :
- Использование одного и того же значения в инвентаре для ввода многих переменных роли вместо наличия нескольких переменных в инвентаре.
- Используя (или пытаясь использовать) роль по умолчанию, если в 90% случаев мы можем использовать значение по умолчанию вместо определения переменной в инвентаре.
Если я углублюсь в свой пример :
Обратный прокси
- rp_order_app_src_path: «{{ order_app_src_path_from_inventory }}»
Заказать приложение
- order_app_src_path: «{{ order_app_src_path_from_inventory }}»
Я хочу избежать определения rp_order_app_src_path и order_app_src_path в моем инвентаре. Я даже не хочу определять order_app_src_path_from_inventory в 90% случаев.
Я, конечно, могу использовать ключевое слово default () в моем playbook, но тогда я потеряю значение по умолчанию для моей самой общей роли (например, аутентификации), которая может использоваться другим playbook в компании. И это заставит нас жестко кодировать значение по умолчанию в каждом playbook. Мне кажется, что роль по умолчанию была создана для этого.
Комментарии:
1. Почему в таком случае вы объявляете раздел vars в своем вызове роли? Просто определите
src_path
непосредственно в своем инвентаре, и он возьмет на себя инициативу. Не определяйте это, и будут использоваться роли по умолчанию.2. Это потому, что вы действительно перегружаете переменную. В main
src_path_from_main: "{{ src_path_from_inventory }}"
и в rolesrc_path: "{{ src_path_from_main | default('/opt/src') }}"
это самое близкое к тому, что вы пытаетесь сделать, но все еще кажется излишним по сравнению с простым решением, предложенным @Zeitounator3. Я отредактировал свой пост, чтобы добавить больше уточнений.