Files
DevOpsLab/scripts/role-manager.sh
Сергей Антропов e98bfa9c1f feat: Добавлены интерактивные команды для управления ролями
- Добавлен скрипт scripts/role-manager.sh для управления ролями
- Добавлены команды make role list, create, delete
- Автоматическое создание структуры ролей (tasks, handlers, defaults, meta, README)
- Автоматическое обновление roles/deploy.yml при создании/удалении ролей
- Интерактивный интерфейс с подтверждением удаления
- Цветной вывод с эмодзи для лучшего UX

Команды:
- make role list    - показать все роли
- make role create  - создать новую роль (интерактивно)
- make role delete  - удалить роль (интерактивно)

Скрипт создает полную структуру роли:
- tasks/main.yml - основные задачи
- defaults/main.yml - переменные по умолчанию
- handlers/main.yml - обработчики
- meta/main.yml - метаданные для Ansible Galaxy
- README.md - документация роли
2025-10-25 19:19:06 +03:00

254 lines
7.0 KiB
Bash
Executable File
Raw 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 -euo pipefail
# Цвета для вывода
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 "$@"