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:
76
Makefile
76
Makefile
@@ -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
|
||||||
|
|||||||
10
README.md
10
README.md
@@ -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 # Проверить весь проект на ошибки
|
||||||
|
|||||||
@@ -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 }}"
|
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# Переменные по умолчанию для демо роли
|
|
||||||
# Автор: Сергей Антропов
|
|
||||||
# Сайт: https://devops.org.ru
|
|
||||||
|
|
||||||
demo_enabled: true
|
|
||||||
demo_packages:
|
|
||||||
- htop
|
|
||||||
- tree
|
|
||||||
- git
|
|
||||||
demo_directory: /opt/demo
|
|
||||||
demo_file: info.txt
|
|
||||||
@@ -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: []
|
|
||||||
@@ -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 }}"
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
---
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
@@ -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: []
|
|
||||||
@@ -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 }}"
|
|
||||||
@@ -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 }}"
|
|
||||||
@@ -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 }}"
|
|
||||||
@@ -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 }}"
|
|
||||||
@@ -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 }}"
|
|
||||||
@@ -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 }}"
|
|
||||||
@@ -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:
|
|
||||||
@@ -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
|
|
||||||
@@ -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') }}"
|
|
||||||
@@ -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"
|
|
||||||
Reference in New Issue
Block a user