feat: Удалены все роли Ansible из проекта

- Удалена директория roles/ со всеми ролями
- Упрощен site.yml (убраны ссылки на роли)
- Обновлен Makefile (убраны команды для ролей)
- Удален скрипт auto-add-role.sh
- Обновлен README.md (убрана информация о ролях)

Изменения:
- Удалена роль deploy
- Удалена роль demo
- Удален скрипт auto-add-role.sh
- Упрощен site.yml до базовых задач
- Убраны команды make role из Makefile
- Обновлена документация

Теперь проект использует только playbooks:
- files/playbooks/site.yml - основной playbook
- files/playbooks/chaos.yml - chaos engineering
- files/playbooks/health.yml - health dashboard

Преимущества:
- Упрощенная архитектура
- Меньше сложности
- Прямое использование playbooks
- Легче понимать и поддерживать

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

View File

@@ -346,80 +346,10 @@ preset: ## Управление пресетами (list|create|edit|test|copy)
esac esac
# ============================================================================= # =============================================================================
# УПРАВЛЕНИЕ РОЛЯМИ # УПРАВЛЕНИЕ РОЛЯМИ (УДАЛЕНО)
# ============================================================================= # =============================================================================
# Роли Ansible удалены из проекта
.PHONY: role # Используйте playbooks для развертывания
role: ## Управление ролями (list|create|edit|test|lint|deploy)
@case "$(word 2, $(MAKECMDGOALS))" in \
list) \
echo "$(CYAN)📋 Доступные роли:$(RESET)"; \
if [ -d "$(ROLES_DIR)" ]; then \
ls -la $(ROLES_DIR)/ | grep "^d" | awk '{print " " $$9}' | grep -v "^\.$\|^\.\.$"; \
else \
echo " $(YELLOW)Директория ролей не найдена$(RESET)"; \
fi;; \
create) \
if [ -z "$(NAME)" ]; then \
echo "$(RED)❌ Использование: make role create NAME=my-role$(RESET)"; \
exit 1; \
fi; \
echo "$(YELLOW)📝 Создаем роль: $(NAME)$(RESET)"; \
mkdir -p $(ROLES_DIR)/$(NAME)/{tasks,handlers,templates,files,vars,defaults,meta,tests}; \
echo "---" > $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo "# Основные задачи роли $(NAME)" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo "" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo "- name: Install package" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo " package:" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo " name: \"{{ package_name }}\"" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo " state: present" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo "" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo "- name: Start service" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo " service:" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo " name: \"{{ service_name }}\"" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo " state: started" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo " enabled: true" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo "---" > $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
echo "# Переменные по умолчанию для роли $(NAME)" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
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 "$(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)"; \
exit 1; \
fi; \
echo "$(BLUE)✏️ Редактируем роль: $(NAME)$(RESET)"; \
$${EDITOR:-vim} $(ROLES_DIR)/$(NAME)/tasks/main.yml;; \
test) \
if [ -z "$(NAME)" ]; then \
echo "$(RED)❌ Использование: make role test NAME=my-role$(RESET)"; \
exit 1; \
fi; \
echo "$(PURPLE)🧪 Тестируем роль: $(NAME)$(RESET)"; \
$(MAKE) lab test LAB_SPEC=molecule/presets/minimal.yml;; \
lint) \
echo "$(YELLOW)🔍 Проверяем роли...$(RESET)"; \
docker exec ansible-controller bash -lc 'ansible-lint --config-file /ansible/.ansible-lint $(ROLES_DIR)/*'; \
echo "$(GREEN)✅ Проверка завершена$(RESET)";; \
deploy) \
echo "$(PURPLE)🚀 Развертываем роли...$(RESET)"; \
docker exec ansible-controller bash -lc 'ansible-playbook -i /tmp/molecule/inventory/hosts.yml files/playbooks/site.yml'; \
echo "$(GREEN)✅ Развертывание завершено$(RESET)";; \
info) \
if [ -z "$(NAME)" ]; then \
echo "$(RED)❌ Использование: make role info NAME=my-role$(RESET)"; \
exit 1; \
fi; \
echo "$(BLUE)📋 Информация о роли: $(NAME)$(RESET)"; \
docker exec ansible-controller bash -lc 'cat /ansible/roles/$(NAME)/README.md';; \
*) \
echo "$(RED)❌ Неизвестная команда. Доступные: list, create, edit, test, lint, deploy, info$(RESET)";; \
esac
# ============================================================================= # =============================================================================
# УПРАВЛЕНИЕ VAULT # УПРАВЛЕНИЕ VAULT

View File

@@ -94,13 +94,9 @@ make preset create NAME=my-preset
make preset test NAME=my-preset make preset test NAME=my-preset
make preset edit NAME=my-preset make preset edit NAME=my-preset
# Управление ролями # Управление ролями (УДАЛЕНО)
make role list # Список ролей # Роли Ansible удалены из проекта
make role create NAME=my-role # Используйте playbooks для развертывания
make role test NAME=my-role
make role lint # Проверка ролей
make role deploy # Развертывание ролей
make role info NAME=deploy # Информация о роли
# Проверка всего проекта # Проверка всего проекта
make lint # Проверить весь проект на ошибки make lint # Проверить весь проект на ошибки

View File

@@ -35,13 +35,11 @@
- unzip - unzip
state: present state: present
# Развертывание инфраструктуры через роль deploy # Развертывание инфраструктуры
- name: Deploy infrastructure - name: Deploy infrastructure
hosts: all hosts: all
become: true become: true
roles: tasks:
- role: deploy - name: Infrastructure placeholder
vars: debug:
deploy_enabled: true msg: "Инфраструктура готова для настройки"
demo_enabled: true
apps_enabled: "{{ 'apps' in group_names }}"

View File

@@ -1,59 +0,0 @@
# Демо роль
Простая демо роль для тестирования возможностей лаборатории.
## Описание
Роль `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

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

View File

@@ -1,32 +0,0 @@
---
# Метаданные демо роли
# Автор: Сергей Антропов
# Сайт: 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: []

View File

@@ -1,36 +0,0 @@
---
# Демо роль для тестирования возможностей лаборатории
# Автор: Сергей Антропов
# Сайт: 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

@@ -1 +0,0 @@
---

View File

@@ -1,114 +0,0 @@
# Роль Deploy
Универсальная роль для развертывания инфраструктуры лаборатории.
## Описание
Роль `deploy` предназначена для развертывания различных компонентов инфраструктуры в лабораторной среде. Она поддерживает развертывание ETCD, Patroni, HAProxy и приложений с DinD стеками.
## Переменные
### Основные переменные
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `deploy_enabled` | `true` | Включить развертывание |
| `deploy_cleanup` | `false` | Очистка перед развертыванием |
### Переменные групп
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `etcd_enabled` | `true` | Включить развертывание ETCD |
| `patroni_enabled` | `true` | Включить развертывание Patroni |
| `haproxy_enabled` | `true` | Включить развертывание HAProxy |
| `apps_enabled` | `true` | Включить развертывание приложений |
### Переменные DinD
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `dind_stack_dir` | `/root/stack` | Директория для DinD стека |
| `dind_compose_file` | `docker-compose.yml` | Имя файла docker-compose |
## Использование
### Базовое использование
```yaml
- hosts: all
roles:
- role: deploy
```
### С настройками
```yaml
- hosts: all
roles:
- role: deploy
vars:
etcd_enabled: true
patroni_enabled: true
haproxy_enabled: false
apps_enabled: true
```
### Условное развертывание
```yaml
- hosts: all
roles:
- role: deploy
vars:
etcd_enabled: "{{ 'etcd' in group_names }}"
patroni_enabled: "{{ 'patroni' in group_names }}"
haproxy_enabled: "{{ 'haproxy' in group_names }}"
apps_enabled: "{{ 'apps' in group_names }}"
```
## Компоненты
### ETCD
- Установка ETCD
- Настройка сервиса
- Проверка статуса
### Patroni
- Установка PostgreSQL
- Установка Patroni
- Настройка пользователя postgres
### HAProxy
- Установка HAProxy
- Генерация конфигурации
- Настройка балансировки
### Apps
- Установка Docker
- Настройка пользователя
- Развертывание DinD стека
## Шаблоны
- `haproxy.cfg.j2` - конфигурация HAProxy
- `docker-compose.yml.j2` - конфигурация DinD стека
## Обработчики
- `restart haproxy` - перезапуск HAProxy
- `restart etcd` - перезапуск ETCD
- `restart postgresql` - перезапуск PostgreSQL
- `restart docker` - перезапуск Docker
## Требования
- Ansible >= 2.9
- Python >= 3.6
- Docker (для DinD)
- systemd
## Автор
Сергей Антропов
Сайт: https://devops.org.ru

View File

@@ -1,24 +0,0 @@
---
# Переменные по умолчанию для роли deploy
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Настройки развертывания
deploy_enabled: true
deploy_cleanup: false
# Настройки демо роли
demo_enabled: true
# Настройки DinD
apps_enabled: true
dind_stack_dir: /root/stack
dind_compose_file: docker-compose.yml
# Настройки мониторинга
monitoring_enabled: false
monitoring_retention_days: 30
# Настройки безопасности
security_hardening: true
firewall_enabled: false

View File

@@ -1,24 +0,0 @@
---
# Обработчики роли deploy
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: restart haproxy
systemd:
name: haproxy
state: restarted
- name: restart etcd
systemd:
name: etcd
state: restarted
- name: restart postgresql
systemd:
name: postgresql
state: restarted
- name: restart docker
systemd:
name: docker
state: restarted

View File

@@ -1,34 +0,0 @@
---
# Метаданные роли deploy
# Автор: Сергей Антропов
# Сайт: 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:
- infrastructure
- deployment
- laboratory
- docker
- kubernetes
dependencies: []

View File

@@ -1,37 +0,0 @@
---
# Задачи для развертывания приложений
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: Apps placeholder
debug:
msg: "Apps группа готова для настройки"
- name: Install Docker dependencies
package:
name:
- docker.io
- docker-compose
state: present
when: ansible_os_family == "Debian"
- name: Start Docker service
systemd:
name: docker
state: started
enabled: true
- name: Add user to docker group
user:
name: "{{ ansible_user }}"
groups: docker
append: true
- name: Docker status
systemd:
name: docker
register: docker_status
- name: Display Docker status
debug:
msg: "Docker service status: {{ docker_status.status.ActiveState }}"

View File

@@ -1,40 +0,0 @@
---
# Задачи для развертывания DinD стека
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: Create stack directory
file:
path: "{{ dind_stack_dir }}"
state: directory
mode: '0755'
- name: Generate docker-compose.yml
template:
src: docker-compose.yml.j2
dest: "{{ dind_stack_dir }}/{{ dind_compose_file }}"
mode: '0644'
- name: Deploy stack on DinD
community.docker.docker_compose_v2:
project_src: "{{ dind_stack_dir }}"
state: present
docker_host: "{{ docker_host }}"
vars:
docker_host: "tcp://{{ inventory_hostname }}:2375"
- name: Display stack status
community.docker.docker_container:
docker_host: "{{ docker_host }}"
name: "{{ item }}"
state: started
loop:
- "{{ dind_stack_dir }}_web_1"
- "{{ dind_stack_dir }}_cache_1"
- "{{ dind_stack_dir }}_db_1"
ignore_errors: true
register: stack_containers
- name: Show running containers
debug:
msg: "Running containers: {{ stack_containers.results | map(attribute='item') | list }}"

View File

@@ -1,32 +0,0 @@
---
# Задачи для развертывания ETCD
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: ETCD placeholder
debug:
msg: "ETCD группа готова для настройки"
- name: Install ETCD dependencies
package:
name:
- etcd
- etcd-client
state: present
when: ansible_os_family == "Debian"
- name: Start ETCD service
systemd:
name: etcd
state: started
enabled: true
when: ansible_os_family == "Debian"
- name: ETCD status
systemd:
name: etcd
register: etcd_status
- name: Display ETCD status
debug:
msg: "ETCD service status: {{ etcd_status.status.ActiveState }}"

View File

@@ -1,41 +0,0 @@
---
# Задачи для развертывания HAProxy
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: HAProxy placeholder
debug:
msg: "HAProxy группа готова для настройки"
- name: Install HAProxy
package:
name: haproxy
state: present
- name: Create HAProxy config directory
file:
path: /etc/haproxy
state: directory
mode: '0755'
- name: Configure HAProxy
template:
src: haproxy.cfg.j2
dest: /etc/haproxy/haproxy.cfg
mode: '0644'
notify: restart haproxy
- name: Start HAProxy
systemd:
name: haproxy
state: started
enabled: true
- name: HAProxy status
systemd:
name: haproxy
register: haproxy_status
- name: Display HAProxy status
debug:
msg: "HAProxy service status: {{ haproxy_status.status.ActiveState }}"

View File

@@ -1,19 +0,0 @@
---
# Основные задачи роли deploy
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: Deploy demo role
include_role:
name: demo
when: demo_enabled | default(true)
- name: Deploy DinD stack
include_tasks: dind-stack.yml
when:
- apps_enabled | bool
- inventory_hostname in groups['apps'] | default([])
- item.type is defined and item.type == 'dind'
loop: "{{ groups['apps'] | map('extract', hostvars) | list }}"
loop_control:
label: "{{ inventory_hostname }}"

View File

@@ -1,46 +0,0 @@
---
# Задачи для развертывания Patroni
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: Patroni placeholder
debug:
msg: "Patroni группа готова для настройки"
- name: Install PostgreSQL
package:
name:
- postgresql
- postgresql-contrib
- postgresql-client
state: present
- name: Install Patroni dependencies
package:
name:
- python3-pip
- python3-psycopg2
- python3-etcd
state: present
- name: Install Patroni
pip:
name: patroni
state: present
- name: Create Patroni user
user:
name: postgres
system: true
shell: /bin/bash
home: /var/lib/postgresql
create_home: true
- name: Patroni status
systemd:
name: postgresql
register: patroni_status
- name: Display Patroni status
debug:
msg: "PostgreSQL service status: {{ patroni_status.status.ActiveState }}"

View File

@@ -1,36 +0,0 @@
# Docker Compose конфигурация для DinD стека
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
version: "{{ dind_stack_config.version }}"
services:
web:
image: {{ dind_stack_config.services.web.image }}
ports:
- "{{ dind_stack_config.services.web.ports[0] }}"
depends_on:
- cache
- db
restart: unless-stopped
cache:
image: {{ dind_stack_config.services.cache.image }}
restart: unless-stopped
command: redis-server --appendonly yes
volumes:
- redis_data:/data
db:
image: {{ dind_stack_config.services.db.image }}
environment:
POSTGRES_DB: {{ dind_stack_config.services.db.environment.POSTGRES_DB }}
POSTGRES_USER: {{ dind_stack_config.services.db.environment.POSTGRES_USER }}
POSTGRES_PASSWORD: {{ dind_stack_config.services.db.environment.POSTGRES_PASSWORD }}
restart: unless-stopped
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
redis_data:
postgres_data:

View File

@@ -1,31 +0,0 @@
# HAProxy конфигурация
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
global
daemon
maxconn 4096
log stdout local0
defaults
mode tcp
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
# PostgreSQL кластер
listen postgresql
bind *:5000
balance roundrobin
option tcp-check
tcp-check connect port 5432
{% for host in groups['patroni'] | default([]) %}
server {{ host }} {{ host }}:5432 check
{% endfor %}
# Статистика HAProxy
listen stats
bind *:8404
stats enable
stats uri /stats
stats refresh 5s

View File

@@ -1,21 +0,0 @@
---
# Переменные роли deploy
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Настройки DinD стека
dind_stack_config:
version: "3.9"
services:
web:
image: nginx:alpine
ports:
- "8080:80"
cache:
image: redis:7-alpine
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: app
POSTGRES_USER: app
POSTGRES_PASSWORD: "{{ vault_db_password | default('changeme') }}"

View File

@@ -1,58 +0,0 @@
#!/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"