Как вызвать роли в плейбуке Ansible?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Роли в Ansible можно вызывать несколькими способами в рамках плейбука.
-
Использование ключевого слова
rolesна уровне плейбука:# playbooks/my_playbook.yml - name: Применение ролей к серверам hosts: webservers become: yes roles: - role: common # Вызов роли 'common' - role: nginx # Вызов роли 'nginx' vars: # Передача переменных в роль nginx_port: 8080 - another_role # Сокращенная форма вызоваЭтот способ применяется для вызова ролей, которые будут выполнены последовательно для всех хостов, определенных в секции
hosts. -
Использование модуля
include_roleв списке задач:# playbooks/my_playbook.yml - name: Применение ролей с условиями hosts: appservers tasks: - name: Включение роли базы данных (только для dev) include_role: name: database when: env == 'dev' # Вызов роли с условием - name: Включение роли приложения include_role: name: app vars: app_version: 1.2.0 # Передача переменных в рольМодуль
include_roleвыполняет роль как если бы это был список задач, включенный в текущий плей. Позволяет использовать условия (when) и циклы (loop) для контроля выполнения роли. -
Использование модуля
import_roleв списке задач:# playbooks/my_playbook.yml - name: Импорт роли приложения hosts: appservers tasks: - name: Импорт роли приложения для всех хостов import_role: name: app vars: app_config_file: /etc/app/config.conf # Передача переменныхМодуль
import_roleобрабатывается на этапе парсинга плейбука, до его фактического выполнения. Это означает, что все директивы, такие какwhen, будут применяться ко всем задачам внутри роли, а не только к самому вызову роли. Переменные, переданные черезvars, будут доступны внутри роли.
Ключевое различие между include_role и import_role заключается во времени обработки: import_role обрабатывается статически на этапе парсинга, а include_role — динамически во время выполнения плейбука. Это влияет на возможность использования условий и циклов:
| Функция | include_role |
import_role |
|---|---|---|
| Обработка | Динамическая | Статическая |
Использование when для вызова |
Да | Нет |
Использование loop для вызова |
Да | Нет |
| Возможность использования переменных, определенных ранее в плее | Да | Нет |
Выбор между способами зависит от требуемой гибкости и времени обработки. Для простого включения ролей обычно достаточно ключевого слова roles или import_role. Для более сложных сценариев с условиями и циклами используется include_role.