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:
5
Makefile
5
Makefile
@@ -384,7 +384,10 @@ role: ## Управление ролями (list|create|edit|test|lint|deploy)
|
|||||||
echo "" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
echo "" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
||||||
echo "package_name: nginx" >> $(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 "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) \
|
edit) \
|
||||||
if [ -z "$(NAME)" ]; then \
|
if [ -z "$(NAME)" ]; then \
|
||||||
echo "$(RED)❌ Использование: make role edit NAME=my-role$(RESET)"; \
|
echo "$(RED)❌ Использование: make role edit NAME=my-role$(RESET)"; \
|
||||||
|
|||||||
@@ -43,7 +43,5 @@
|
|||||||
- role: deploy
|
- role: deploy
|
||||||
vars:
|
vars:
|
||||||
deploy_enabled: true
|
deploy_enabled: true
|
||||||
etcd_enabled: "{{ 'etcd' in group_names }}"
|
demo_enabled: true
|
||||||
patroni_enabled: "{{ 'patroni' in group_names }}"
|
|
||||||
haproxy_enabled: "{{ 'haproxy' in group_names }}"
|
|
||||||
apps_enabled: "{{ 'apps' in group_names }}"
|
apps_enabled: "{{ 'apps' in group_names }}"
|
||||||
|
|||||||
59
roles/demo/README.md
Normal file
59
roles/demo/README.md
Normal 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
|
||||||
12
roles/demo/defaults/main.yml
Normal file
12
roles/demo/defaults/main.yml
Normal 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
32
roles/demo/meta/main.yml
Normal 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
36
roles/demo/tasks/main.yml
Normal 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 }}"
|
||||||
@@ -7,13 +7,11 @@
|
|||||||
deploy_enabled: true
|
deploy_enabled: true
|
||||||
deploy_cleanup: false
|
deploy_cleanup: false
|
||||||
|
|
||||||
# Настройки групп
|
# Настройки демо роли
|
||||||
etcd_enabled: true
|
demo_enabled: true
|
||||||
patroni_enabled: true
|
|
||||||
haproxy_enabled: true
|
|
||||||
apps_enabled: true
|
|
||||||
|
|
||||||
# Настройки DinD
|
# Настройки DinD
|
||||||
|
apps_enabled: true
|
||||||
dind_stack_dir: /root/stack
|
dind_stack_dir: /root/stack
|
||||||
dind_compose_file: docker-compose.yml
|
dind_compose_file: docker-compose.yml
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,10 @@
|
|||||||
# Автор: Сергей Антропов
|
# Автор: Сергей Антропов
|
||||||
# Сайт: https://devops.org.ru
|
# Сайт: https://devops.org.ru
|
||||||
|
|
||||||
- name: Include group-specific tasks
|
- name: Deploy demo role
|
||||||
include_tasks: "{{ item.name }}.yml"
|
include_role:
|
||||||
loop: "{{ deploy_groups }}"
|
name: demo
|
||||||
when: item.enabled | bool
|
when: demo_enabled | default(true)
|
||||||
loop_control:
|
|
||||||
label: "{{ item.name }}"
|
|
||||||
|
|
||||||
- name: Deploy DinD stack
|
- name: Deploy DinD stack
|
||||||
include_tasks: dind-stack.yml
|
include_tasks: dind-stack.yml
|
||||||
|
|||||||
@@ -3,21 +3,6 @@
|
|||||||
# Автор: Сергей Антропов
|
# Автор: Сергей Антропов
|
||||||
# Сайт: https://devops.org.ru
|
# Сайт: 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 стека
|
||||||
dind_stack_config:
|
dind_stack_config:
|
||||||
version: "3.9"
|
version: "3.9"
|
||||||
|
|||||||
58
scripts/auto-add-role.sh
Normal file
58
scripts/auto-add-role.sh
Normal 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"
|
||||||
Reference in New Issue
Block a user