From e6287769d6e8fca149cc94fc60ec5b63762ac2e0 Mon Sep 17 00:00:00 2001 From: Sergey Antropoff Date: Wed, 22 Oct 2025 14:25:27 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=A3=D0=BF=D1=80=D0=BE=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=B0=20?= =?UTF-8?q?=D1=80=D0=BE=D0=BB=D0=B5=D0=B9=20=D0=B8=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B0=D0=B2=D1=82=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D1=82=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Создана простая демо роль для тестирования - Упрощена роль 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 --- Makefile | 5 ++- files/playbooks/site.yml | 4 +-- roles/demo/README.md | 59 ++++++++++++++++++++++++++++++++++ roles/demo/defaults/main.yml | 12 +++++++ roles/demo/meta/main.yml | 32 ++++++++++++++++++ roles/demo/tasks/main.yml | 36 +++++++++++++++++++++ roles/deploy/defaults/main.yml | 8 ++--- roles/deploy/tasks/main.yml | 10 +++--- roles/deploy/vars/main.yml | 15 --------- scripts/auto-add-role.sh | 58 +++++++++++++++++++++++++++++++++ 10 files changed, 209 insertions(+), 30 deletions(-) create mode 100644 roles/demo/README.md create mode 100644 roles/demo/defaults/main.yml create mode 100644 roles/demo/meta/main.yml create mode 100644 roles/demo/tasks/main.yml create mode 100644 scripts/auto-add-role.sh diff --git a/Makefile b/Makefile index d324797..5ac4bef 100644 --- a/Makefile +++ b/Makefile @@ -384,7 +384,10 @@ role: ## Управление ролями (list|create|edit|test|lint|deploy) 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 "$(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)"; \ diff --git a/files/playbooks/site.yml b/files/playbooks/site.yml index 85fc574..f1b36e7 100644 --- a/files/playbooks/site.yml +++ b/files/playbooks/site.yml @@ -43,7 +43,5 @@ - role: deploy vars: deploy_enabled: true - etcd_enabled: "{{ 'etcd' in group_names }}" - patroni_enabled: "{{ 'patroni' in group_names }}" - haproxy_enabled: "{{ 'haproxy' in group_names }}" + demo_enabled: true apps_enabled: "{{ 'apps' in group_names }}" diff --git a/roles/demo/README.md b/roles/demo/README.md new file mode 100644 index 0000000..af7e2a7 --- /dev/null +++ b/roles/demo/README.md @@ -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 diff --git a/roles/demo/defaults/main.yml b/roles/demo/defaults/main.yml new file mode 100644 index 0000000..7a139d1 --- /dev/null +++ b/roles/demo/defaults/main.yml @@ -0,0 +1,12 @@ +--- +# Переменные по умолчанию для демо роли +# Автор: Сергей Антропов +# Сайт: https://devops.org.ru + +demo_enabled: true +demo_packages: + - htop + - tree + - git +demo_directory: /opt/demo +demo_file: info.txt diff --git a/roles/demo/meta/main.yml b/roles/demo/meta/main.yml new file mode 100644 index 0000000..d4c0b6b --- /dev/null +++ b/roles/demo/meta/main.yml @@ -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: [] diff --git a/roles/demo/tasks/main.yml b/roles/demo/tasks/main.yml new file mode 100644 index 0000000..14b60b0 --- /dev/null +++ b/roles/demo/tasks/main.yml @@ -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 }}" diff --git a/roles/deploy/defaults/main.yml b/roles/deploy/defaults/main.yml index 39a08ae..e695315 100644 --- a/roles/deploy/defaults/main.yml +++ b/roles/deploy/defaults/main.yml @@ -7,13 +7,11 @@ deploy_enabled: true deploy_cleanup: false -# Настройки групп -etcd_enabled: true -patroni_enabled: true -haproxy_enabled: true -apps_enabled: true +# Настройки демо роли +demo_enabled: true # Настройки DinD +apps_enabled: true dind_stack_dir: /root/stack dind_compose_file: docker-compose.yml diff --git a/roles/deploy/tasks/main.yml b/roles/deploy/tasks/main.yml index 0cd101e..9ae4c3e 100644 --- a/roles/deploy/tasks/main.yml +++ b/roles/deploy/tasks/main.yml @@ -3,12 +3,10 @@ # Автор: Сергей Антропов # Сайт: 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 demo role + include_role: + name: demo + when: demo_enabled | default(true) - name: Deploy DinD stack include_tasks: dind-stack.yml diff --git a/roles/deploy/vars/main.yml b/roles/deploy/vars/main.yml index ccc843d..ee25a86 100644 --- a/roles/deploy/vars/main.yml +++ b/roles/deploy/vars/main.yml @@ -3,21 +3,6 @@ # Автор: Сергей Антропов # Сайт: 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_stack_config: version: "3.9" diff --git a/scripts/auto-add-role.sh b/scripts/auto-add-role.sh new file mode 100644 index 0000000..c0d9669 --- /dev/null +++ b/scripts/auto-add-role.sh @@ -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 " + 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"