← Назад ко всем вопросам

Как вызывать Ansible Role в Playbook

1️⃣ Как кратко ответить

В Ansible Playbook роль вызывается с помощью ключевого слова roles в блоке задачи. Укажите имя роли в списке, чтобы применить её к указанным хостам. Пример:

- hosts: webservers
  roles:
    - common
    - webserver

2️⃣ Подробное объяснение темы

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

Зачем нужны роли

Роли помогают:

  • Упрощать управление конфигурацией за счет модульности.
  • Повышать читаемость и поддерживаемость кода.
  • Переиспользовать код в разных проектах и сценариях.

Структура роли

Роль в Ansible имеет определенную структуру каталогов:

roles/
  └── role_name/
      ├── tasks/
      │   └── main.yml
      ├── handlers/
      │   └── main.yml
      ├── files/
      ├── templates/
      ├── vars/
      │   └── main.yml
      ├── defaults/
      │   └── main.yml
      ├── meta/
      │   └── main.yml
      └── README.md
  • tasks/main.yml: Основные задачи роли.
  • handlers/main.yml: Обработчики событий, например, для перезапуска сервисов.
  • files/: Статические файлы, которые могут быть скопированы на удаленные хосты.
  • templates/: Jinja2 шаблоны для генерации конфигурационных файлов.
  • vars/main.yml: Переменные, специфичные для роли.
  • defaults/main.yml: Значения переменных по умолчанию.
  • meta/main.yml: Метаданные роли, такие как зависимости.

Как вызывать роль в Playbook

Чтобы использовать роль в Playbook, необходимо указать её в списке roles в блоке задачи. Пример Playbook, который вызывает роли:

- name: Configure web servers
  hosts: webservers
  roles:
    - common
    - webserver
  • name: Описание задачи.
  • hosts: Группа хостов, к которым будет применяться роль.
  • roles: Список ролей, которые будут применены к указанным хостам.

Пример использования

Предположим, у вас есть роль webserver, которая устанавливает и настраивает веб-сервер Nginx. Структура роли может выглядеть так:

roles/
  └── webserver/
      ├── tasks/
      │   └── main.yml
      ├── templates/
      │   └── nginx.conf.j2
      └── defaults/
          └── main.yml
  • tasks/main.yml может содержать задачи по установке Nginx:
---
- name: Install Nginx
  apt:
    name: nginx
    state: present
​
- name: Ensure Nginx is running
  service:
    name: nginx
    state: started
    enabled: true
  • templates/nginx.conf.j2 — шаблон конфигурационного файла Nginx.
  • defaults/main.yml может содержать переменные по умолчанию, например, порт, на котором будет работать Nginx.

В Playbook вы можете вызвать эту роль так:

- name: Setup web server
  hosts: webservers
  roles:
    - webserver

Этот Playbook применит роль webserver ко всем хостам в группе webservers, установив и настроив Nginx.

Тема: IaC / Конфигурация
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки