- Роли теперь создаются универсальными для 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