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 "$@"
|