make: добавлен setup и усилен podman role test
Добавлен таргет make setup для создания vault/.vault с интерактивным вводом пароля. В make role test добавлены проверки локального ansible-controller, запрет pull и корректный exit code. Made-with: Cursor
This commit is contained in:
86
Makefile
86
Makefile
@@ -42,7 +42,39 @@ DOCKER_PLATFORMS ?= linux/amd64,linux/arm64
|
|||||||
# Базовые образы и их теги
|
# Базовые образы и их теги
|
||||||
BASE_IMAGES := altlinux/p9 astralinux/astra-1.7 redos/redos:9 registry.access.redhat.com/ubi8/ubi centos:7 quay.io/centos/centos:8 quay.io/centos/centos:stream9 almalinux:8 rockylinux:8 ubuntu:20.04 ubuntu:22.04 ubuntu:24.04 debian:9 debian:10 debian:11 debian:bookworm
|
BASE_IMAGES := altlinux/p9 astralinux/astra-1.7 redos/redos:9 registry.access.redhat.com/ubi8/ubi centos:7 quay.io/centos/centos:8 quay.io/centos/centos:stream9 almalinux:8 rockylinux:8 ubuntu:20.04 ubuntu:22.04 ubuntu:24.04 debian:9 debian:10 debian:11 debian:bookworm
|
||||||
|
|
||||||
.PHONY: role vault git docker presets controller k8s help update-playbooks generate-docs setup-cicd list create delete buildall buildall-image
|
.PHONY: role vault git docker presets controller k8s help update-playbooks generate-docs setup-cicd list create delete buildall buildall-image setup
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# ПЕРВИЧНАЯ НАСТРОЙКА (vault: пароль для ansible-vault)
|
||||||
|
# Автор: Сергей Антропов
|
||||||
|
# Сайт: https://devops.org.ru
|
||||||
|
# =============================================================================
|
||||||
|
# Создаёт каталоги и файл vault/.vault с паролем (интерактивно, без вывода пароля в лог).
|
||||||
|
setup:
|
||||||
|
@set -e; \
|
||||||
|
echo "🔧 Первичная настройка проекта..."; \
|
||||||
|
mkdir -p vault inventory; \
|
||||||
|
echo "📁 Каталоги: vault/, inventory/"; \
|
||||||
|
if [ -f vault/.vault ]; then \
|
||||||
|
echo "⚠️ Файл vault/.vault уже существует."; \
|
||||||
|
read -p "Перезаписать пароль? (y/N): " confirm; \
|
||||||
|
if [ "$$confirm" != "y" ] && [ "$$confirm" != "Y" ]; then \
|
||||||
|
echo "✅ Оставлен существующий vault/.vault"; \
|
||||||
|
exit 0; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
read -sp "Введите пароль для ansible-vault (будет записан в vault/.vault): " VAULT_PASS; \
|
||||||
|
echo ""; \
|
||||||
|
read -sp "Повторите пароль: " VAULT_PASS2; \
|
||||||
|
echo ""; \
|
||||||
|
if [ "$$VAULT_PASS" != "$$VAULT_PASS2" ]; then \
|
||||||
|
echo "❌ Пароли не совпадают"; \
|
||||||
|
exit 1; \
|
||||||
|
fi; \
|
||||||
|
printf '%s\n' "$$VAULT_PASS" > vault/.vault; \
|
||||||
|
chmod 600 vault/.vault; \
|
||||||
|
echo "✅ Создан/обновлён файл vault/.vault (права 600)."; \
|
||||||
|
echo "💡 Для развёртывания на серверах создайте inventory/hosts.ini при необходимости."
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# КОМАНДЫ ДЛЯ РАБОТЫ С РОЛЯМИ
|
# КОМАНДЫ ДЛЯ РАБОТЫ С РОЛЯМИ
|
||||||
@@ -85,8 +117,18 @@ role:
|
|||||||
fi; \
|
fi; \
|
||||||
echo ""; \
|
echo ""; \
|
||||||
$(MAKE) decrypt-all; \
|
$(MAKE) decrypt-all; \
|
||||||
|
echo "🔎 Проверка локального образа ansible-controller..."; \
|
||||||
|
if ! podman image exists $(DOCKER_IMAGE); then \
|
||||||
|
echo "⚠️ Образ $(DOCKER_IMAGE) не найден локально. Выполняю локальную сборку..."; \
|
||||||
|
podman build -t $(DOCKER_IMAGE) dockerfiles/ansible-controller; \
|
||||||
|
fi; \
|
||||||
|
echo "🔎 Проверка наличия podman внутри ansible-controller..."; \
|
||||||
|
if ! podman run --rm --pull=never $(DOCKER_IMAGE) bash -lc "command -v podman >/dev/null 2>&1"; then \
|
||||||
|
echo "⚠️ В образе отсутствует podman. Пересобираю локально..."; \
|
||||||
|
podman build --no-cache -t $(DOCKER_IMAGE) dockerfiles/ansible-controller; \
|
||||||
|
fi; \
|
||||||
echo "🔧 Запуск ansible-controller контейнера (Podman)..."; \
|
echo "🔧 Запуск ansible-controller контейнера (Podman)..."; \
|
||||||
podman run --rm --name $(CONTAINER_NAME) -v "$(PWD):/workspace" -w /workspace \
|
podman run --rm --pull=never --name $(CONTAINER_NAME) -v "$(PWD):/workspace" -w /workspace \
|
||||||
-v $(PODMAN_SOCKET):/run/podman/podman.sock \
|
-v $(PODMAN_SOCKET):/run/podman/podman.sock \
|
||||||
-u root \
|
-u root \
|
||||||
-e ANSIBLE_FORCE_COLOR=1 \
|
-e ANSIBLE_FORCE_COLOR=1 \
|
||||||
@@ -96,35 +138,49 @@ role:
|
|||||||
-e MOLECULE_VAULT_ENABLED=$${MOLECULE_VAULT_ENABLED:-false} \
|
-e MOLECULE_VAULT_ENABLED=$${MOLECULE_VAULT_ENABLED:-false} \
|
||||||
$(DOCKER_IMAGE) \
|
$(DOCKER_IMAGE) \
|
||||||
bash -c " \
|
bash -c " \
|
||||||
|
set -Eeuo pipefail; \
|
||||||
|
cleanup() { \
|
||||||
|
echo ''; \
|
||||||
|
echo -e '\033[33m=== ОЧИСТКА РЕСУРСОВ ==='; \
|
||||||
|
echo ''; \
|
||||||
|
ansible-playbook -i localhost, destroy.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace || true; \
|
||||||
|
}; \
|
||||||
|
trap cleanup EXIT; \
|
||||||
echo -e '\033[33m=== СОЗДАНИЕ ТЕСТОВЫХ КОНТЕЙНЕРОВ ==='; \
|
echo -e '\033[33m=== СОЗДАНИЕ ТЕСТОВЫХ КОНТЕЙНЕРОВ ==='; \
|
||||||
echo ''; \
|
echo ''; \
|
||||||
mkdir -p /tmp/molecule_workspace/inventory && \
|
mkdir -p /tmp/molecule_workspace/inventory; \
|
||||||
cd molecule/default && \
|
cd molecule/default; \
|
||||||
ansible-playbook -i localhost, create.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace && \
|
ansible-playbook -i localhost, create.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace; \
|
||||||
|
if [ ! -f /tmp/molecule_workspace/inventory/hosts.ini ]; then \
|
||||||
|
echo '❌ Inventory не создан: /tmp/molecule_workspace/inventory/hosts.ini'; \
|
||||||
|
exit 1; \
|
||||||
|
fi; \
|
||||||
|
if ! awk '/^[a-zA-Z0-9._-]+$$/{found=1} END{exit(found?0:1)}' /tmp/molecule_workspace/inventory/hosts.ini; then \
|
||||||
|
echo '❌ Inventory пустой: не найдено ни одного тестового хоста'; \
|
||||||
|
exit 1; \
|
||||||
|
fi; \
|
||||||
echo ''; \
|
echo ''; \
|
||||||
echo -e '\033[33m=== НАСТРОЙКА VAULT И ПЕРЕМЕННЫХ ==='; \
|
echo -e '\033[33m=== НАСТРОЙКА VAULT И ПЕРЕМЕННЫХ ==='; \
|
||||||
echo ''; \
|
echo ''; \
|
||||||
ansible-playbook -i localhost, converge.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; \
|
||||||
echo ''; \
|
echo ''; \
|
||||||
echo -e '\033[33m=== ПРОВЕРКА ПОДКЛЮЧЕНИЯ К КОНТЕЙНЕРАМ ==='; \
|
echo -e '\033[33m=== ПРОВЕРКА ПОДКЛЮЧЕНИЯ К КОНТЕЙНЕРАМ ==='; \
|
||||||
echo ''; \
|
echo ''; \
|
||||||
ansible all -i /tmp/molecule_workspace/inventory/hosts.ini -m ping && \
|
ansible all -i /tmp/molecule_workspace/inventory/hosts.ini -m ping; \
|
||||||
echo ''; \
|
echo ''; \
|
||||||
echo -e '\033[33m=== ЗАПУСК CONVERGE.YML НА ТЕСТОВЫХ КОНТЕЙНЕРАХ ===\033[0m'; \
|
echo -e '\033[33m=== ЗАПУСК CONVERGE.YML НА ТЕСТОВЫХ КОНТЕЙНЕРАХ ===\033[0m'; \
|
||||||
echo ''; \
|
echo ''; \
|
||||||
ansible-playbook -i /tmp/molecule_workspace/inventory/hosts.ini converge.yml && \
|
ansible-playbook -i /tmp/molecule_workspace/inventory/hosts.ini converge.yml; \
|
||||||
echo ''; \
|
echo ''; \
|
||||||
echo -e '\033[33m=== ЗАПУСК ROLES/DEPLOY.YML НА ТЕСТОВЫХ КОНТЕЙНЕРАХ ===\033[0m'; \
|
echo -e '\033[33m=== ЗАПУСК ROLES/DEPLOY.YML НА ТЕСТОВЫХ КОНТЕЙНЕРАХ ===\033[0m'; \
|
||||||
echo ''; \
|
echo ''; \
|
||||||
ansible-playbook -i /tmp/molecule_workspace/inventory/hosts.ini ../../roles/deploy.yml && \
|
ansible-playbook -i /tmp/molecule_workspace/inventory/hosts.ini ../../roles/deploy.yml; \
|
||||||
echo ''; \
|
|
||||||
echo -e '\033[33m=== ОЧИСТКА РЕСУРСОВ ==='; \
|
|
||||||
echo ''; \
|
|
||||||
ansible-playbook -i localhost, destroy.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace && \
|
|
||||||
echo ''; \
|
echo ''; \
|
||||||
echo '✅ Тестирование завершено'"; \
|
echo '✅ Тестирование завершено'"; \
|
||||||
|
TEST_RC=$$?; \
|
||||||
echo ''; \
|
echo ''; \
|
||||||
$(MAKE) encrypt-all;; \
|
$(MAKE) encrypt-all; \
|
||||||
|
exit $$TEST_RC;; \
|
||||||
dryrun) \
|
dryrun) \
|
||||||
echo "🔍 Проверка роли на реальных серверах (dry-run)..."; \
|
echo "🔍 Проверка роли на реальных серверах (dry-run)..."; \
|
||||||
echo ""; \
|
echo ""; \
|
||||||
@@ -1248,6 +1304,7 @@ help:
|
|||||||
@echo " dockerfiles/ - Docker образы для тестирования"
|
@echo " dockerfiles/ - Docker образы для тестирования"
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo "🚀 ОСНОВНЫЕ КОМАНДЫ:"
|
@echo "🚀 ОСНОВНЫЕ КОМАНДЫ:"
|
||||||
|
@echo " make setup - первичная настройка: vault/.vault, каталоги vault и inventory"
|
||||||
@echo " make role lint [role] - проверить синтаксис ролей (все или конкретную)"
|
@echo " make role lint [role] - проверить синтаксис ролей (все или конкретную)"
|
||||||
@echo " 💡 Примеры: make role lint, make role lint devops"
|
@echo " 💡 Примеры: make role lint, make role lint devops"
|
||||||
@echo " make role test [preset] - протестировать роли с preset'ом"
|
@echo " make role test [preset] - протестировать роли с preset'ом"
|
||||||
@@ -1333,6 +1390,7 @@ help:
|
|||||||
@echo " make k8s shell [preset] - открыть shell в контейнере k8s"
|
@echo " make k8s shell [preset] - открыть shell в контейнере k8s"
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo "💡 ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ:"
|
@echo "💡 ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ:"
|
||||||
|
@echo " make setup # создать vault/.vault и каталоги (пароль vault)"
|
||||||
@echo " make presets list # показать все preset'ы"
|
@echo " make presets list # показать все preset'ы"
|
||||||
@echo " make role test minimal # быстрый тест"
|
@echo " make role test minimal # быстрый тест"
|
||||||
@echo " make role test all-images # тест всех образов"
|
@echo " make role test all-images # тест всех образов"
|
||||||
|
|||||||
Reference in New Issue
Block a user