01. Приоритет переменных
В Ansible переменные могут определяться в разных местах: в инвентаре, в файлах `group_vars`/`host_vars`, в подключаемых файлах (`vars_files`), прямо в плейбуке (секция `vars`), в ролях, через `--extra
В Ansible переменные могут определяться в разных местах: в инвентаре, в файлах group_vars/host_vars, в подключаемых файлах (vars_files), прямо в плейбуке (секция vars), в ролях, через --extra-vars и т.д.
Да, переменные из vars_files подставляются – они загружаются и становятся доступны для всех задач плейбука после того, как файл указан. Но важно понимать приоритет (порядок переопределения) переменных.
Приоритет переменных (от низшего к высшему)
- Инвентарь (переменные для групп и хостов)
- Facts (собранные факты о системе)
vars_files(подключенные файлы переменных)- Секция
varsв плейбуке include_vars(динамически подгруженные переменные)- Переменные ролей (определённые в
defaults/main.yml– самые низкие, вvars/main.yml– выше) - Блоки и задачи (переменные, определённые внутри задачи)
--extra-varsиз командной строки (самый высокий приоритет)
Пример взаимодействия vars_files и vars
Допустим, у вас есть файл secrets.yml:
db_user: admin
db_password: pass123
И плейбук site.yml:
- hosts: all
vars_files:
- secrets.yml
vars:
db_user: root # переопределит значение из secrets.yml
tasks:
- debug:
var: db_user # выведет "root"
- debug:
var: db_password # выведет "pass123" (не переопределено)
Переменная db_user из секции vars имеет более высокий приоритет, чем та же переменная из vars_files, поэтому итоговое значение – root. А db_password не переопределена, поэтому берётся из vars_files.
Важные нюансы
- Порядок подключения
vars_filesвлияет на переопределение между ними: если файлы указаны списком, переменные из последующих файлов перепишут предыдущие (при одинаковых именах). - Секция
varsобрабатывается послеvars_files, поэтому она переопределяет значения из файлов. - Переменные из командной строки (
--extra-vars) имеют наивысший приоритет и переопределят всё, включаяvars.
Рекомендации
- Для чувствительных данных используйте
vars_filesс зашифрованными vault-файлами. - Для переопределения значений под конкретный запуск плейбука используйте
--extra-varsили секциюvars. - Для постоянных переопределений на уровне окружений удобно применять
group_varsиhost_vars(они имеют более низкий приоритет, чемvars_files, если явно не подключать их черезvars_files).
Таким образом, вы можете гибко управлять значениями переменных, комбинируя vars_files и другие источники, зная их приоритет.