defaults и vars: порядок переопределения
Проектируйте понятные интерфейсы переменных ролей
«defaults и vars: порядок переопределения» — бесплатный урок Ansible Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ansible Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ansible Academy содержит 4 уроков всего.
Две папки для переменных
Роль может определять переменные в двух местах: defaults/main.yml и vars/main.yml. Они выглядят похоже, но работают совершенно по-разному.
defaults имеют низкий приоритет
Значения в defaults/main.yml имеют самый низкий приоритет. Это мягкие рекомендации, которые почти всё остальное может переопределить.
# defaults/main.yml
http_port: 80
workers: 4vars имеют высокий приоритет
Значения в vars/main.yml имеют высокий приоритет. Это жёсткие решения, на которых настаивает роль, и их трудно переопределить.
# vars/main.yml
config_path: /etc/myappdefaults — это Ваш открытый интерфейс
Помещайте в defaults всё, что пользователь может захотеть настроить. Это означает: «меня можно свободно изменять». Так создаются удобные и повторно используемые роли.
vars — это внутренние константы
Оставляйте vars для значений, необходимых роли для работы и не предназначенных для изменения пользователем, например внутреннего пути или фиксированного имени пакета.
Легко переопределяйте значение defaults
Пользователь может переопределить default из group_vars, host_vars, плейбука или командной строки. Самое простое переопределение применяется немедленно.
roles:
- role: web
vars:
http_port: 8080Значение vars трудно переопределить
Ролевые vars имеют приоритет над group_vars, host_vars и переменными плейбука. Выше них стоят только extra-vars из командной строки, поэтому используйте vars экономно.
Extra Vars всегда имеют приоритет
Переменные, переданные с помощью -e в командной строке, имеют приоритет над всеми другими источниками, включая переменные роли. Это окончательное переопределение.
ansible-playbook site.yml -e http_port=9090Порядок, который нужно запомнить
Запомните эту лестницу: defaults внизу, затем переменные инвентаря и плейбука, далее почти в самом верху переменные роли, а над всеми — extra-vars.
Совет по проектированию
Почти всегда отдавайте предпочтение defaults. Обращайтесь к vars только тогда, когда значение действительно должно оставаться неизменным. Гибкие роли радуют команды.
Документируйте defaults
Добавляйте комментарий к каждому значению в defaults/main.yml. Поскольку пользователи будут их настраивать, понятные пояснения превращают роль в самодокументируемую автоматизацию.
Быстрая проверка
Подумайте, в каком файле значение проще всего переопределить пользователю.
Итоги
Используйте defaults для настраиваемых значений, которые переопределяют пользователи, а vars — для неизменяемых внутренних констант. Extra-vars в CLI имеют приоритет над всем остальным. 🎚️
Часто задаваемые вопросы
Урок «defaults и vars: порядок переопределения» бесплатный?
Да — полный текст урока «defaults и vars: порядок переопределения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ansible Academy, подпишись на CoddyKit PRO. Курс Ansible Academy содержит 4 уроков всего.
Чему я научусь в уроке «defaults и vars: порядок переопределения»?
Проектируйте понятные интерфейсы переменных ролей Ты практикуешь Ansible Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ansible Academy?
Предыдущий опыт не требуется. Ansible Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «defaults и vars: порядок переопределения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ansible Academy?
Да. Каждый урок Ansible Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Зависимости ролей в meta/main.yml
- defaults и vars: порядок переопределения
- include_role и import_role во время выполнения
- allow_duplicates и идемпотентность ролей