Planetahost VPS
Перейти к основному контенту

Ansible #7: Ansible Galaxy и готовые роли

intro-Ansible-7-Ansible-Galaxy-and-Ready-Made-Roles-planetahost.png

Подробности урока
Уровень сложности Лёгкий
Права root Требуются
Требования Терминал Linux
Категория Настройка ПО
Совместимость с ОС Debian, Ubuntu
Примерное время чтения  40 мин

Введение

В предыдущей статье мы использовали Ansible Galaxy для установки коллекции community.docker, необходимой для управления Docker-контейнерами. Galaxy позволяет находить и устанавливать готовые компоненты Ansible, которые можно использовать в собственных Playbook.

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

В этой статье рассмотрим:

  • что такое Ansible Galaxy;

  • чем отличаются роли и коллекции;

  • как искать готовые компоненты;

  • как устанавливать роли и коллекции;

  • как использовать готовую роль в Playbook;

  • где хранятся установленные компоненты.

Что такое Ansible Galaxy

Ansible Galaxy - это каталог готового содержимого для Ansible.

В нём можно найти:

  • роли;

  • коллекции;

  • готовые компоненты для настройки различных программ и систем.

Например, с помощью Galaxy можно найти готовые решения для:

  • Nginx;

  • Docker;

  • MariaDB;

  • PostgreSQL;

  • Zabbix;

  • Apache;

  • Redis;

  • различных операционных систем.

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

Роли и коллекции

Роль - это готовый набор задач, переменных, шаблонов, обработчиков и других файлов для выполнения определённой задачи. Например, роль может полностью устанавливать и настраивать Nginx.

Коллекция - более крупный набор содержимого Ansible. Она может включать:

  • модули;

  • роли;

  • плагины;

  • документацию.

Поэтому роль и коллекция - не одно и то же.

Например, в предыдущей статье мы использовали коллекцию:

community.docker

А внутри коллекции могут находиться различные модули и роли для работы с Docker.

Установка коллекции

Для установки коллекций используется команда:

ansible-galaxy collection install community.docker

После выполнения Ansible скачает коллекцию и установит её на управляющий сервер.

Проверить установленные коллекции:

ansible-galaxy collection list

В списке должна появиться:

community.docker

изображение.png

После этого можно использовать модули коллекции:

community.docker.docker_container:

Поиск ролей

Для поиска готовых ролей используется:

ansible-galaxy search nginx

Например:

ansible-galaxy search docker

Команда покажет найденные роли. Также роли и коллекции можно искать через веб-интерфейс Ansible Galaxy.

Установка роли

Для установки роли используется:

ansible-galaxy role install имя_роли

Например:

ansible-galaxy role install geerlingguy.nginx

изображение.png

После установки роль можно использовать в Playbook.

Использование готовой роли

Создадим Playbook:

---
- name: Установка Nginx
  hosts: web

  roles:
    - geerlingguy.nginx

Ansible выполнит задачи, которые находятся внутри роли. Настройки роли обычно передаются через переменные.

Например:

---
- name: Установка Nginx
  hosts: web

  vars:
    nginx_remove_default_vhost: true

  roles:
    - geerlingguy.nginx

Конкретный набор переменных зависит от используемой роли.

Перед использованием готовой роли обязательно стоит ознакомиться с её документацией.

Где устанавливаются роли

По умолчанию роли устанавливаются в каталог Ansible Galaxy.

Посмотреть текущие пути можно командой:

ansible-config dump | grep DEFAULT_ROLES_PATH

изображение.png

Также можно указать собственный каталог для ролей.

Например:

/opt/ansible/roles/

Структура проекта может выглядеть так:

/opt/ansible/
├── inventory
├── group_vars/
├── host_vars/
├── roles/
│   └── nginx/
└── site.yml

Установка зависимостей

Если Playbook использует несколько ролей и коллекций, удобно описать их зависимости в отдельном файле.

Для ролей используется:

requirements.yml

Например:

---
roles:
  - name: geerlingguy.nginx

Теперь все роли из файла можно установить одной командой:

ansible-galaxy role install -r requirements.yml

Для коллекций:

---
collections:
  - name: community.docker

Установка:

ansible-galaxy collection install -r requirements.yml

В одном requirements.yml можно описать и роли, и коллекции:

---
roles:
  - name: geerlingguy.nginx

collections:
  - name: community.docker

После этого:

ansible-galaxy install -r requirements.yml

Ansible установит все необходимые зависимости.

Почему это удобно

Использование Galaxy особенно полезно при работе с несколькими проектами. Вместо ручной установки каждой зависимости достаточно хранить список в requirements.yml.

Например:

requirements.yml

может описывать всё необходимое для проекта:

---
roles:
  - name: geerlingguy.nginx

collections:
  - name: community.docker

После переноса проекта на новый сервер достаточно выполнить:

ansible-galaxy install -r requirements.yml

и необходимые компоненты будут установлены.

На что обратить внимание

Готовая роль не означает, что её можно устанавливать и запускать без проверки. Перед использованием стоит посмотреть:

  • автора роли;

  • количество загрузок;

  • дату последнего обновления;

  • поддерживаемые версии ОС;

  • документацию;

  • список переменных;

  • зависимости;

  • исходный код.

Особенно важно понимать, какие изменения роль вносит в систему. После установки роль можно посмотреть в каталоге:

ansible-galaxy role list

А содержимое самой роли - непосредственно в её каталоге.

Ansible на практике
Соберите собственную лабораторию
Несколько небольших VDS позволяют собрать полноценный стенд для экспериментов с Ansible, готовыми ролями, Docker, мониторингом и другими инструментами.
Посмотреть VDS KVM →

Практический пример: установка Nginx с помощью готовой роли

До этого мы устанавливали Nginx, создавали конфигурацию и управляли службой самостоятельно. Теперь сделаем то же самое с помощью готовой роли из Ansible Galaxy.

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

Установка роли

Установим роль geerlingguy.nginx:

ansible-galaxy role install geerlingguy.nginx

Проверим, что роль установлена:

ansible-galaxy role list

В списке должна появиться:

изображение.png

Inventory

Для примера добавим сервер в группу web:

[web]
web1 ansible_host=192.168.88.40

Playbook

Создадим файл:

nginx-role.yml

Добавим:

---
- name: Установка Nginx с помощью готовой роли
  hosts: web

  roles:
    - geerlingguy.nginx

изображение.png

Запустим Playbook:

ansible-playbook -i inventory nginx-role.yml

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

После завершения можно проверить веб-сервер:

ansible -i inventory web -m command -a "systemctl is-active nginx"

Ожидаемый результат:

изображение.png

Передача настроек роли

Готовые роли обычно позволяют изменить своё поведение с помощью переменных.

Например, у роли geerlingguy.nginx можно отключить стандартный виртуальный хост:

---
- name: Установка Nginx с помощью готовой роли
  hosts: web

  vars:
    nginx_remove_default_vhost: true

  roles:
    - geerlingguy.nginx

Таким образом, саму роль изменять не нужно. Мы передаём ей необходимые параметры из своего Playbook.

Сравнение с ручной настройкой

В предыдущих статьях мы самостоятельно создавали задачи:

- name: Установка Nginx
  ansible.builtin.apt:
    name: nginx
    state: present

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

Наш Playbook при этом остаётся небольшим:

---
- name: Установка Nginx с помощью готовой роли
  hosts: web

  roles:
    - geerlingguy.nginx

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

Заключение

Ansible Galaxy позволяет использовать готовые роли и коллекции вместо написания всех компонентов Playbook с нуля. Роли удобно применять для типовых задач, а коллекции позволяют устанавливать дополнительные модули и другие компоненты Ansible.

Для небольших задач можно написать необходимые задачи самостоятельно. Когда проект становится сложнее, готовые роли и коллекции помогают сократить количество собственного кода и упростить поддержку.

В следующей статье вернёмся к написанию собственных Playbook и разберём условия, циклы и обработку ошибок.

Полезные ссылки