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
This commit is contained in:
136
docs/roles.md
136
docs/roles.md
@@ -16,14 +16,17 @@ make role create NAME=my-role
|
||||
3. **Настраивается сервис** - имя сервиса для управления
|
||||
4. **Выбираются платформы** - поддерживаемые ОС (ubuntu, centos, rhel)
|
||||
5. **Указываются теги** - теги для Ansible Galaxy
|
||||
6. **Создается структура роли** с папкой `playbooks/`
|
||||
6. **Создается универсальная структура роли** с поддержкой RHEL и Debian семейств
|
||||
7. **Создается папка `playbooks/`** для playbooks роли
|
||||
|
||||
### Структура созданной роли
|
||||
|
||||
```
|
||||
roles/my-role/
|
||||
├── tasks/
|
||||
│ └── main.yml # Основные задачи
|
||||
│ ├── main.yml # Основные задачи (универсальные)
|
||||
│ ├── debian.yml # Задачи для Debian/Ubuntu
|
||||
│ └── redhat.yml # Задачи для RHEL/CentOS
|
||||
├── handlers/
|
||||
│ └── main.yml # Обработчики
|
||||
├── templates/ # Шаблоны Jinja2
|
||||
@@ -39,6 +42,65 @@ roles/my-role/
|
||||
└── (создаются через 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)
|
||||
|
||||
### Автоматическое определение ОС
|
||||
|
||||
```yaml
|
||||
# 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)
|
||||
```yaml
|
||||
---
|
||||
# Задачи для 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)
|
||||
```yaml
|
||||
---
|
||||
# Задачи для 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
|
||||
@@ -60,10 +122,34 @@ make role playbook NAME=my-role
|
||||
- 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
|
||||
|
||||
```bash
|
||||
@@ -225,27 +311,37 @@ dependencies: []
|
||||
|
||||
## Лучшие практики
|
||||
|
||||
### 1. Структура роли
|
||||
- Используйте **tasks/main.yml** для основных задач
|
||||
- Создавайте **отдельные файлы** для сложных задач
|
||||
- Используйте **handlers** для перезапуска сервисов
|
||||
- Храните **шаблоны** в templates/
|
||||
- Храните **статические файлы** в files/
|
||||
### 1. Универсальные роли
|
||||
- **Всегда создавайте OS-специфичные задачи** в `debian.yml` и `redhat.yml`
|
||||
- **Используйте `ansible_os_family`** для определения ОС
|
||||
- **Тестируйте на разных платформах** (Ubuntu, CentOS, RHEL)
|
||||
- **Используйте универсальные модули** когда возможно (package, systemd)
|
||||
|
||||
### 2. Переменные
|
||||
- **defaults/main.yml** - значения по умолчанию
|
||||
- **vars/main.yml** - внутренние переменные роли
|
||||
- Используйте **префиксы** для переменных роли
|
||||
### 2. Структура роли
|
||||
- **`tasks/main.yml`** - общая логика и включение OS-специфичных задач
|
||||
- **`tasks/debian.yml`** - задачи для Debian/Ubuntu (apt, systemd)
|
||||
- **`tasks/redhat.yml`** - задачи для RHEL/CentOS (yum, systemd)
|
||||
- **`handlers`** - для перезапуска сервисов
|
||||
- **`templates`** - для конфигурационных файлов
|
||||
- **`files`** - для статических файлов
|
||||
|
||||
### 3. Playbooks
|
||||
- Создавайте **отдельные playbooks** для разных сценариев
|
||||
- Используйте **переменные** для настройки
|
||||
- Добавляйте **проверки** и **валидацию**
|
||||
### 3. Переменные
|
||||
- **`defaults/main.yml`** - значения по умолчанию
|
||||
- **`vars/main.yml`** - внутренние переменные роли
|
||||
- **Используйте префиксы** для переменных роли
|
||||
- **Создавайте OS-специфичные переменные** при необходимости
|
||||
|
||||
### 4. Тестирование
|
||||
- Используйте **make role test** для проверки
|
||||
- Создавайте **тесты** в папке tests/
|
||||
- Проверяйте **разные платформы**
|
||||
### 4. Playbooks
|
||||
- **`gather_facts: true`** - всегда собирайте информацию об ОС
|
||||
- **`pre_tasks`** - отображайте информацию об ОС
|
||||
- **`post_tasks`** - проверяйте успешное развертывание
|
||||
- **Используйте переменные** для настройки
|
||||
|
||||
### 5. Тестирование
|
||||
- **`make role test`** - проверка роли
|
||||
- **Тестируйте на разных ОС** - Ubuntu, CentOS, RHEL
|
||||
- **Создавайте тесты** в папке tests/
|
||||
- **Проверяйте идемпотентность** - повторный запуск не должен изменять систему
|
||||
|
||||
## Интеграция с лабораторией
|
||||
|
||||
|
||||
Reference in New Issue
Block a user