Добавлена поддержка собственных образов для 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:
Сергей Антропов
2025-10-25 15:46:05 +03:00
parent d8fa474522
commit 3b2533c8ee
6 changed files with 612 additions and 0 deletions

231
scripts/test-custom-images.sh Executable file
View 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 "$@"