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:
37
roles/deploy/tasks/apps.yml
Normal file
37
roles/deploy/tasks/apps.yml
Normal 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 }}"
|
||||
40
roles/deploy/tasks/dind-stack.yml
Normal file
40
roles/deploy/tasks/dind-stack.yml
Normal 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 }}"
|
||||
32
roles/deploy/tasks/etcd.yml
Normal file
32
roles/deploy/tasks/etcd.yml
Normal 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 }}"
|
||||
41
roles/deploy/tasks/haproxy.yml
Normal file
41
roles/deploy/tasks/haproxy.yml
Normal 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 }}"
|
||||
21
roles/deploy/tasks/main.yml
Normal file
21
roles/deploy/tasks/main.yml
Normal 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 }}"
|
||||
46
roles/deploy/tasks/patroni.yml
Normal file
46
roles/deploy/tasks/patroni.yml
Normal 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 }}"
|
||||
Reference in New Issue
Block a user