feat: Упрощена система ролей и добавлена автоматизация

- Создана простая демо роль для тестирования
- Упрощена роль deploy (убраны сложные компоненты)
- Добавлен скрипт auto-add-role.sh для автоматического добавления ролей
- Обновлен Makefile для автоматического добавления новых ролей

Изменения в роли deploy:
- Убраны сложные компоненты (ETCD, Patroni, HAProxy)
- Добавлена демо роль для тестирования
- Упрощены переменные и задачи

Новая демо роль:
- roles/demo/ - простая роль для тестирования
- Устанавливает базовые инструменты (htop, tree, git)
- Создает демо файлы с информацией о хосте
- Легко удаляется без поломки системы

Автоматизация:
- scripts/auto-add-role.sh - автоматическое добавление ролей
- Обновление deploy/tasks/main.yml
- Обновление deploy/defaults/main.yml
- Обновление site.yml
- Автоматическое выполнение при make role create

Преимущества:
- Простота тестирования с демо ролью
- Автоматическое добавление новых ролей
- Универсальность системы
- Легкое удаление без поломки
- Модульная архитектура

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
2025-10-22 14:25:27 +03:00
parent 51c76fb859
commit e6287769d6
10 changed files with 209 additions and 30 deletions

View File

@@ -384,7 +384,10 @@ role: ## Управление ролями (list|create|edit|test|lint|deploy)
echo "" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
echo "package_name: nginx" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
echo "service_name: nginx" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
echo "$(GREEN)✅ Роль создана: $(ROLES_DIR)/$(NAME)/$(RESET)";; \
echo "$(GREEN)✅ Роль создана: $(ROLES_DIR)/$(NAME)/$(RESET)"; \
echo "$(BLUE)🔧 Автоматически добавляем роль в систему...$(RESET)"; \
docker exec ansible-controller bash -lc "bash /ansible/scripts/auto-add-role.sh $(NAME)"; \
echo "$(GREEN)✅ Роль $(NAME) добавлена в систему$(RESET)";; \
edit) \
if [ -z "$(NAME)" ]; then \
echo "$(RED)❌ Использование: make role edit NAME=my-role$(RESET)"; \

View File

@@ -43,7 +43,5 @@
- role: deploy
vars:
deploy_enabled: true
etcd_enabled: "{{ 'etcd' in group_names }}"
patroni_enabled: "{{ 'patroni' in group_names }}"
haproxy_enabled: "{{ 'haproxy' in group_names }}"
demo_enabled: true
apps_enabled: "{{ 'apps' in group_names }}"

59
roles/demo/README.md Normal file
View File

@@ -0,0 +1,59 @@
# Демо роль
Простая демо роль для тестирования возможностей лаборатории.
## Описание
Роль `demo` предназначена для демонстрации и тестирования возможностей универсальной лаборатории. Она устанавливает базовые инструменты и создает демо файлы.
## Переменные
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `demo_enabled` | `true` | Включить демо роль |
| `demo_packages` | `['htop', 'tree', 'git']` | Список пакетов для установки |
| `demo_directory` | `/opt/demo` | Директория для демо файлов |
| `demo_file` | `info.txt` | Имя демо файла |
## Использование
### Базовое использование
```yaml
- hosts: all
roles:
- role: demo
```
### С настройками
```yaml
- hosts: all
roles:
- role: demo
vars:
demo_packages:
- htop
- tree
- git
- vim
demo_directory: /opt/my-demo
```
## Что делает роль
1. Устанавливает демо пакеты (htop, tree, git)
2. Создает демо директорию `/opt/demo`
3. Создает демо файл с информацией о хосте
4. Выводит информацию о развертывании
## Требования
- Ansible >= 2.9
- Python >= 3.6
- Доступ к репозиториям пакетов
## Автор
Сергей Антропов
Сайт: https://devops.org.ru

View File

@@ -0,0 +1,12 @@
---
# Переменные по умолчанию для демо роли
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
demo_enabled: true
demo_packages:
- htop
- tree
- git
demo_directory: /opt/demo
demo_file: info.txt

32
roles/demo/meta/main.yml Normal file
View File

@@ -0,0 +1,32 @@
---
# Метаданные демо роли
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
galaxy_info:
author: Сергей Антропов
description: Демо роль для тестирования возможностей лаборатории
company: 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:
- demo
- testing
- laboratory
dependencies: []

36
roles/demo/tasks/main.yml Normal file
View File

@@ -0,0 +1,36 @@
---
# Демо роль для тестирования возможностей лаборатории
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: Demo role placeholder
debug:
msg: "Демо роль готова для тестирования"
- name: Install demo package
package:
name:
- htop
- tree
- git
state: present
- name: Create demo directory
file:
path: /opt/demo
state: directory
mode: '0755'
- name: Create demo file
copy:
content: |
# Демо файл
Создан: {{ ansible_date_time.iso8601 }}
Хост: {{ inventory_hostname }}
Группы: {{ group_names | join(', ') }}
dest: /opt/demo/info.txt
mode: '0644'
- name: Display demo info
debug:
msg: "Демо роль успешно развернута на {{ inventory_hostname }}"

View File

@@ -7,13 +7,11 @@
deploy_enabled: true
deploy_cleanup: false
# Настройки групп
etcd_enabled: true
patroni_enabled: true
haproxy_enabled: true
apps_enabled: true
# Настройки демо роли
demo_enabled: true
# Настройки DinD
apps_enabled: true
dind_stack_dir: /root/stack
dind_compose_file: docker-compose.yml

View File

@@ -3,12 +3,10 @@
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: Include group-specific tasks
include_tasks: "{{ item.name }}.yml"
loop: "{{ deploy_groups }}"
when: item.enabled | bool
loop_control:
label: "{{ item.name }}"
- name: Deploy demo role
include_role:
name: demo
when: demo_enabled | default(true)
- name: Deploy DinD stack
include_tasks: dind-stack.yml

View File

@@ -3,21 +3,6 @@
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Список групп для развертывания
deploy_groups:
- name: etcd
enabled: "{{ etcd_enabled }}"
description: "ETCD кластер"
- name: patroni
enabled: "{{ patroni_enabled }}"
description: "Patroni PostgreSQL кластер"
- name: haproxy
enabled: "{{ haproxy_enabled }}"
description: "HAProxy балансировщик"
- name: apps
enabled: "{{ apps_enabled }}"
description: "Приложения и DinD стеки"
# Настройки DinD стека
dind_stack_config:
version: "3.9"

58
scripts/auto-add-role.sh Normal file
View File

@@ -0,0 +1,58 @@
#!/usr/bin/env bash
# Автоматическое добавление новой роли в систему
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
set -euo pipefail
ROLE_NAME="$1"
ROLES_DIR="/ansible/roles"
DEPLOY_TASKS="/ansible/roles/deploy/tasks/main.yml"
if [ -z "$ROLE_NAME" ]; then
echo "❌ Использование: $0 <role_name>"
exit 1
fi
echo "🔧 Добавляем роль $ROLE_NAME в систему..."
# Проверяем, что роль существует
if [ ! -d "$ROLES_DIR/$ROLE_NAME" ]; then
echo "❌ Роль $ROLE_NAME не найдена в $ROLES_DIR"
exit 1
fi
# Добавляем роль в deploy/tasks/main.yml
echo "📝 Добавляем роль в deploy/tasks/main.yml..."
# Создаем временный файл с новой задачей
cat > /tmp/add_role_task.yml << EOF
- name: Deploy $ROLE_NAME role
include_role:
name: $ROLE_NAME
when: ${ROLE_NAME}_enabled | default(true)
EOF
# Добавляем задачу в main.yml перед DinD stack
sed -i '/Deploy DinD stack/i\
'"$(cat /tmp/add_role_task.yml)"'
' "$DEPLOY_TASKS"
# Добавляем переменную в defaults/main.yml
echo "📝 Добавляем переменную в deploy/defaults/main.yml..."
echo "" >> "$ROLES_DIR/deploy/defaults/main.yml"
echo "# Настройки роли $ROLE_NAME" >> "$ROLES_DIR/deploy/defaults/main.yml"
echo "${ROLE_NAME}_enabled: true" >> "$ROLES_DIR/deploy/defaults/main.yml"
# Обновляем site.yml
echo "📝 Обновляем site.yml..."
sed -i "/demo_enabled: true/a\\
${ROLE_NAME}_enabled: true" /ansible/files/playbooks/site.yml
echo "✅ Роль $ROLE_NAME успешно добавлена в систему!"
echo "📋 Доступные переменные:"
echo " - ${ROLE_NAME}_enabled: true/false"
echo "📝 Файлы обновлены:"
echo " - $DEPLOY_TASKS"
echo " - $ROLES_DIR/deploy/defaults/main.yml"
echo " - /ansible/files/playbooks/site.yml"