Files
DevOpsLab/docs/roles.md
Sergey Antropoff b1f681fb30 feat: Добавлена поддержка универсальных ролей для RHEL и Debian
- Роли теперь создаются универсальными для 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
2025-10-22 14:57:11 +03:00

11 KiB
Raw Blame History

Управление ролями Ansible

Полное руководство по созданию, управлению и использованию ролей в универсальной лаборатории.

Создание роли

Интерактивное создание

make role create NAME=my-role

Что происходит:

  1. Запрашивается описание роли - краткое описание функциональности
  2. Настраивается основной пакет - имя пакета для установки
  3. Настраивается сервис - имя сервиса для управления
  4. Выбираются платформы - поддерживаемые ОС (ubuntu, centos, rhel)
  5. Указываются теги - теги для Ansible Galaxy
  6. Создается универсальная структура роли с поддержкой RHEL и Debian семейств
  7. Создается папка 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 семейств:

  1. tasks/main.yml - содержит общую логику и включает OS-специфичные задачи
  2. tasks/debian.yml - задачи для Debian/Ubuntu (apt, systemd)
  3. 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 создаются универсальными с поддержкой:

  1. gather_facts: true - сбор информации об ОС
  2. pre_tasks - отображение информации об ОС
  3. post_tasks - проверка успешного развертывания
  4. Переменные роли - автоматически добавляются в 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:

  1. Роль автоматически добавляется в deploy/tasks/main.yml
  2. Создается переменная {role_name}_enabled: true
  3. Обновляется 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