- Обновлено название проекта во всех файлах - Изменена документация (README.md, docs/*.md) - Обновлены конфигурационные файлы (Makefile, env.example) - Изменены CI/CD файлы (GitHub Actions, Azure DevOps, Jenkins) - Обновлены скрипты и Dockerfile - Изменено название в molecule.yml и dockerfiles/README.md Все ссылки и упоминания проекта теперь используют название AnsibleLab
240 lines
7.8 KiB
Bash
Executable File
240 lines
7.8 KiB
Bash
Executable File
#!/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: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"
|
||
"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: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"
|
||
;;
|
||
"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
|
||
"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 "$@"
|