Files
DevOpsLab/scripts/test-custom-images.sh
2025-10-27 09:57:01 +03:00

244 lines
8.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
# Скрипт для тестирования собственных образов AnsibleLab
# Автор: Сергей Антропов
# Сайт: 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 "🚀 Тестирование собственных образов AnsibleLab"
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 "$@"