From 102003bb3289e28be4b5cf80313ca843126842a7 Mon Sep 17 00:00:00 2001 From: Sergey Antropoff Date: Wed, 22 Oct 2025 15:47:11 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D1=8B=20?= =?UTF-8?q?emoji=20=D0=B8=D0=B7=20whiptail=20=D0=B4=D0=B8=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=D0=B2=20=D0=B8=20=D0=BE=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Убраны все emoji из whiptail диалогов для лучшей совместимости - Обновлен README.md с новыми возможностями - Добавлен раздел с интерактивным интерфейсом - Добавлен раздел с автоматической инициализацией - Добавлен раздел с CI/CD командами - Добавлен раздел с управлением ролями Изменения в whiptail: - Убраны emoji из заголовков диалогов - Убраны emoji из опций меню - Сохранена функциональность всех диалогов - Улучшена совместимость с разными терминалами Обновления документации: - Добавлен раздел 'Новые возможности' - Описание интерактивного интерфейса - Описание автоматической инициализации - Описание CI/CD команд - Описание управления ролями - Обновлен быстрый старт Преимущества: - Лучшая совместимость с терминалами - Чистый интерфейс whiptail - Обновленная документация - Сохранены цвета в консольном выводе Автор: Сергей Антропов Сайт: https://devops.org.ru --- Makefile | 92 +++++++++++++++++++++++++++---------------------------- README.md | 81 ++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 114 insertions(+), 59 deletions(-) diff --git a/Makefile b/Makefile index cba6b4a..841780c 100644 --- a/Makefile +++ b/Makefile @@ -475,13 +475,13 @@ menu-lab: check-whiptail ## Меню управления лабораторие menu-kube: check-whiptail ## Меню управления Kubernetes @CHOICE=$$(whiptail --title "Управление Kubernetes" \ --menu "Выберите действие:" 15 50 8 \ - "logs" "📝 Просмотр логов" \ - "exec" "🐚 Выполнить команду" \ + "logs" "Просмотр логов" \ + "exec" "Выполнить команду" \ "port-forward" "🔗 Проброс портов" \ - "kiali" "🔍 Kiali Dashboard" \ + "kiali" "Kiali Dashboard" \ "istio" "🌐 Istio Gateway" \ - "grafana" "📊 Grafana Dashboard" \ - "prometheus" "📈 Prometheus" \ + "grafana" "Grafana Dashboard" \ + "prometheus" "Prometheus" \ "back" "⬅️ Назад" \ 3>&1 1>&2 2>&3); \ if [ $$? -ne 0 ] || [ "$$CHOICE" = "back" ]; then exit 0; fi; \ @@ -545,13 +545,13 @@ menu-kube: check-whiptail ## Меню управления Kubernetes .PHONY: menu-preset menu-preset: check-whiptail ## Меню управления пресетами - @CHOICE=$$(whiptail --title "📋 Управление пресетами" \ + @CHOICE=$$(whiptail --title "Управление пресетами" \ --menu "Выберите действие:" 15 50 7 \ - "list" "📋 Список пресетов" \ + "list" "Список пресетов" \ "create" "➕ Создать пресет" \ "edit" "✏️ Редактировать пресет" \ - "test" "🧪 Тестировать пресет" \ - "copy" "📋 Копировать пресет" \ + "test" "Тестировать пресет" \ + "copy" "Копировать пресет" \ "back" "⬅️ Назад" \ 3>&1 1>&2 2>&3); \ if [ $$? -ne 0 ] || [ "$$CHOICE" = "back" ]; then exit 0; fi; \ @@ -560,7 +560,7 @@ menu-preset: check-whiptail ## Меню управления пресетами echo "$(BLUE)📋 Получение списка пресетов...$(RESET)"; \ PRESET_LIST=$$(make preset list 2>&1); \ if [ $$? -eq 0 ] && [ -n "$$PRESET_LIST" ]; then \ - echo "$$PRESET_LIST" | whiptail --title "📋 Список пресетов" --scrolltext --textbox /dev/stdin 20 70; \ + echo "$$PRESET_LIST" | whiptail --title "Список пресетов" --scrolltext --textbox /dev/stdin 20 70; \ else \ whiptail --title "Предупреждение" --msgbox "Пресеты не найдены или недоступны." 8 50; \ fi;; \ @@ -650,15 +650,15 @@ menu-preset: check-whiptail ## Меню управления пресетами .PHONY: menu-role menu-role: check-whiptail ## Меню управления ролями - @CHOICE=$$(whiptail --title "🎭 Управление ролями" \ + @CHOICE=$$(whiptail --title "Управление ролями" \ --menu "Выберите действие:" 15 50 8 \ - "list" "📋 Список ролей" \ + "list" "Список ролей" \ "create" "➕ Создать роль" \ "edit" "✏️ Редактировать роль" \ - "test" "🧪 Тестировать роль" \ - "lint" "🔍 Проверка синтаксиса" \ - "deploy" "🚀 Развертывание ролей" \ - "playbook" "📝 Управление playbooks" \ + "test" "Тестировать роль" \ + "lint" "Проверка синтаксиса" \ + "deploy" "Развертывание ролей" \ + "playbook" "Управление playbooks" \ "back" "⬅️ Назад" \ 3>&1 1>&2 2>&3); \ if [ $$? -ne 0 ] || [ "$$CHOICE" = "back" ]; then exit 0; fi; \ @@ -667,7 +667,7 @@ menu-role: check-whiptail ## Меню управления ролями echo "$(BLUE)📋 Получение списка ролей...$(RESET)"; \ ROLE_LIST=$$(make role list 2>&1); \ if [ $$? -eq 0 ] && [ -n "$$ROLE_LIST" ]; then \ - echo "$$ROLE_LIST" | whiptail --title "📋 Список ролей" --scrolltext --textbox /dev/stdin 20 70; \ + echo "$$ROLE_LIST" | whiptail --title "Список ролей" --scrolltext --textbox /dev/stdin 20 70; \ else \ whiptail --title "Предупреждение" --msgbox "Роли не найдены или недоступны." 8 50; \ fi;; \ @@ -794,7 +794,7 @@ menu-role: check-whiptail ## Меню управления ролями if [ $$? -eq 0 ]; then \ whiptail --title "Успех" --msgbox "Проверка синтаксиса ролей прошла успешно!" 8 50; \ else \ - echo "$$LINT_OUTPUT" | whiptail --title "❌ Ошибки синтаксиса" --scrolltext --textbox /dev/stdin 20 70; \ + echo "$$LINT_OUTPUT" | whiptail --title "Ошибки синтаксиса" --scrolltext --textbox /dev/stdin 20 70; \ fi;; \ "deploy") \ echo "$(BLUE)🚀 Развертывание ролей...$(RESET)"; \ @@ -824,12 +824,12 @@ menu-role: check-whiptail ## Меню управления ролями .PHONY: menu-vault menu-vault: check-whiptail ## Меню управления vault - @CHOICE=$$(whiptail --title "🔐 Управление vault" \ + @CHOICE=$$(whiptail --title "Управление vault" \ --menu "Выберите действие:" 15 50 8 \ "view" "👁️ Просмотр секретов" \ "create" "➕ Создать секрет" \ "edit" "✏️ Редактировать секрет" \ - "encrypt" "🔒 Зашифровать файл" \ + "encrypt" "Зашифровать файл" \ "decrypt" "🔓 Расшифровать файл" \ "back" "⬅️ Назад" \ 3>&1 1>&2 2>&3); \ @@ -847,7 +847,7 @@ menu-report: check-whiptail ## Меню генерации отчетов @CHOICE=$$(whiptail --title "Генерация отчетов" \ --menu "Выберите действие:" 15 50 8 \ "html" "📄 HTML отчет" \ - "json" "📋 JSON отчет" \ + "json" "JSON отчет" \ "health" "🏥 Отчет о здоровье" \ "topology" "🗺️ Топология сети" \ "back" "⬅️ Назад" \ @@ -862,13 +862,13 @@ menu-report: check-whiptail ## Меню генерации отчетов .PHONY: menu-lint menu-lint: check-whiptail ## Меню проверки синтаксиса - @CHOICE=$$(whiptail --title "🔍 Проверка синтаксиса" \ + @CHOICE=$$(whiptail --title "Проверка синтаксиса" \ --menu "Выберите действие:" 15 50 8 \ - "all" "🔍 Проверить все" \ - "roles" "🎭 Проверить роли" \ - "playbooks" "📝 Проверить playbooks" \ - "vault" "🔐 Проверить vault" \ - "secrets" "🔍 Проверить секреты" \ + "all" "Проверить все" \ + "roles" "Проверить роли" \ + "playbooks" "Проверить playbooks" \ + "vault" "Проверить vault" \ + "secrets" "Проверить секреты" \ "back" "⬅️ Назад" \ 3>&1 1>&2 2>&3); \ if [ $$? -ne 0 ] || [ "$$CHOICE" = "back" ]; then exit 0; fi; \ @@ -882,11 +882,11 @@ menu-lint: check-whiptail ## Меню проверки синтаксиса .PHONY: menu-snapshot menu-snapshot: check-whiptail ## Меню снимков лаборатории - @CHOICE=$$(whiptail --title "📸 Снимки лаборатории" \ + @CHOICE=$$(whiptail --title "Снимки лаборатории" \ --menu "Выберите действие:" 15 50 8 \ - "create" "📸 Создать снимок" \ + "create" "Создать снимок" \ "restore" "🔄 Восстановить снимок" \ - "list" "📋 Список снимков" \ + "list" "Список снимков" \ "back" "⬅️ Назад" \ 3>&1 1>&2 2>&3); \ if [ $$? -ne 0 ] || [ "$$CHOICE" = "back" ]; then exit 0; fi; \ @@ -898,13 +898,13 @@ menu-snapshot: check-whiptail ## Меню снимков лаборатории .PHONY: menu-cleanup menu-cleanup: check-whiptail ## Меню очистки данных - @CHOICE=$$(whiptail --title "🧹 Очистка данных" \ + @CHOICE=$$(whiptail --title "Очистка данных" \ --menu "Выберите действие:" 15 50 8 \ - "all" "🧹 Очистить все" \ + "all" "Очистить все" \ "containers" "🐳 Очистить контейнеры" \ "images" "🖼️ Очистить образы" \ "volumes" "💾 Очистить тома" \ - "reports" "📊 Очистить отчеты" \ + "reports" "Очистить отчеты" \ "back" "⬅️ Назад" \ 3>&1 1>&2 2>&3); \ if [ $$? -ne 0 ] || [ "$$CHOICE" = "back" ]; then exit 0; fi; \ @@ -918,11 +918,11 @@ menu-cleanup: check-whiptail ## Меню очистки данных .PHONY: menu-interactive menu-interactive: check-whiptail ## Меню интерактивных команд - @CHOICE=$$(whiptail --title "🎯 Интерактивные команды" \ + @CHOICE=$$(whiptail --title "Интерактивные команды" \ --menu "Выберите действие:" 15 50 8 \ - "preset" "📋 Создать пресет" \ - "role" "🎭 Создать роль" \ - "playbook" "📝 Создать playbook" \ + "preset" "Создать пресет" \ + "role" "Создать роль" \ + "playbook" "Создать playbook" \ "back" "⬅️ Назад" \ 3>&1 1>&2 2>&3); \ if [ $$? -ne 0 ] || [ "$$CHOICE" = "back" ]; then exit 0; fi; \ @@ -934,12 +934,12 @@ menu-interactive: check-whiptail ## Меню интерактивных кома .PHONY: menu-docs menu-docs: check-whiptail ## Меню документации - @CHOICE=$$(whiptail --title "📚 Документация" \ + @CHOICE=$$(whiptail --title "Документация" \ --menu "Выберите действие:" 15 50 8 \ "readme" "📖 README" \ - "lab" "🧪 Универсальная лаборатория" \ - "presets" "📋 Пресеты" \ - "roles" "🎭 Роли" \ + "lab" "Универсальная лаборатория" \ + "presets" "Пресеты" \ + "roles" "Роли" \ "examples" "💡 Примеры" \ "api" "🔧 API Reference" \ "back" "⬅️ Назад" \ @@ -956,10 +956,10 @@ menu-docs: check-whiptail ## Меню документации .PHONY: menu-help menu-help: check-whiptail ## Меню помощи и справки - @CHOICE=$$(whiptail --title "❓ Помощь и справка" \ + @CHOICE=$$(whiptail --title "Помощь и справка" \ --menu "Выберите действие:" 15 50 8 \ - "overview" "📋 Обзор проекта" \ - "quickstart" "🚀 Быстрый старт" \ + "overview" "Обзор проекта" \ + "quickstart" "Быстрый старт" \ "commands" "⌨️ Список команд" \ "examples" "💡 Примеры использования" \ "troubleshooting" "🔧 Решение проблем" \ @@ -969,10 +969,10 @@ menu-help: check-whiptail ## Меню помощи и справки if [ $$? -ne 0 ] || [ "$$CHOICE" = "back" ]; then exit 0; fi; \ case "$$CHOICE" in \ "overview") \ - whiptail --title "📋 Обзор проекта" \ + whiptail --title "Обзор проекта" \ --msgbox "Ansible Template - Универсальная лаборатория для тестирования Ansible ролей и playbooks.\n\nОсновные возможности:\n• 🧪 Универсальная лаборатория с Docker\n• ☸️ Kubernetes кластеры (Kind)\n• 📋 Готовые пресеты для разных сценариев\n• 🎭 Управление Ansible ролями\n• 🔐 Безопасное хранение секретов\n• 📊 Генерация отчетов\n• 🎯 Интерактивные команды\n\nАвтор: $(AUTHOR)\nСайт: $(SITE)" 20 70;; \ "quickstart") \ - whiptail --title "🚀 Быстрый старт" \ + whiptail --title "Быстрый старт" \ --msgbox "Быстрый старт:\n\n1. Инициализация проекта:\n make init\n\n2. Запуск лаборатории:\n make lab up\n\n3. Создание роли:\n make role-create-interactive\n\n4. Создание пресета:\n make preset-create-interactive\n\n5. Генерация отчета:\n make report\n\nВсе команды доступны через интерактивное меню!" 20 70;; \ "commands") \ whiptail --title "Список команд" \ diff --git a/README.md b/README.md index 24bafa8..8841356 100644 --- a/README.md +++ b/README.md @@ -11,16 +11,18 @@ ### 🎯 Основные возможности -- **Динамическое создание инфраструктуры** - автоматическое развертывание Docker контейнеров и Kind кластеров -- **Поддержка различных ОС** - тестирование ролей на Debian и RHEL-подобных системах -- **Docker-in-Docker (DinD)** - изолированные Docker-среды внутри контейнеров -- **Docker-outside-of-Docker (DOoD)** - использование Docker-демона хоста из контейнера -- **Kubernetes кластеры** - полноценные Kind кластеры с аддонами -- **Service Mesh** - Istio с Kiali для визуализации -- **Мониторинг** - Prometheus, Grafana, Jaeger для полной наблюдаемости -- **21 готовый пресет** - от простых до экстремально сложных сценариев -- **HTML отчеты** - красивые отчеты о результатах тестирования -- **Снапшоты** - сохранение и восстановление состояния лаборатории +- **🎯 Интерактивный интерфейс** - полноценный TUI с whiptail для удобного управления +- **🚀 Автоматическая инициализация** - настройка проекта при первом запуске +- **🧪 Универсальная лаборатория** - автоматическое развертывание Docker контейнеров и Kind кластеров +- **☸️ Kubernetes поддержка** - полноценные Kind кластеры с аддонами +- **📋 21 готовый пресет** - от простых до экстремально сложных сценариев +- **🎭 Управление ролями** - интерактивное создание и тестирование Ansible ролей +- **🔐 Безопасность vault** - автоматическое управление секретами +- **📊 Красивые отчеты** - HTML отчеты о результатах тестирования +- **🔧 CI/CD команды** - автоматизированное тестирование, линтинг и развертывание +- **📸 Снапшоты** - сохранение и восстановление состояния лаборатории +- **🌐 Service Mesh** - Istio с Kiali для визуализации +- **📈 Мониторинг** - Prometheus, Grafana для полной наблюдаемости ## 🚀 Быстрый старт @@ -38,14 +40,15 @@ git clone https://github.com/your-username/ansible-template.git cd ansible-template -# Инициализировать проект (интерактивная настройка) -make init -# Команда запросит настройки проекта в интерактивном режиме: +# Запустить проект (автоматическая инициализация) +make +# При первом запуске автоматически запустится интерактивная настройка: # - Название проекта, версия, автор, сайт # - Настройки Docker (образ, сеть) # - Настройки лаборатории (сценарий, пресет) # - Настройки Kubernetes (контекст, версии Istio/Kind) # - Пути к папкам и файлам +# После настройки откроется главное меню # Установить pre-commit хуки (опционально) make pre-commit-install @@ -134,6 +137,58 @@ make restore # Восстановить снапшот make cleanup # Очистить лабораторию ``` +## 🎯 Новые возможности + +### Интерактивный интерфейс + +Проект теперь имеет полноценный TUI (Text User Interface) с whiptail: + +```bash +# Главное меню (запускается автоматически) +make + +# Интерактивные команды +make preset-create-interactive # Создание пресета через диалоги +make role-create-interactive # Создание роли через диалоги +``` + +### Автоматическая инициализация + +При первом запуске проекта автоматически запускается интерактивная настройка: + +- Настройка основных параметров проекта +- Конфигурация Docker и лаборатории +- Настройка Kubernetes и мониторинга +- Создание необходимых файлов и папок + +### CI/CD команды + +Полный набор команд для автоматизированного тестирования: + +```bash +# Основные CI/CD команды +make ci-validate # Валидация проекта +make ci-lint # Проверка синтаксиса +make ci-test # Запуск тестов +make ci-deploy # Развертывание +make ci-security # Проверка безопасности +make ci-report # Генерация отчета +make ci-cleanup # Очистка после тестов + +# Комбинированные команды +make ci-full # Полный цикл (lint + test + deploy) +make ci-all # Все проверки +``` + +### Управление ролями + +Интерактивное создание и управление Ansible ролями: + +- Автоматическое создание структуры роли +- Универсальные задачи для Debian и RHEL +- Создание handlers, defaults, meta файлов +- Интерактивная настройка параметров + ## 📚 Документация ### Основные разделы