- Роли теперь создаются универсальными для RHEL и Debian семейств - Автоматическое создание OS-специфичных задач (debian.yml, redhat.yml) - Универсальные playbooks с поддержкой разных ОС - Обновлена документация с примерами и лучшими практиками Новые возможности: - Автоматическое определение ОС через ansible_os_family - OS-специфичные задачи в отдельных файлах - Универсальные playbooks с pre_tasks и post_tasks - Поддержка apt для Debian/Ubuntu и yum для RHEL/CentOS Структура универсальной роли: - tasks/main.yml - общая логика и включение OS-специфичных задач - tasks/debian.yml - задачи для Debian/Ubuntu (apt, systemd) - tasks/redhat.yml - задачи для RHEL/CentOS (yum, systemd) - playbooks/ - универсальные playbooks с поддержкой разных ОС Универсальные playbooks: - gather_facts: true - сбор информации об ОС - pre_tasks - отображение информации об ОС - post_tasks - проверка успешного развертывания - Переменные роли автоматически добавляются Документация: - Добавлен раздел 'Универсальные роли' в docs/roles.md - Примеры задач для Debian и RHEL семейств - Лучшие практики для универсальных ролей - Рекомендации по тестированию на разных ОС Преимущества: - Автоматическое создание универсальных ролей - Поддержка RHEL и Debian семейств из коробки - Лучшие практики встроены в шаблоны - Подробная документация с примерами - Приучение к написанию универсальных ролей Автор: Сергей Антропов Сайт: https://devops.org.ru
11 KiB
11 KiB
Управление ролями Ansible
Полное руководство по созданию, управлению и использованию ролей в универсальной лаборатории.
Создание роли
Интерактивное создание
make role create NAME=my-role
Что происходит:
- Запрашивается описание роли - краткое описание функциональности
- Настраивается основной пакет - имя пакета для установки
- Настраивается сервис - имя сервиса для управления
- Выбираются платформы - поддерживаемые ОС (ubuntu, centos, rhel)
- Указываются теги - теги для Ansible Galaxy
- Создается универсальная структура роли с поддержкой RHEL и Debian семейств
- Создается папка
playbooks/для playbooks роли
Структура созданной роли
roles/my-role/
├── tasks/
│ ├── main.yml # Основные задачи (универсальные)
│ ├── debian.yml # Задачи для Debian/Ubuntu
│ └── redhat.yml # Задачи для RHEL/CentOS
├── handlers/
│ └── main.yml # Обработчики
├── templates/ # Шаблоны Jinja2
├── files/ # Статические файлы
├── vars/
│ └── main.yml # Переменные роли
├── defaults/
│ └── main.yml # Переменные по умолчанию
├── meta/
│ └── main.yml # Метаданные роли
├── tests/ # Тесты роли
└── playbooks/ # Playbooks роли
└── (создаются через make role playbook)
Универсальные роли
Принцип работы
Роли создаются универсальными для RHEL и Debian семейств:
tasks/main.yml- содержит общую логику и включает OS-специфичные задачиtasks/debian.yml- задачи для Debian/Ubuntu (apt, systemd)tasks/redhat.yml- задачи для RHEL/CentOS (yum, systemd)
Автоматическое определение ОС
# tasks/main.yml
- name: Include OS-specific tasks
include_tasks: "{{ ansible_os_family | lower }}.yml"
Поддерживаемые ОС:
- Debian семейство: Ubuntu, Debian, Linux Mint
- RHEL семейство: CentOS, RHEL, Rocky Linux, AlmaLinux
Примеры задач
Debian/Ubuntu (tasks/debian.yml)
---
# Задачи для Debian/Ubuntu семейства
- name: Update apt cache (Debian)
apt:
update_cache: true
cache_valid_time: 3600
when: ansible_os_family == 'Debian'
- name: Install nginx package (Debian)
apt:
name: "{{ nginx_package | default('nginx') }}"
state: present
when: ansible_os_family == 'Debian'
RHEL/CentOS (tasks/redhat.yml)
---
# Задачи для RHEL/CentOS семейства
- name: Update yum cache (RHEL)
yum:
update_cache: true
when: ansible_os_family == 'RedHat'
- name: Install nginx package (RHEL)
yum:
name: "{{ nginx_package | default('nginx') }}"
state: present
when: ansible_os_family == 'RedHat'
Управление playbooks роли
Создание playbook
make role playbook NAME=my-role
# Выберите: create
# Введите имя: deploy
Создается файл: roles/my-role/playbooks/deploy.yml
---
# Playbook: deploy для роли my-role
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: deploy
hosts: all
become: true
gather_facts: true
vars:
# Переменные для роли my-role
my_role_enabled: true
pre_tasks:
- name: Display OS information
debug:
msg: "OS Family: {{ ansible_os_family }}, OS: {{ ansible_distribution }} {{ ansible_distribution_version }}"
roles:
- role: my-role
post_tasks:
- name: Verify my-role installation
debug:
msg: "my-role successfully deployed on {{ inventory_hostname }}"
Универсальные playbooks
Playbooks создаются универсальными с поддержкой:
gather_facts: true- сбор информации об ОСpre_tasks- отображение информации об ОСpost_tasks- проверка успешного развертывания- Переменные роли - автоматически добавляются в
vars
Список playbooks
make role playbook NAME=my-role
# Выберите: list
Редактирование playbook
make role playbook NAME=my-role
# Выберите: edit
# Введите имя: deploy
Запуск playbook
make role playbook NAME=my-role
# Выберите: run
# Введите имя: deploy
Команды управления ролями
Основные команды
# Список ролей
make role list
# Создать роль (интерактивно)
make role create NAME=my-role
# Редактировать роль
make role edit NAME=my-role
# Тестировать роль
make role test NAME=my-role
# Проверить синтаксис
make role lint
# Развернуть роли
make role deploy
# Информация о роли
make role info NAME=my-role
# Управление playbooks
make role playbook NAME=my-role
Интерактивные возможности
При создании роли:
- Описание роли - автоматически добавляется в README.md
- Основной пакет - настраивается в defaults/main.yml
- Сервис - настраивается в defaults/main.yml
- Платформы - добавляются в meta/main.yml
- Теги - добавляются в meta/main.yml
При работе с playbooks:
- Создание - интерактивный ввод имени
- Редактирование - выбор из списка существующих
- Запуск - выбор playbook для выполнения
Примеры использования
Создание роли nginx
make role create NAME=nginx
# Описание: Nginx web server role
# Пакет: nginx
# Сервис: nginx
# Платформы: ubuntu,centos
# Теги: web,nginx,server
Создание playbook для nginx
make role playbook NAME=nginx
# Выберите: create
# Имя: install
Результат: roles/nginx/playbooks/install.yml
Запуск playbook
make role playbook NAME=nginx
# Выберите: run
# Имя: install
Структура файлов роли
tasks/main.yml
---
# Основные задачи роли nginx
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: nginx placeholder
debug:
msg: "Роль nginx готова для настройки"
- name: Install nginx package
package:
name: "{{ nginx_package | default('nginx') }}"
state: present
- name: Start nginx service
systemd:
name: "{{ nginx_service | default('nginx') }}"
state: started
enabled: true
when: nginx_service is defined
defaults/main.yml
---
# Переменные по умолчанию для роли nginx
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
nginx_enabled: true
nginx_package: nginx
nginx_service: nginx
meta/main.yml
---
galaxy_info:
author: Сергей Антропов
description: Nginx web server role
company: https://devops.org.ru
license: MIT
min_ansible_version: 2.9
platforms:
- name: Ubuntu
versions: [focal, jammy]
- name: CentOS
versions: [7, 8, 9]
- name: RHEL
versions: [7, 8, 9]
galaxy_tags: [web,nginx,server]
dependencies: []
Лучшие практики
1. Универсальные роли
- Всегда создавайте OS-специфичные задачи в
debian.ymlиredhat.yml - Используйте
ansible_os_familyдля определения ОС - Тестируйте на разных платформах (Ubuntu, CentOS, RHEL)
- Используйте универсальные модули когда возможно (package, systemd)
2. Структура роли
tasks/main.yml- общая логика и включение OS-специфичных задачtasks/debian.yml- задачи для Debian/Ubuntu (apt, systemd)tasks/redhat.yml- задачи для RHEL/CentOS (yum, systemd)handlers- для перезапуска сервисовtemplates- для конфигурационных файловfiles- для статических файлов
3. Переменные
defaults/main.yml- значения по умолчаниюvars/main.yml- внутренние переменные роли- Используйте префиксы для переменных роли
- Создавайте OS-специфичные переменные при необходимости
4. Playbooks
gather_facts: true- всегда собирайте информацию об ОСpre_tasks- отображайте информацию об ОСpost_tasks- проверяйте успешное развертывание- Используйте переменные для настройки
5. Тестирование
make role test- проверка роли- Тестируйте на разных ОС - Ubuntu, CentOS, RHEL
- Создавайте тесты в папке tests/
- Проверяйте идемпотентность - повторный запуск не должен изменять систему
Интеграция с лабораторией
Автоматическое добавление в систему
При создании роли через make role create:
- Роль автоматически добавляется в
deploy/tasks/main.yml - Создается переменная
{role_name}_enabled: true - Обновляется
site.ymlс новой ролью
Использование в playbooks
---
- name: Deploy my-role
hosts: all
become: true
roles:
- role: my-role
vars:
my_role_enabled: true
my_role_package: custom-package
Автор
Сергей Антропов
Сайт: https://devops.org.ru