0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Одна из ключевых возможностей, которую предоставляет Ansible, это переменные. Они позволяют описывать конфигурационные параметры в одном месте и переиспользовать их многократно, что очень удобно.</p>
1
<p>Одна из ключевых возможностей, которую предоставляет Ansible, это переменные. Они позволяют описывать конфигурационные параметры в одном месте и переиспользовать их многократно, что очень удобно.</p>
2
<p>В данном примере есть две задачи, где в путях для dest используется одна и та же директория<em>/var/tmp/www/</em>. Мы можем избежать дублирования и описать ключ vars, внутри которого перечислить названия переменных и их значения:</p>
2
<p>В данном примере есть две задачи, где в путях для dest используется одна и та же директория<em>/var/tmp/www/</em>. Мы можем избежать дублирования и описать ключ vars, внутри которого перечислить названия переменных и их значения:</p>
3
<p>Ansible использует популярный питоновский шаблонизатор<strong>Jinja 2</strong>. Подстановка переменных в нем работает следующим образом. Перед тем, как разбирать YAML-файл, он прогоняет его через шаблонизатор, который заменяет конструкции {{название переменной}} значениями этих переменных. Для переменной необходимо использовать кавычки, чтобы YAML распознавался корректно. Использование переменной без кавычек приведет к ошибке ERROR! Syntax Error while loading YAML.:</p>
3
<p>Ansible использует популярный питоновский шаблонизатор<strong>Jinja 2</strong>. Подстановка переменных в нем работает следующим образом. Перед тем, как разбирать YAML-файл, он прогоняет его через шаблонизатор, который заменяет конструкции {{название переменной}} значениями этих переменных. Для переменной необходимо использовать кавычки, чтобы YAML распознавался корректно. Использование переменной без кавычек приведет к ошибке ERROR! Syntax Error while loading YAML.:</p>
4
<p>Теперь разберем отличия между template и copy. Одна задача копирует<em>nginx.conf</em>, а вторая<em>index.html</em>. Но в случае с<em>nginx.conf</em>это не простое копирование. Это именно темплэйтинг. Он позволяет прогонять через<strong>Jinja 2</strong>пользовательские файлы (не плэйбуки) и выполнять в них подстановки. Это значит, что переменные можно использовать не только в самом плэйбуке. Так удобно работать с конфигурационными файлами (но не только). Например, переменная root_dir в файле<em>nginx.conf.j2</em>:</p>
4
<p>Теперь разберем отличия между template и copy. Одна задача копирует<em>nginx.conf</em>, а вторая<em>index.html</em>. Но в случае с<em>nginx.conf</em>это не простое копирование. Это именно темплэйтинг. Он позволяет прогонять через<strong>Jinja 2</strong>пользовательские файлы (не плэйбуки) и выполнять в них подстановки. Это значит, что переменные можно использовать не только в самом плэйбуке. Так удобно работать с конфигурационными файлами (но не только). Например, переменная root_dir в файле<em>nginx.conf.j2</em>:</p>
5
<p>будет заменена значением из секции vars из плейбука:</p>
5
<p>будет заменена значением из секции vars из плейбука:</p>
6
<p>Результат работы такого плейбука не изменится, но внутри произойдет подстановка нужного значения.</p>
6
<p>Результат работы такого плейбука не изменится, но внутри произойдет подстановка нужного значения.</p>
7
<p>Из полезного: если мы случайно ошибемся в названии переменной, то Ansible нам подскажет, что была использована неопределенная переменная.</p>
7
<p>Из полезного: если мы случайно ошибемся в названии переменной, то Ansible нам подскажет, что была использована неопределенная переменная.</p>