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"