Перейти к содержанию

Roles

Официальная документация Ansible Roles

Для чего используются

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

2) Возможность тестировать отдельные куски инфраструктурного кода

3) Переиспользование разработок на всех проектах

В идеале написать роль один раз и все проекты будут использовать ее

Почему не писать роли в playbook?

  • быстро разрастается в размере/количестве

  • не версионируются


Как создавать роль

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

ansible-galaxy role init <name>
По результату выполнения команды будет создана основная директория и множество вложенных директорий с дефолтными файлами для заполнения.

Пример результата выполнения команды:

Результат команды ansible-galaxy role init
Результат команды ansible-galaxy role init

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

  • defaults - main.yml / переменные и значения по умолчанию
  • files / копирование файлов внутрь сервера (например сертификаты)
  • handlers - main.yml / обработчики
  • meta - main.yml / информация о роли и зависимостях
  • tasks - main.yml / основные задачи в роли
  • templates - mongodb.conf.j2 / шаблоны конфигурации
  • tests - inventory or - test.yml / сценарии и данные для тестирования
  • vars - main.yml / внутренние переменные роли

Важные особенности работы с ролями

У ролей есть множество способов передачи параметров.

отличие defaults и vars

defaults - настройки роли с дефолтными значениями, которые предполагается переопределять

vars - переменные роли с высоким приоритетом, которые переопределять сложно.

Какие бывают переменные в Ansible?

roles/nginx/defaults/main.yml / дефолт самой роли

group_vars/web.yml / настройка группы web

host_vars/server1.yml / настройки сервера

Приоритет переменных (мин - макс)

1) roles/nginx/defaults (минимальный)

2) group_vars/all.yml

3) group_vars/web.yml

4) host_vars/server1.yml

5) roles/nginx/vars/main.yml (максимальный)


Переменные

Для чего нужны?

  • нужны для переиспользования в различных частях описания сценариев и определения отличий

  • дополняют циклы и операторы с условиями, для определения отличий на основе переменных

  • могут использоваться почти везде, в пределах инфраструктурного репозитория

  • YAML поддерживает словари и списки, их можно использовать для переменных

Registered переменные

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

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

Факты

  • read-only системные переменные

  • посмотреть факты можно командой ansible localhost -m setup

Факты автоматически собираются при запуске playbook со всех хостов

Особые переменные

  • зарезервированные переменные самого Ansible: hostvars, group_vars, inventory_hostname, playbook_dir

  • host_vars и group_vars = особые переменные позволяющие получить доступ к значениям переменных другого хоста или группы хостов.