Some checks failed
		
		
	
	Ansible Testing / lint (push) Has been cancelled
				
			Ansible Testing / test (default) (push) Has been cancelled
				
			Ansible Testing / test (minimal) (push) Has been cancelled
				
			Ansible Testing / test (performance) (push) Has been cancelled
				
			Ansible Testing / deploy-check (push) Has been cancelled
				
			Исправленные проблемы: - Makefile: убран лишний 'fi' после удаления test-standart.sh - role-manager.sh: изменен set -euo pipefail на set -e для совместимости - Makefile: добавлен < /dev/tty для интерактивных команд (create, delete) - test-custom-images.sh: добавлена поддержка команды 'check' Результат: - make role create теперь работает корректно - make role delete теперь работает корректно - make custom-images check теперь работает корректно - Все остальные скрипты протестированы и работают
		
			
				
	
	
		
			254 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			254 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | ||
| # Интерактивный менеджер ролей
 | ||
| # Автор: Сергей Антропов
 | ||
| # Сайт: https://devops.org.ru
 | ||
| 
 | ||
| set -e
 | ||
| 
 | ||
| # Цвета для вывода
 | ||
| RED='\033[0;31m'
 | ||
| GREEN='\033[0;32m'
 | ||
| YELLOW='\033[0;33m'
 | ||
| BLUE='\033[0;34m'
 | ||
| PURPLE='\033[0;35m'
 | ||
| CYAN='\033[0;36m'
 | ||
| WHITE='\033[0;37m'
 | ||
| RESET='\033[0m'
 | ||
| 
 | ||
| # Функция для вывода заголовков
 | ||
| print_header() {
 | ||
|     echo -e "${BLUE}==========================================${RESET}"
 | ||
|     echo -e "${BLUE}$1${RESET}"
 | ||
|     echo -e "${BLUE}==========================================${RESET}"
 | ||
| }
 | ||
| 
 | ||
| # Функция для вывода успеха
 | ||
| print_success() {
 | ||
|     echo -e "${GREEN}✅ $1${RESET}"
 | ||
| }
 | ||
| 
 | ||
| # Функция для вывода ошибки
 | ||
| print_error() {
 | ||
|     echo -e "${RED}❌ $1${RESET}"
 | ||
| }
 | ||
| 
 | ||
| # Функция для вывода предупреждения
 | ||
| print_warning() {
 | ||
|     echo -e "${YELLOW}⚠️  $1${RESET}"
 | ||
| }
 | ||
| 
 | ||
| # Функция для вывода информации
 | ||
| print_info() {
 | ||
|     echo -e "${CYAN}💡 $1${RESET}"
 | ||
| }
 | ||
| 
 | ||
| # Список всех ролей
 | ||
| list_roles() {
 | ||
|     print_header "📋 Список всех ролей"
 | ||
|     echo ""
 | ||
|     
 | ||
|     if [ -d "roles" ]; then
 | ||
|         ROLES=$(find roles/ -name 'main.yml' -path '*/tasks/*' | sed 's|roles/||; s|/tasks/main.yml||' | grep -v '^deploy$' | sort)
 | ||
|         if [ -n "$ROLES" ]; then
 | ||
|             echo "$ROLES" | sed 's/^/  - /'
 | ||
|             echo ""
 | ||
|             echo "📊 Всего ролей: $(echo "$ROLES" | wc -l)"
 | ||
|         else
 | ||
|             print_warning "Роли не найдены"
 | ||
|         fi
 | ||
|     else
 | ||
|         print_error "Директория roles/ не найдена"
 | ||
|     fi
 | ||
| }
 | ||
| 
 | ||
| # Создание новой роли
 | ||
| create_role() {
 | ||
|     print_header "➕ Создание новой роли"
 | ||
|     echo ""
 | ||
|     
 | ||
|     read -p "Введите имя роли: " ROLE_NAME
 | ||
|     if [ -z "$ROLE_NAME" ]; then
 | ||
|         print_error "Имя роли не может быть пустым"
 | ||
|         exit 1
 | ||
|     fi
 | ||
|     
 | ||
|     if [ -d "roles/$ROLE_NAME" ]; then
 | ||
|         print_error "Роль '$ROLE_NAME' уже существует"
 | ||
|         exit 1
 | ||
|     fi
 | ||
|     
 | ||
|     echo "📁 Создание структуры роли '$ROLE_NAME'..."
 | ||
|     mkdir -p "roles/$ROLE_NAME"/{tasks,handlers,templates,files,vars,defaults,meta}
 | ||
|     
 | ||
|     echo "📝 Создание файлов..."
 | ||
|     
 | ||
|     # tasks/main.yml
 | ||
|     cat > "roles/$ROLE_NAME/tasks/main.yml" << EOF
 | ||
| ---
 | ||
| # Задачи для роли $ROLE_NAME
 | ||
| # Автор: Сергей Антропов
 | ||
| # Сайт: https://devops.org.ru
 | ||
| 
 | ||
| - name: Пример задачи
 | ||
|   debug:
 | ||
|     msg: "Роль $ROLE_NAME выполнена"
 | ||
| EOF
 | ||
| 
 | ||
|     # defaults/main.yml
 | ||
|     cat > "roles/$ROLE_NAME/defaults/main.yml" << EOF
 | ||
| ---
 | ||
| # Переменные по умолчанию для роли $ROLE_NAME
 | ||
| # Автор: Сергей Антропов
 | ||
| # Сайт: https://devops.org.ru
 | ||
| EOF
 | ||
| 
 | ||
|     # handlers/main.yml
 | ||
|     cat > "roles/$ROLE_NAME/handlers/main.yml" << EOF
 | ||
| ---
 | ||
| # Обработчики для роли $ROLE_NAME
 | ||
| # Автор: Сергей Антропов
 | ||
| # Сайт: https://devops.org.ru
 | ||
| EOF
 | ||
| 
 | ||
|     # meta/main.yml
 | ||
|     cat > "roles/$ROLE_NAME/meta/main.yml" << EOF
 | ||
| ---
 | ||
| galaxy_info:
 | ||
|   author: Сергей Антропов
 | ||
|   description: Роль $ROLE_NAME
 | ||
|   company: https://devops.org.ru
 | ||
|   license: MIT
 | ||
|   min_ansible_version: "2.9"
 | ||
|   platforms:
 | ||
|     - name: Ubuntu
 | ||
|       versions:
 | ||
|         - focal
 | ||
|         - jammy
 | ||
|     - name: Debian
 | ||
|       versions:
 | ||
|         - bullseye
 | ||
|         - bookworm
 | ||
|     - name: RHEL
 | ||
|       versions:
 | ||
|         - "8"
 | ||
|         - "9"
 | ||
|     - name: CentOS
 | ||
|       versions:
 | ||
|         - "8"
 | ||
|         - "9"
 | ||
|   galaxy_tags:
 | ||
|     - $ROLE_NAME
 | ||
| EOF
 | ||
| 
 | ||
|     # README.md
 | ||
|     cat > "roles/$ROLE_NAME/README.md" << EOF
 | ||
| # Роль $ROLE_NAME
 | ||
| 
 | ||
| ## Описание
 | ||
| 
 | ||
| Роль для ...
 | ||
| 
 | ||
| ## Переменные
 | ||
| 
 | ||
| | Переменная | По умолчанию | Описание |
 | ||
| |------------|--------------|----------|
 | ||
| | | | |
 | ||
| 
 | ||
| ## Примеры использования
 | ||
| 
 | ||
| \`\`\`yaml
 | ||
| - hosts: all
 | ||
|   roles:
 | ||
|     - $ROLE_NAME
 | ||
| \`\`\`
 | ||
| 
 | ||
| ## Автор
 | ||
| 
 | ||
| Сергей Антропов - https://devops.org.ru
 | ||
| EOF
 | ||
| 
 | ||
|     echo "🔄 Обновление roles/deploy.yml..."
 | ||
|     ./scripts/update-playbooks.sh
 | ||
|     
 | ||
|     print_success "Роль '$ROLE_NAME' создана и добавлена в deploy.yml"
 | ||
|     echo ""
 | ||
|     echo "📁 Структура создана:"
 | ||
|     echo "  roles/$ROLE_NAME/"
 | ||
|     echo "  ├── tasks/main.yml"
 | ||
|     echo "  ├── defaults/main.yml"
 | ||
|     echo "  ├── handlers/main.yml"
 | ||
|     echo "  ├── meta/main.yml"
 | ||
|     echo "  └── README.md"
 | ||
|     echo ""
 | ||
|     print_info "Следующие шаги:"
 | ||
|     echo "  1. Отредактируйте tasks/main.yml"
 | ||
|     echo "  2. Добавьте переменные в defaults/main.yml"
 | ||
|     echo "  3. Протестируйте: make role test"
 | ||
| }
 | ||
| 
 | ||
| # Удаление роли
 | ||
| delete_role() {
 | ||
|     print_header "🗑️  Удаление роли"
 | ||
|     echo ""
 | ||
|     
 | ||
|     echo "📋 Доступные роли:"
 | ||
|     ROLES=$(find roles/ -name 'main.yml' -path '*/tasks/*' | sed 's|roles/||; s|/tasks/main.yml||' | grep -v '^deploy$' | sort)
 | ||
|     if [ -n "$ROLES" ]; then
 | ||
|         echo "$ROLES" | sed 's/^/  - /'
 | ||
|         echo ""
 | ||
|         read -p "Введите имя роли для удаления: " ROLE_NAME
 | ||
|         if [ -z "$ROLE_NAME" ]; then
 | ||
|             print_error "Имя роли не может быть пустым"
 | ||
|             exit 1
 | ||
|         fi
 | ||
|         
 | ||
|         if [ ! -d "roles/$ROLE_NAME" ]; then
 | ||
|             print_error "Роль '$ROLE_NAME' не найдена"
 | ||
|             exit 1
 | ||
|         fi
 | ||
|         
 | ||
|         print_warning "Вы уверены, что хотите удалить роль '$ROLE_NAME'?"
 | ||
|         read -p "Введите 'yes' для подтверждения: " CONFIRM
 | ||
|         if [ "$CONFIRM" = "yes" ]; then
 | ||
|             echo "🗑️  Удаление роли '$ROLE_NAME'..."
 | ||
|             rm -rf "roles/$ROLE_NAME"
 | ||
|             echo "🔄 Обновление roles/deploy.yml..."
 | ||
|             ./scripts/update-playbooks.sh
 | ||
|             print_success "Роль '$ROLE_NAME' удалена и убрана из deploy.yml"
 | ||
|         else
 | ||
|             print_error "Удаление отменено"
 | ||
|         fi
 | ||
|     else
 | ||
|         print_warning "Роли не найдены"
 | ||
|     fi
 | ||
| }
 | ||
| 
 | ||
| # Главное меню
 | ||
| main() {
 | ||
|     case "${1:-}" in
 | ||
|         list)
 | ||
|             list_roles
 | ||
|             ;;
 | ||
|         create)
 | ||
|             create_role
 | ||
|             ;;
 | ||
|         delete)
 | ||
|             delete_role
 | ||
|             ;;
 | ||
|         *)
 | ||
|             echo "🎯 Доступные команды:"
 | ||
|             echo ""
 | ||
|             echo "  📋 ./scripts/role-manager.sh list    - показать все роли"
 | ||
|             echo "  ➕ ./scripts/role-manager.sh create  - создать новую роль"
 | ||
|             echo "  🗑️  ./scripts/role-manager.sh delete  - удалить роль"
 | ||
|             echo ""
 | ||
|             echo "💡 Или используйте:"
 | ||
|             echo "  make role list"
 | ||
|             echo "  make role create"
 | ||
|             echo "  make role delete"
 | ||
|             ;;
 | ||
|     esac
 | ||
| }
 | ||
| 
 | ||
| main "$@"
 |