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

111
Makefile
View File

@@ -91,7 +91,27 @@ role:
-e MOLECULE_EPHEMERAL_DIRECTORY=/tmp/molecule_workspace \
-e MOLECULE_VAULT_ENABLED=$${MOLECULE_VAULT_ENABLED:-false} \
$(DOCKER_IMAGE) \
bash -c "mkdir -p /tmp/molecule_workspace/inventory && cd molecule/default && ansible-playbook -i localhost, create.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace && ansible-playbook -i localhost, converge.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace && ansible-playbook -i /tmp/molecule_workspace/inventory/hosts.ini site.yml; ansible-playbook -i localhost, destroy.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace; echo '✅ Тестирование завершено'";; \
bash -c " \
echo '=== СОЗДАНИЕ ТЕСТОВЫХ КОНТЕЙНЕРОВ ==='; \
mkdir -p /tmp/molecule_workspace/inventory && \
cd molecule/default && \
ansible-playbook -i localhost, create.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace && \
echo ''; \
echo '=== НАСТРОЙКА VAULT И ПЕРЕМЕННЫХ ==='; \
ansible-playbook -i localhost, converge.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace && \
echo ''; \
echo '=== ПРОВЕРКА ПОДКЛЮЧЕНИЯ К КОНТЕЙНЕРАМ ==='; \
ansible all -i /tmp/molecule_workspace/inventory/hosts.ini -m ping && \
echo ''; \
echo '=== ЗАПУСК RUN.YML НА ТЕСТОВЫХ КОНТЕЙНЕРАХ ==='; \
ansible-playbook -i /tmp/molecule_workspace/inventory/hosts.ini run.yml -v -e vault_devops_password="123123" -e vault_devops_ssh_public_key="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDBjzRt/b5Xe/tgQS2rvOBXOSBq1hychcnbz6G4m9Ps6hQXCxLA0hcrzPIRGazeWEslqsBynSm4fVJC6zAnExEd7KsNxS5gsMxmcHsghuU6/IA62tP8w8tXKEWaCGMQyfcUO/MIrdEjAg8txl3FIxdlcYwBTLW9nJggOmUn9w1YOA6ECNBDUbTwZC62yomJhQoAK0W+uVkKSLTqRIvd0oZJEF+0dtzBrhhe7cjR6fuoLpkB1/Q9bQImVfAxEiiExhFWFMxcyf4SGxpmsbKI4rJ3eBvsMmhrX76p1bYX4fKGiBaqNyXqThYWYybXfDfaITQR87SIrVt4U4NzS79ZFfQ142VPs+YISiy/+/VKZ1NjHo1fRZJSqBtsWJCsvtuM6C2+dRZ0JqwwMlHKLNhmerYMLJMQxkxdB5jRxafC+3T0aFNIsFIa7MdC8i3WQBk5z5huY5pslkPWnmKTfCi3gLjWNhfW9xEgKAww6hGrZR/zlQXZQrmQ2LGspzXFngd9tmk= linux@key" && \
echo ''; \
echo '=== ЗАПУСК ROLES/DEPLOY.YML НА ТЕСТОВЫХ КОНТЕЙНЕРАХ ==='; \
ansible-playbook -i /tmp/molecule_workspace/inventory/hosts.ini ../../roles/deploy.yml -v -e vault_devops_password="123123" -e vault_devops_ssh_public_key="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDBjzRt/b5Xe/tgQS2rvOBXOSBq1hychcnbz6G4m9Ps6hQXCxLA0hcrzPIRGazeWEslqsBynSm4fVJC6zAnExEd7KsNxS5gsMxmcHsghuU6/IA62tP8w8tXKEWaCGMQyfcUO/MIrdEjAg8txl3FIxdlcYwBTLW9nJggOmUn9w1YOA6ECNBDUbTwZC62yomJhQoAK0W+uVkKSLTqRIvd0oZJEF+0dtzBrhhe7cjR6fuoLpkB1/Q9bQImVfAxEiiExhFWFMxcyf4SGxpmsbKI4rJ3eBvsMmhrX76p1bYX4fKGiBaqNyXqThYWYybXfDfaITQR87SIrVt4U4NzS79ZFfQ142VPs+YISiy/+/VKZ1NjHo1fRZJSqBtsWJCsvtuM6C2+dRZ0JqwwMlHKLNhmerYMLJMQxkxdB5jRxafC+3T0aFNIsFIa7MdC8i3WQBk5z5huY5pslkPWnmKTfCi3gLjWNhfW9xEgKAww6hGrZR/zlQXZQrmQ2LGspzXFngd9tmk= linux@key" && \
echo ''; \
echo '=== ОЧИСТКА РЕСУРСОВ ==='; \
ansible-playbook -i localhost, destroy.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace && \
echo '✅ Тестирование завершено'";; \
deploy) \
echo "🚀 Развертывание ролей на реальные серверы..."; \
echo ""; \
@@ -223,26 +243,6 @@ presets:
echo ""; \
echo "🐳 Образы:"; \
grep -E "^- " "molecule/presets/$(PRESET).yml" | grep -E "family:" | sed 's/.*family: / - /' || echo "Образы не найдены";; \
test) \
if [ -z "$(PRESET)" ]; then \
echo "❌ Ошибка: Укажите PRESET=имя_пресета"; \
echo "💡 Пример: make presets test PRESET=etcd-patroni"; \
exit 1; \
fi; \
if [ ! -f "molecule/presets/$(PRESET).yml" ]; then \
echo "❌ Ошибка: Пресет '$(PRESET)' не найден!"; \
echo "💡 Доступные пресеты:"; \
make presets list; \
exit 1; \
fi; \
echo "🚀 Тестирование с пресетом: $(PRESET)"; \
echo ""; \
docker run --rm --name $(CONTAINER_NAME) -v "$(PWD):/workspace" -w /workspace \
-v /var/run/docker.sock:/var/run/docker.sock \
-e ANSIBLE_FORCE_COLOR=1 \
-e MOLECULE_PRESET=$(PRESET) \
$(DOCKER_IMAGE) \
bash -c "cd molecule/default && molecule test" || echo "✅ Тестирование завершено";; \
*) \
echo "🎯 Доступные команды:"; \
echo ""; \
@@ -253,15 +253,9 @@ presets:
echo " 💡 Показывает: описание, хосты, сеть, образы"; \
echo " 💡 Требует: PRESET=имя_пресета"; \
echo ""; \
echo " 🚀 make presets test - запустить тест с preset'ом"; \
echo " 💡 Запускает: molecule test с выбранным preset'ом"; \
echo " 💡 Требует: PRESET=имя_пресета"; \
echo ""; \
echo "💡 Примеры:"; \
echo " make presets list # показать все preset'ы"; \
echo " make presets info PRESET=etcd-patroni # информация о etcd-patroni"; \
echo " make presets test PRESET=minimal # тест с minimal preset"; \
echo " make presets test PRESET=performance # тест с performance preset";; \
echo " make presets info PRESET=etcd-patroni # информация о etcd-patroni";; \
esac
# =============================================================================
@@ -1571,12 +1565,6 @@ help:
@echo "📋 PRESET'Ы (тестовые окружения):"
@echo " make presets list - показать все доступные preset'ы"
@echo " make presets info - подробная информация о preset'е"
@echo " make presets test - запустить тест с preset'ом"
@echo ""
@echo "🖼️ СОБСТВЕННЫЕ ОБРАЗЫ (DevOpsLab):"
@echo " make custom-images test [minimal|full|performance] - тест с собственными образами"
@echo " make custom-images check - проверить наличие собственных образов"
@echo " make custom-images build - собрать все образы для тестирования"
@echo ""
@echo "🐳 DOCKER ОБРАЗЫ (Multi-Arch):"
@echo " make docker prepare - подготовка к работе с Docker Hub"
@@ -1641,7 +1629,6 @@ help:
@echo ""
@echo "💡 ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ:"
@echo " make presets list # показать все preset'ы"
@echo " make presets test PRESET=etcd-patroni # тест с etcd-patroni"
@echo " make role test minimal # быстрый тест"
@echo " make role test all-images # тест всех образов"
@echo " make docker setup-builder # настройка multi-arch builder"
@@ -1658,60 +1645,6 @@ help:
@echo "📖 Подробная справка: make [команда]"
@echo "=========================================="
# =============================================================================
# КОМАНДЫ ДЛЯ РАБОТЫ С СОБСТВЕННЫМИ ОБРАЗАМИ
# =============================================================================
custom-images:
@case "$(word 2, $(MAKECMDGOALS))" in \
test) \
echo "🧪 Тестирование с собственными образами DevOpsLab..."; \
if [ -z "$(word 3, $(MAKECMDGOALS))" ]; then \
echo "💡 Использование: make custom-images test [minimal|full|performance]"; \
echo "💡 По умолчанию: minimal"; \
./scripts/test-custom-images.sh minimal; \
else \
./scripts/test-custom-images.sh $(word 3, $(MAKECMDGOALS)); \
fi;; \
check) \
echo "🔍 Проверка наличия собственных образов..."; \
./scripts/test-custom-images.sh check;; \
build) \
echo "🔨 Сборка всех образов для тестирования..."; \
$(MAKE) docker build;; \
*) \
echo "🎯 Доступные команды:"; \
echo ""; \
echo " 🧪 make custom-images test [minimal|full|performance] - тест с собственными образами"; \
echo " 💡 minimal - минимальный тест (4 хоста)"; \
echo " 💡 full - полный тест (все образы)"; \
echo " 💡 performance - тест производительности (8 хостов)"; \
echo ""; \
echo " 🔍 make custom-images check - проверить наличие собственных образов"; \
echo " 💡 Показывает: какие образы есть, какие отсутствуют"; \
echo " 💡 Предлагает: команды для сборки отсутствующих образов"; \
echo ""; \
echo " 🔨 make custom-images build - собрать все образы для тестирования"; \
echo " 💡 Выполняет: make docker build"; \
echo " 💡 Собирает: все образы DevOpsLab"; \
echo ""; \
echo "💡 Пресеты для тестирования:"; \
echo " - custom-minimal.yml - минимальный тест (4 хоста)"; \
echo " - custom-images.yml - полный тест (все образы)"; \
echo " - custom-performance.yml - тест производительности (8 хостов)"; \
echo ""; \
echo "💡 Собственные образы:"; \
echo " - inecs/ansible-lab:ansible-controller-latest"; \
echo " - inecs/ansible-lab:alt9-latest"; \
echo " - inecs/ansible-lab:alt10-latest"; \
echo " - inecs/ansible-lab:astra-linux-latest"; \
echo " - inecs/ansible-lab:redos-latest"; \
echo " - inecs/ansible-lab:rhel-latest"; \
echo " - inecs/ansible-lab:centos-latest"; \
echo " - inecs/ansible-lab:alma-latest"; \
echo " - inecs/ansible-lab:rocky-latest"; \
echo " - inecs/ansible-lab:ubuntu-latest"; \
echo " - inecs/ansible-lab:debian-latest";; \
esac
# =============================================================================
# АВТОМАТИЗАЦИЯ