Добавлена роль repo для автоматического добавления репозиториев

- Создана новая роль repo для добавления репозиториев на все ОС
- Добавлена поддержка Docker, PostgreSQL, Elasticsearch, Patroni репозиториев
- Реализована специальная поддержка российских дистрибутивов:
  - Astra Linux: добавлены репозитории Lab50 и debian-archive-keyring
  - Alt Linux: добавлены репозитории Sisyphus (alt-sisyphus, classic, contrib) и Autoimports
- Обновлена документация README.md с информацией о новой роли
- Обновлен .ansible-lint для подавления необходимых правил
- Автор: Сергей Антропов, https://devops.org.ru
This commit is contained in:
Сергей Антропов
2025-10-30 03:13:35 +03:00
parent a2316ae780
commit 23e1a6037b
25 changed files with 2495 additions and 1038 deletions

View File

@@ -50,7 +50,7 @@ BASE_IMAGES := altlinux/p9 astralinux/astra-1.7 redos/redos:9 registry.access.re
role:
@case "$(word 2, $(MAKECMDGOALS))" in \
lint) \
$(MAKE) decrypt; \
$(MAKE) decrypt-all; \
ROLE_NAME="$(word 3, $(MAKECMDGOALS))"; \
if [ -z "$$ROLE_NAME" ]; then \
echo "🔍 Проверка синтаксиса всех ролей ..."; \
@@ -84,7 +84,7 @@ role:
exit 1; \
fi; \
echo ""; \
$(MAKE) decrypt; \
$(MAKE) decrypt-all; \
echo "🔧 Запуск ansible-controller контейнера..."; \
docker run --rm --name $(CONTAINER_NAME) -v "$(PWD):/workspace" -w /workspace \
-v /var/run/docker.sock:/var/run/docker.sock \
@@ -95,26 +95,70 @@ role:
-e MOLECULE_VAULT_ENABLED=$${MOLECULE_VAULT_ENABLED:-false} \
$(DOCKER_IMAGE) \
bash -c " \
echo '=== СОЗДАНИЕ ТЕСТОВЫХ КОНТЕЙНЕРОВ ==='; \
echo -e '\033[33m=== СОЗДАНИЕ ТЕСТОВЫХ КОНТЕЙНЕРОВ ==='; \
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 И ПЕРЕМЕННЫХ ==='; \
echo -e '\033[33m=== НАСТРОЙКА VAULT И ПЕРЕМЕННЫХ ==='; \
echo ''; \
ansible-playbook -i localhost, converge.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace && \
echo ''; \
echo '=== ПРОВЕРКА ПОДКЛЮЧЕНИЯ К КОНТЕЙНЕРАМ ==='; \
echo -e '\033[33m=== ПРОВЕРКА ПОДКЛЮЧЕНИЯ К КОНТЕЙНЕРАМ ==='; \
echo ''; \
ansible all -i /tmp/molecule_workspace/inventory/hosts.ini -m ping && \
echo ''; \
echo '=== ЗАПУСК CONVERGE.YML НА ТЕСТОВЫХ КОНТЕЙНЕРАХ ==='; \
echo -e '\033[33m=== ЗАПУСК CONVERGE.YML НА ТЕСТОВЫХ КОНТЕЙНЕРАХ ===\033[0m'; \
echo ''; \
ansible-playbook -i /tmp/molecule_workspace/inventory/hosts.ini converge.yml && \
echo ''; \
echo '=== ЗАПУСК ROLES/DEPLOY.YML НА ТЕСТОВЫХ КОНТЕЙНЕРАХ ==='; \
echo -e '\033[33m=== ЗАПУСК ROLES/DEPLOY.YML НА ТЕСТОВЫХ КОНТЕЙНЕРАХ ===\033[0m'; \
echo ''; \
ansible-playbook -i /tmp/molecule_workspace/inventory/hosts.ini ../../roles/deploy.yml && \
echo ''; \
echo '=== ОЧИСТКА РЕСУРСОВ ==='; \
echo -e '\033[33m=== ОЧИСТКА РЕСУРСОВ ==='; \
echo ''; \
ansible-playbook -i localhost, destroy.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace && \
echo ''; \
echo '✅ Тестирование завершено'"; \
echo ''; \
$(MAKE) encrypt-all;; \
dryrun) \
echo "🔍 Проверка роли на реальных серверах (dry-run)..."; \
echo ""; \
if [ ! -f "inventory/hosts.ini" ]; then \
echo "❌ Ошибка: Файл inventory/hosts.ini не найден!"; \
echo "💡 Создайте файл inventory/hosts.ini с вашими серверами"; \
exit 1; \
fi; \
ROLE_NAME="$(word 3, $(MAKECMDGOALS))"; \
if [ -z "$$ROLE_NAME" ]; then \
echo "❌ Укажите имя роли для проверки"; \
echo "📋 Доступные роли:"; \
ls -1 roles/ | grep -v "\.yml$$" | sed 's/^/ - /'; \
exit 1; \
fi; \
if [ ! -d "roles/$$ROLE_NAME" ]; then \
echo "❌ Роль '$$ROLE_NAME' не найдена в roles/"; \
echo "📋 Доступные роли:"; \
ls -1 roles/ | grep -v "\.yml$$" | sed 's/^/ - /'; \
exit 1; \
fi; \
$(MAKE) decrypt-all; \
echo "📋 Проверяемая роль: $$ROLE_NAME"; \
echo "📋 Используется inventory: inventory/hosts.ini"; \
echo "📄 Содержимое inventory:"; \
docker run --rm -v "$(PWD):/workspace" -w /workspace $(DOCKER_IMAGE) cat inventory/hosts.ini || cat inventory/hosts.ini; \
echo ""; \
echo "🔍 Запуск dry-run проверки роли $$ROLE_NAME..."; \
docker run --rm --name $(CONTAINER_NAME) -v "$(PWD):/workspace" -w /workspace \
-v ~/.ssh:/root/.ssh:ro \
-e ANSIBLE_FORCE_COLOR=1 \
$(DOCKER_IMAGE) \
bash -c "ansible-playbook -i inventory/hosts.ini roles/$$ROLE_NAME/tasks/main.yml --check --diff"; \
echo ""; \
echo "✅ Dry-run проверка роли $$ROLE_NAME завершена"; \
$(MAKE) encrypt-all;; \
deploy) \
echo "🚀 Развертывание ролей на реальные серверы..."; \
@@ -124,7 +168,7 @@ role:
echo "💡 Создайте файл inventory/hosts.ini с вашими серверами"; \
exit 1; \
fi; \
$(MAKE) decrypt; \
$(MAKE) decrypt-all; \
echo "📋 Используется inventory: inventory/hosts.ini"; \
echo "📄 Содержимое inventory:"; \
docker run --rm -v "$(PWD):/workspace" -w /workspace $(DOCKER_IMAGE) cat inventory/hosts.ini || cat inventory/hosts.ini; \
@@ -172,6 +216,13 @@ role:
echo " ansible-playbook -i inventory/hosts.ini roles/deploy.yml --check"; \
echo " 💡 Документация: docs/deploy-yml-customization.md"; \
echo ""; \
echo " 🔍 make role dryrun [role] - проверить роль на реальных серверах (dry-run)"; \
echo " 💡 Требует: inventory/hosts.ini"; \
echo " 💡 Безопасно: не изменяет серверы, только проверяет"; \
echo " 💡 Примеры:"; \
echo " make role dryrun devops # проверить роль devops"; \
echo " make role dryrun docker # проверить роль docker"; \
echo ""; \
echo " 🔍 make role lint [role] - проверить синтаксис ролей"; \
echo " 💡 Использует: ansible-lint"; \
echo " 💡 Без параметра: проверяет все роли"; \
@@ -1532,6 +1583,7 @@ help:
@echo " 💡 Примеры: make role lint, make role lint devops"
@echo " make role test [preset] - протестировать роли с preset'ом"
@echo " make role deploy - развернуть роли на реальные серверы"
@echo " make role dryrun [role] - проверить роль на реальных серверах (dry-run)"
@echo " make role list - показать все роли"
@echo " make role create - создать новую роль (интерактивно)"
@echo " make role delete - удалить роль (интерактивно)"