Шаблоны (Jinja2)
Ansible использует шаблоны Jinja2 для динамических выражений и доступа к переменным и фактам. Вы можете использовать шаблоны с модулем template. Например, вы можете создать шаблон файла конфигурации, затем развернуть этот файл конфигурации в нескольких средах и предоставить правильные данные (IP-адрес, имя хоста, версия) для каждой среды. Вы также можете использовать шаблоны непосредственно в playbooks, шаблонизируя имена задач и многое другое. Вы можете использовать все стандартные фильтры и тесты, включенные в Jinja2. Ansible включает дополнительные специализированные фильтры для выбора и преобразования данных, тесты для оценки выражений шаблонов и плагины Lookup для получения данных из внешних источников, таких как файлы, API и базы данных, для использования в шаблонах.
Все шаблонизирование происходит на управляющем узле Ansible перед отправкой и выполнением задачи на целевом компьютере. Этот подход минимизирует требования к пакетам на целевом узле (jinja2 требуется только на управляющем узле). Он также ограничивает количество данных, передаваемых Ansible на целевой компьютер. Ansible парсит шаблоны на управляющем узле и передает только информацию, необходимую для каждой задачи, на целевой компьютер, вместо того, чтобы передавать все данные на управляющем узле и парсить их на целевом.
Примечание
Файлы и данные, используемые модулем template, должны быть закодированы в utf-8.
Пример Jinja2
В этом примере мы хотим записать имя хоста сервера в его /tmp/hostname.
Наша директория выглядит так:
├── hostname.yml
├── templates
└── test.j2
Наш файл hostname.yml:
---
- name: Write hostname
hosts: all
tasks:
- name: write hostname using jinja2
ansible.builtin.template:
src: templates/test.j2
dest: /tmp/hostname
Наш файл test.j2:
My name is {{ ansible_facts['hostname'] }}
См. также
- Ansible playbooks
-
Введение в playbooks
- Рекомендации по playbooks
-
Рекомендации и советы для playbooks
- Jinja2 Docs
-
Документация Jinja2, включает синтаксис и семантику шаблонов
- Общение
-
У вас есть вопросы? Нужна помощь? Хотите поделиться идеями? Посетите руководство по общению Ansible
© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/user_guide/playbooks_templating.html