Ansible
2026-02-26 22:26 Diff

Одна из ключевых возможностей, которую предоставляет Ansible, это переменные. Они позволяют описывать конфигурационные параметры в одном месте и переиспользовать их многократно, что очень удобно.

В данном примере есть две задачи, где в путях для dest используется одна и та же директория /var/tmp/www/. Мы можем избежать дублирования и описать ключ vars, внутри которого перечислить названия переменных и их значения:

Ansible использует популярный питоновский шаблонизатор Jinja 2. Подстановка переменных в нем работает следующим образом. Перед тем, как разбирать YAML-файл, он прогоняет его через шаблонизатор, который заменяет конструкции {{название переменной}} значениями этих переменных. Для переменной необходимо использовать кавычки, чтобы YAML распознавался корректно. Использование переменной без кавычек приведет к ошибке ERROR! Syntax Error while loading YAML.:

Теперь разберем отличия между template и copy. Одна задача копирует nginx.conf, а вторая index.html. Но в случае с nginx.conf это не простое копирование. Это именно темплэйтинг. Он позволяет прогонять через Jinja 2 пользовательские файлы (не плэйбуки) и выполнять в них подстановки. Это значит, что переменные можно использовать не только в самом плэйбуке. Так удобно работать с конфигурационными файлами (но не только). Например, переменная root_dir в файле nginx.conf.j2:

будет заменена значением из секции vars из плейбука:

Результат работы такого плейбука не изменится, но внутри произойдет подстановка нужного значения.

Из полезного: если мы случайно ошибемся в названии переменной, то Ansible нам подскажет, что была использована неопределенная переменная.