feat: улучшения роли devops и тестирования

- Убрана подстановка значений по умолчанию для devops_password и devops_ssh_public_key
- Добавлена строгая валидация секретов из vault/secrets.yml с детальными сообщениями об ошибках
- Убран подробный вывод установки пакетов в тасках
- Исправлена проблема с созданием симлинков в vault/ при тестировании
- Обновлена логика загрузки vault переменных в molecule тестах
- Добавлена очистка симлинков в destroy.yml для дополнительной безопасности

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
Сергей Антропов
2025-10-29 18:53:52 +03:00
parent f6d1182193
commit cb5045fb79
23 changed files with 821 additions and 679 deletions

View File

@@ -1,243 +0,0 @@
#!/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 "$@"

View File

@@ -12,10 +12,10 @@ ROLES=$(find roles/ -name 'main.yml' -path '*/tasks/*' | sed 's|roles/||; s|/tas
echo "📋 Найденные роли: $ROLES"
# Обновляем molecule/default/site.yml (только если файл не существует)
if [ ! -f "molecule/default/site.yml" ]; then
echo "📝 Создание molecule/default/site.yml..."
cat > molecule/default/site.yml << 'EOF'
# Обновляем molecule/default/run.yml (только если файл не существует)
if [ ! -f "molecule/default/run.yml" ]; then
echo "📝 Создание molecule/default/run.yml..."
cat > molecule/default/run.yml << 'EOF'
---
# Универсальный playbook для тестирования Ansible ролей
# Автор: Сергей Антропов
@@ -199,7 +199,7 @@ if [ ! -f "molecule/default/site.yml" ]; then
- import_playbook: ../../roles/deploy.yml
EOF
else
echo "📝 Файл molecule/default/site.yml уже существует, пропускаем создание"
echo "📝 Файл molecule/default/run.yml уже существует, пропускаем создание"
fi
# Обновляем roles/deploy.yml