Роли
Роли используются для конфигурации конкретных приложений. По умолчанию директория /etc/ansible/roles
Настраивается в cfg файле:
[defaults]
roles_path = ./roles
Также в переменной ANSIBLE_ROLES_PATH
Структура роли и добавление в playbook
- Создается папка roles, внутри папки с названиями ролей, внутри каждой папки - defaults files handlers meta templates tasks vars
- в playbook добавляется
roles: - имя
Назначения папок
| Папка | Назначение |
| defaults | Устанавливает переменные по умолчанию для включенных ролей. Обычно defaults/main.yml
|
| files | содержит статические файлы и файлы сценариев, которые могут быть скопированы на удалённый сервер или выполнены на нём. |
| handlers | Обработчики, выполняемые в самом конце |
| meta | для метаданных роли, которые используются для управления зависимостями. Например, вы можете определить список ролей, которые должны быть применены до вызова текущей роли. |
| templates | Шаблоны генерации файлов на удалённых хостах. Шаблоны jinja2.
|
| tasks |
Содержит файлы с задачами, которые определяются в разделе tasks обычного плейбука Ansible. Сначала просматривается файл tasks/main.yml В нем указывается условия импорта других файлов
Пути указываются относительно директории tasks Эти задачи могут напрямую ссылаться на файлы и шаблоны, содержащиеся в соответствующих каталогах внутри роли, без необходимости указывать полный путь к файлу. |
| vars | переменные для роли могут быть указаны в файлах внутри каталога, а затем ссылаться на них в другом месте роли. |
Ссылки:
Пример преобразования одного файла в роль
Хранилище ролей
Есть сайт с ролями почти для всего. Сайт с ролями ansible Можно найти нужную роль на сайте, затем установить при помощи
ansible-galaxy install current_role_name -p .
Создание роли:
ansible-galaxy init new_role_name
Пример создания новой роли
Пусть будет задача в установке docker. Реализуем из инструкции по Docker: общая информация и установка
Инициализируем новую роль
ansible-galaxy init just_new_role
Структура директорий создана. Проанализируем инструкцию.
- Написана для 3 вариаций ОС: Debian, Ubuntu, Alt.
- Последовательность установки:
- Создание пользователя
- Добавление сертификатов
- Непосредственно установка пакетов
- Дополнительные удобства
В константы будем постепенно добавлять нужные. Итоговый defaults/main.yml :
---
# defaults file for just_new_role
docker_user: webadmin
packages_certificates:
- ca-certificates
- curl
- gnupg
- lsb-release
packages_docker_debian:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-compose-plugin
packages_docker_alt:
- docker-engine
- docker-compose-v2
Начнем с установки sudo и добавления пользователя в группы, то есть реализуем блокследующие задачкоманды:
apt-get install sudo
sudo apt-get update
usermod -aG sudo docker_user
Файл задач tasks/01_create_user.yml :
- name: Install sudo
ansible.builtin.apt:
name: sudo
state: present
update_cache: true
- name: Ensure user exists and is in sudo group
ansible.builtin.user:
name: "{{ docker_user }}"
groups: sudo
append: true
state: present
Да, если сопоставить количество строк команд и того, что необходимо написать для их исполнения, возникает ощущение перебора (в 3 раза). Но это плата за индепотентность.
Добавим в файл tasks/main.yml задачу старта 01_create_user.yml
---
# tasks file for just_new_role
- include_tasks: 01_create_user.yml