Добавлена поддержка собственных образов для molecule тестирования
- Созданы пресеты для тестирования с собственными образами: - custom-minimal.yml - минимальный тест (4 хоста) - custom-images.yml - полный тест (все образы) - custom-performance.yml - тест производительности (8 хостов) - Обновлен molecule.yml для поддержки собственных образов - Добавлен скрипт test-custom-images.sh для автоматизации тестирования - Добавлены команды в Makefile: - make custom-images test [minimal|full|performance] - make custom-images check - проверка наличия образов - make custom-images build - сборка всех образов - Поддержка образов: ansible-controller, alt-linux, astra-linux, redos, rhel, centos, alma, rocky Автор: Сергей Антропов Сайт: https://devops.org.ru
This commit is contained in:
231
scripts/test-custom-images.sh
Executable file
231
scripts/test-custom-images.sh
Executable file
@@ -0,0 +1,231 @@
|
||||
#!/bin/bash
|
||||
# Скрипт для тестирования собственных образов AnsibleTemplate
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: 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:alt-linux-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"
|
||||
)
|
||||
|
||||
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:alt-linux-latest")
|
||||
echo " make docker build-image IMAGE=alt-linux"
|
||||
;;
|
||||
"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"
|
||||
;;
|
||||
*)
|
||||
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 "🚀 Тестирование собственных образов AnsibleTemplate"
|
||||
echo "=========================================="
|
||||
|
||||
# Проверки
|
||||
check_docker
|
||||
|
||||
if ! check_images; then
|
||||
error "Не все образы найдены. Завершение."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Выбор типа тестирования
|
||||
case "${1:-minimal}" in
|
||||
"minimal")
|
||||
test_minimal
|
||||
;;
|
||||
"full")
|
||||
test_full
|
||||
;;
|
||||
"performance")
|
||||
test_performance
|
||||
;;
|
||||
"all")
|
||||
test_minimal && test_full && test_performance
|
||||
;;
|
||||
*)
|
||||
echo "Использование: $0 [minimal|full|performance|all]"
|
||||
echo ""
|
||||
echo " minimal - минимальный тест (4 хоста)"
|
||||
echo " full - полный тест (все образы)"
|
||||
echo " performance - тест производительности (8 хостов)"
|
||||
echo " all - все тесты"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Очистка
|
||||
cleanup
|
||||
|
||||
success "🎉 Тестирование завершено успешно!"
|
||||
}
|
||||
|
||||
# Обработка сигналов
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
# Запуск
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user