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 - документация роли
This commit is contained in:
26
Makefile
26
Makefile
@@ -40,7 +40,7 @@ DOCKER_BUILDX_BUILDER ?= multiarch-builder
|
||||
# Базовые образы и их теги
|
||||
BASE_IMAGES := altlinux/p9 astralinux/astra-1.7 redos/redos:9 registry.access.redhat.com/ubi8/ubi quay.io/centos/centos:stream9 almalinux:8 rockylinux:8
|
||||
|
||||
.PHONY: role vault git docker presets controller help update-playbooks generate-docs setup-cicd
|
||||
.PHONY: role vault git docker presets controller help update-playbooks generate-docs setup-cicd list create delete
|
||||
|
||||
# =============================================================================
|
||||
# КОМАНДЫ ДЛЯ РАБОТЫ С РОЛЯМИ
|
||||
@@ -109,6 +109,12 @@ role:
|
||||
else \
|
||||
echo "❌ Развертывание отменено"; \
|
||||
fi;; \
|
||||
list) \
|
||||
./scripts/role-manager.sh list;; \
|
||||
create) \
|
||||
./scripts/role-manager.sh create;; \
|
||||
delete) \
|
||||
./scripts/role-manager.sh delete;; \
|
||||
*) \
|
||||
echo "🎯 Доступные команды:"; \
|
||||
echo ""; \
|
||||
@@ -123,7 +129,20 @@ role:
|
||||
echo " 💡 Требует: inventory/hosts.ini"; \
|
||||
echo ""; \
|
||||
echo " 🔍 make role lint - проверить синтаксис ролей"; \
|
||||
echo " 💡 Использует: ansible-lint";; \
|
||||
echo " 💡 Использует: ansible-lint"; \
|
||||
echo ""; \
|
||||
echo " 📋 make role list - показать все роли"; \
|
||||
echo " 💡 Показывает: список всех ролей в roles/"; \
|
||||
echo ""; \
|
||||
echo " ➕ make role create - создать новую роль"; \
|
||||
echo " 💡 Интерактивно: запрашивает имя роли"; \
|
||||
echo " 💡 Создает: структуру папок и файлов"; \
|
||||
echo " 💡 Обновляет: roles/deploy.yml"; \
|
||||
echo ""; \
|
||||
echo " 🗑️ make role delete - удалить роль"; \
|
||||
echo " 💡 Интерактивно: запрашивает имя роли"; \
|
||||
echo " 💡 Удаляет: папку роли и файлы"; \
|
||||
echo " 💡 Обновляет: roles/deploy.yml";; \
|
||||
esac
|
||||
|
||||
# =============================================================================
|
||||
@@ -914,6 +933,9 @@ help:
|
||||
@echo " make role lint - проверить синтаксис ролей"
|
||||
@echo " make role test [preset] - протестировать роли с preset'ом"
|
||||
@echo " make role deploy - развернуть роли на реальные серверы"
|
||||
@echo " make role list - показать все роли"
|
||||
@echo " make role create - создать новую роль (интерактивно)"
|
||||
@echo " make role delete - удалить роль (интерактивно)"
|
||||
@echo ""
|
||||
@echo "📋 PRESET'Ы (тестовые окружения):"
|
||||
@echo " make presets list - показать все доступные preset'ы"
|
||||
|
||||
253
scripts/role-manager.sh
Executable file
253
scripts/role-manager.sh
Executable file
@@ -0,0 +1,253 @@
|
||||
#!/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 "$@"
|
||||
Reference in New Issue
Block a user