Files
DevOpsLab/scripts/role-manager.sh
Сергей Антропов 5093d38c06
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
fix: Исправление ошибок в скриптах
Исправленные проблемы:
- 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 теперь работает корректно
- Все остальные скрипты протестированы и работают
2025-10-25 19:41:21 +03:00

254 lines
6.9 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 "$@"