feat: Создана роль deploy для управления инфраструктурой

- Создана полноценная роль deploy в roles/deploy/
- Перенесена логика развертывания из site.yml в роль
- Обновлен site.yml для использования роли deploy
- Добавлена поддержка условного развертывания по группам

Структура роли deploy:
- tasks/main.yml - основные задачи
- tasks/etcd.yml - развертывание ETCD
- tasks/patroni.yml - развертывание Patroni
- tasks/haproxy.yml - развертывание HAProxy
- tasks/apps.yml - развертывание приложений
- tasks/dind-stack.yml - развертывание DinD стека
- templates/haproxy.cfg.j2 - конфигурация HAProxy
- templates/docker-compose.yml.j2 - конфигурация DinD стека
- handlers/main.yml - обработчики сервисов
- defaults/main.yml - переменные по умолчанию
- vars/main.yml - переменные роли
- meta/main.yml - метаданные роли
- README.md - документация роли

Обновления в site.yml:
- Упрощен до базовой установки common tools
- Добавлена роль deploy с условным развертыванием
- Поддержка развертывания по группам (etcd, patroni, haproxy, apps)

Новые команды:
- make role info NAME=deploy - информация о роли
- make role deploy - развертывание ролей с inventory

Преимущества:
- Модульная архитектура с разделением ответственности
- Условное развертывание по группам хостов
- Переиспользуемые компоненты (ETCD, Patroni, HAProxy)
- Шаблоны для конфигурации сервисов
- Обработчики для перезапуска сервисов
- Подробная документация роли

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
2025-10-22 14:18:49 +03:00
parent dc255d006a
commit 51c76fb859
16 changed files with 539 additions and 63 deletions

View File

@@ -0,0 +1,37 @@
---
# Задачи для развертывания приложений
# Автор: Сергей Антропов
# Сайт: 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

@@ -0,0 +1,40 @@
---
# Задачи для развертывания 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

@@ -0,0 +1,32 @@
---
# Задачи для развертывания 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

@@ -0,0 +1,41 @@
---
# Задачи для развертывания 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

@@ -0,0 +1,21 @@
---
# Основные задачи роли deploy
# Автор: Сергей Антропов
# Сайт: 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 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

@@ -0,0 +1,46 @@
---
# Задачи для развертывания 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 }}"