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
|
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 \
|
else \
|
||||||
echo "❌ Развертывание отменено"; \
|
echo "❌ Развертывание отменено"; \
|
||||||
fi;; \
|
fi;; \
|
||||||
|
list) \
|
||||||
|
./scripts/role-manager.sh list;; \
|
||||||
|
create) \
|
||||||
|
./scripts/role-manager.sh create;; \
|
||||||
|
delete) \
|
||||||
|
./scripts/role-manager.sh delete;; \
|
||||||
*) \
|
*) \
|
||||||
echo "🎯 Доступные команды:"; \
|
echo "🎯 Доступные команды:"; \
|
||||||
echo ""; \
|
echo ""; \
|
||||||
@@ -123,7 +129,20 @@ role:
|
|||||||
echo " 💡 Требует: inventory/hosts.ini"; \
|
echo " 💡 Требует: inventory/hosts.ini"; \
|
||||||
echo ""; \
|
echo ""; \
|
||||||
echo " 🔍 make role lint - проверить синтаксис ролей"; \
|
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
|
esac
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
@@ -914,6 +933,9 @@ help:
|
|||||||
@echo " make role lint - проверить синтаксис ролей"
|
@echo " make role lint - проверить синтаксис ролей"
|
||||||
@echo " make role test [preset] - протестировать роли с preset'ом"
|
@echo " make role test [preset] - протестировать роли с preset'ом"
|
||||||
@echo " make role deploy - развернуть роли на реальные серверы"
|
@echo " make role deploy - развернуть роли на реальные серверы"
|
||||||
|
@echo " make role list - показать все роли"
|
||||||
|
@echo " make role create - создать новую роль (интерактивно)"
|
||||||
|
@echo " make role delete - удалить роль (интерактивно)"
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo "📋 PRESET'Ы (тестовые окружения):"
|
@echo "📋 PRESET'Ы (тестовые окружения):"
|
||||||
@echo " make presets list - показать все доступные 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