Комментарии 2
Основная проблема с переменными в ansible — что их можно много где описывать — и потом огрести проблемы с поддержкой. Поэтому необходимо с момента начала реальной эксплуатации вырабатывать некие правила работы с переменными.
Поделюсь своими наработками:
Максимум переменных выносим в роли, из них большинство должно находится в role/defaults/main.yml, то-есть быть переменными по-умолчанию.
Если у вас много переменных, завязанных на конкретный проект|сервис, а роль используется для многих проектов|сервисов, то пока лучшее решение, что я нашел — это напротив хоста или в группе хостов ставить переменную project=bla, а внутри роли импортировать в переменных массив такого вида:
в плейбуке строить шаги следующим образом:
этот шаг будет использовать переменные var1, var2 и var3 из массива, где в переменной project стоит необходимое значение (в нашем случае — bla).
Поделюсь своими наработками:
Максимум переменных выносим в роли, из них большинство должно находится в role/defaults/main.yml, то-есть быть переменными по-умолчанию.
Если у вас много переменных, завязанных на конкретный проект|сервис, а роль используется для многих проектов|сервисов, то пока лучшее решение, что я нашел — это напротив хоста или в группе хостов ставить переменную project=bla, а внутри роли импортировать в переменных массив такого вида:
role_foo_vars:
- { project: 'bla', var1: '/var', var2: 'user', var3: 'group', var4: '42', var5: 'httpd' }
- { project: 'bar', var1: '/var', var2: 'user2', var3: 'group2', var4: '42', var5: 'apache2' }
в плейбуке строить шаги следующим образом:
file: path={{ item[0].var1 }} owner={{ item[0].var2 }} group={{ item[0].var3 }} state=directory
with_nested:
- role_foo_vars
- project
when: "item[0].project == item[1]"
этот шаг будет использовать переменные var1, var2 и var3 из массива, где в переменной project стоит необходимое значение (в нашем случае — bla).
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Автоматизируем и ускоряем процесс настройки облачных серверов с Ansible. Часть 3: Переменные и файл inventory