244 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			244 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | ||
| # Скрипт для тестирования собственных образов DevOpsLab
 | ||
| # Автор: Сергей Антропов
 | ||
| # Сайт: https://devops.org.ru
 | ||
| 
 | ||
| set -e
 | ||
| 
 | ||
| # Цвета для вывода
 | ||
| RED='\033[0;31m'
 | ||
| GREEN='\033[0;32m'
 | ||
| YELLOW='\033[1;33m'
 | ||
| BLUE='\033[0;34m'
 | ||
| NC='\033[0m' # No Color
 | ||
| 
 | ||
| # Функция для вывода сообщений
 | ||
| log() {
 | ||
|     echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1"
 | ||
| }
 | ||
| 
 | ||
| success() {
 | ||
|     echo -e "${GREEN}✅ $1${NC}"
 | ||
| }
 | ||
| 
 | ||
| warning() {
 | ||
|     echo -e "${YELLOW}⚠️  $1${NC}"
 | ||
| }
 | ||
| 
 | ||
| error() {
 | ||
|     echo -e "${RED}❌ $1${NC}"
 | ||
| }
 | ||
| 
 | ||
| # Проверка наличия Docker
 | ||
| check_docker() {
 | ||
|     log "Проверка Docker..."
 | ||
|     if ! command -v docker &> /dev/null; then
 | ||
|         error "Docker не установлен!"
 | ||
|         exit 1
 | ||
|     fi
 | ||
|     success "Docker доступен"
 | ||
| }
 | ||
| 
 | ||
| # Проверка наличия образов
 | ||
| check_images() {
 | ||
|     log "Проверка наличия собственных образов..."
 | ||
|     
 | ||
|     local images=(
 | ||
|         "inecs/ansible-lab:ansible-controller-latest"
 | ||
|         "inecs/ansible-lab:alt9-latest"
 | ||
|         "inecs/ansible-lab:astra-linux-latest"
 | ||
|         "inecs/ansible-lab:redos-latest"
 | ||
|         "inecs/ansible-lab:rhel-latest"
 | ||
|         "inecs/ansible-lab:centos-latest"
 | ||
|         "inecs/ansible-lab:alma-latest"
 | ||
|         "inecs/ansible-lab:rocky-latest"
 | ||
|         "inecs/ansible-lab:ubuntu-latest"
 | ||
|         "inecs/ansible-lab:debian-latest"
 | ||
|     )
 | ||
|     
 | ||
|     local missing_images=()
 | ||
|     
 | ||
|     for image in "${images[@]}"; do
 | ||
|         if ! docker image inspect "$image" &> /dev/null; then
 | ||
|             missing_images+=("$image")
 | ||
|         else
 | ||
|             success "Образ $image найден"
 | ||
|         fi
 | ||
|     done
 | ||
|     
 | ||
|     if [ ${#missing_images[@]} -gt 0 ]; then
 | ||
|         warning "Отсутствующие образы:"
 | ||
|         for image in "${missing_images[@]}"; do
 | ||
|             echo "  - $image"
 | ||
|         done
 | ||
|         echo ""
 | ||
|         echo "Для сборки образов выполните:"
 | ||
|         echo "  make docker build"
 | ||
|         echo ""
 | ||
|         echo "Или соберите отдельные образы:"
 | ||
|         for image in "${missing_images[@]}"; do
 | ||
|             # Маппинг образов на имена для сборки
 | ||
|             case "$image" in
 | ||
|                 "inecs/ansible-lab:ansible-controller-latest")
 | ||
|                     echo "  make docker build-image IMAGE=ansible-controller"
 | ||
|                     ;;
 | ||
|                 "inecs/ansible-lab:alt9-latest")
 | ||
|                     echo "  make docker build-image IMAGE=alt9"
 | ||
|                     ;;
 | ||
|                 "inecs/ansible-lab:astra-linux-latest")
 | ||
|                     echo "  make docker build-image IMAGE=astra-linux"
 | ||
|                     ;;
 | ||
|                 "inecs/ansible-lab:redos-latest")
 | ||
|                     echo "  make docker build-image IMAGE=redos"
 | ||
|                     ;;
 | ||
|                 "inecs/ansible-lab:rhel-latest")
 | ||
|                     echo "  make docker build-image IMAGE=rhel"
 | ||
|                     ;;
 | ||
|                 "inecs/ansible-lab:centos-latest")
 | ||
|                     echo "  make docker build-image IMAGE=centos"
 | ||
|                     ;;
 | ||
|                 "inecs/ansible-lab:alma-latest")
 | ||
|                     echo "  make docker build-image IMAGE=alma"
 | ||
|                     ;;
 | ||
|                 "inecs/ansible-lab:rocky-latest")
 | ||
|                     echo "  make docker build-image IMAGE=rocky"
 | ||
|                     ;;
 | ||
|                 "inecs/ansible-lab:ubuntu-latest")
 | ||
|                     echo "  make docker build-image IMAGE=ubuntu"
 | ||
|                     ;;
 | ||
|                 "inecs/ansible-lab:debian-latest")
 | ||
|                     echo "  make docker build-image IMAGE=debian"
 | ||
|                     ;;
 | ||
|                 *)
 | ||
|                     echo "  # Неизвестный образ: $image"
 | ||
|                     ;;
 | ||
|             esac
 | ||
|         done
 | ||
|         return 1
 | ||
|     fi
 | ||
|     
 | ||
|     success "Все образы найдены"
 | ||
|     return 0
 | ||
| }
 | ||
| 
 | ||
| # Тестирование с минимальным пресетом
 | ||
| test_minimal() {
 | ||
|     log "Тестирование с минимальным пресетом (custom-minimal)..."
 | ||
|     
 | ||
|     if [ -f "molecule/presets/custom-minimal.yml" ]; then
 | ||
|         log "Запуск molecule test с пресетом custom-minimal..."
 | ||
|         if molecule test --scenario-name custom-minimal; then
 | ||
|             success "Тест с custom-minimal прошел успешно"
 | ||
|         else
 | ||
|             error "Тест с custom-minimal завершился с ошибкой"
 | ||
|             return 1
 | ||
|         fi
 | ||
|     else
 | ||
|         error "Файл molecule/presets/custom-minimal.yml не найден"
 | ||
|         return 1
 | ||
|     fi
 | ||
| }
 | ||
| 
 | ||
| # Тестирование с полным пресетом
 | ||
| test_full() {
 | ||
|     log "Тестирование с полным пресетом (custom-images)..."
 | ||
|     
 | ||
|     if [ -f "molecule/presets/custom-images.yml" ]; then
 | ||
|         log "Запуск molecule test с пресетом custom-images..."
 | ||
|         if molecule test --scenario-name custom-images; then
 | ||
|             success "Тест с custom-images прошел успешно"
 | ||
|         else
 | ||
|             error "Тест с custom-images завершился с ошибкой"
 | ||
|             return 1
 | ||
|         fi
 | ||
|     else
 | ||
|         error "Файл molecule/presets/custom-images.yml не найден"
 | ||
|         return 1
 | ||
|     fi
 | ||
| }
 | ||
| 
 | ||
| # Тестирование производительности
 | ||
| test_performance() {
 | ||
|     log "Тестирование производительности (custom-performance)..."
 | ||
|     
 | ||
|     if [ -f "molecule/presets/custom-performance.yml" ]; then
 | ||
|         log "Запуск molecule test с пресетом custom-performance..."
 | ||
|         if molecule test --scenario-name custom-performance; then
 | ||
|             success "Тест производительности прошел успешно"
 | ||
|         else
 | ||
|             error "Тест производительности завершился с ошибкой"
 | ||
|             return 1
 | ||
|         fi
 | ||
|     else
 | ||
|         error "Файл molecule/presets/custom-performance.yml не найден"
 | ||
|         return 1
 | ||
|     fi
 | ||
| }
 | ||
| 
 | ||
| # Очистка после тестов
 | ||
| cleanup() {
 | ||
|     log "Очистка после тестов..."
 | ||
|     
 | ||
|     # Остановка и удаление контейнеров
 | ||
|     docker ps -a --filter "name=molecule" --format "{{.Names}}" | xargs -r docker rm -f 2>/dev/null || true
 | ||
|     
 | ||
|     # Удаление сетей
 | ||
|     docker network ls --filter "name=ansible-lab" --format "{{.Name}}" | xargs -r docker network rm 2>/dev/null || true
 | ||
|     
 | ||
|     success "Очистка завершена"
 | ||
| }
 | ||
| 
 | ||
| # Основная функция
 | ||
| main() {
 | ||
|     log "🚀 Тестирование собственных образов DevOpsLab"
 | ||
|     echo "=========================================="
 | ||
|     
 | ||
|     # Проверки
 | ||
|     check_docker
 | ||
|     
 | ||
|     if ! check_images; then
 | ||
|         error "Не все образы найдены. Завершение."
 | ||
|         exit 1
 | ||
|     fi
 | ||
|     
 | ||
|     # Выбор типа тестирования
 | ||
|     case "${1:-minimal}" in
 | ||
|         "check")
 | ||
|             success "Проверка образов завершена"
 | ||
|             ;;
 | ||
|         "minimal")
 | ||
|             test_minimal
 | ||
|             ;;
 | ||
|         "full")
 | ||
|             test_full
 | ||
|             ;;
 | ||
|         "performance")
 | ||
|             test_performance
 | ||
|             ;;
 | ||
|         "all")
 | ||
|             test_minimal && test_full && test_performance
 | ||
|             ;;
 | ||
|         *)
 | ||
|             echo "Использование: $0 [check|minimal|full|performance|all]"
 | ||
|             echo ""
 | ||
|             echo "  check       - проверка наличия образов"
 | ||
|             echo "  minimal     - минимальный тест (4 хоста)"
 | ||
|             echo "  full        - полный тест (все образы)"
 | ||
|             echo "  performance - тест производительности (8 хостов)"
 | ||
|             echo "  all         - все тесты"
 | ||
|             exit 1
 | ||
|             ;;
 | ||
|     esac
 | ||
|     
 | ||
|     # Очистка
 | ||
|     cleanup
 | ||
|     
 | ||
|     success "🎉 Тестирование завершено успешно!"
 | ||
| }
 | ||
| 
 | ||
| # Обработка сигналов
 | ||
| trap cleanup EXIT INT TERM
 | ||
| 
 | ||
| # Запуск
 | ||
| main "$@"
 |