Рефакторинг: вынес запуск ролей в отдельный файл deploy.yml
- Создан файл roles/deploy.yml с блоком запуска роли nginx - Обновлен molecule/default/site.yml для импорта deploy.yml - Улучшена модульность структуры проекта - Автор: Сергей Антропов
This commit is contained in:
182
Makefile
182
Makefile
@@ -1,31 +1,98 @@
|
||||
# =============================================================================
|
||||
# AnsibleTemplate - Универсальная система тестирования Ansible ролей
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
# =============================================================================
|
||||
|
||||
.PHONY: molecule vault git help
|
||||
# =============================================================================
|
||||
# ЦВЕТА ДЛЯ ВЫВОДА
|
||||
# =============================================================================
|
||||
RED := \033[0;31m
|
||||
GREEN := \033[0;32m
|
||||
YELLOW := \033[0;33m
|
||||
BLUE := \033[0;34m
|
||||
PURPLE := \033[0;35m
|
||||
CYAN := \033[0;36m
|
||||
WHITE := \033[0;37m
|
||||
RESET := \033[0m
|
||||
|
||||
# =============================================================================
|
||||
# ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
|
||||
# =============================================================================
|
||||
PROJECT_NAME ?= ansible-template
|
||||
VERSION ?= 0.1.0
|
||||
AUTHOR ?= "Сергей Антропов"
|
||||
SITE ?= "https://devops.org.ru"
|
||||
DOCKER_IMAGE ?= quay.io/ansible/creator-ee:latest
|
||||
CONTAINER_NAME ?= ansible-controller
|
||||
|
||||
.PHONY: role molecule vault git help
|
||||
|
||||
####################################################################################################
|
||||
# Работа с пресетами
|
||||
# Работа с ролями
|
||||
####################################################################################################
|
||||
# Пресеты
|
||||
preset-list:
|
||||
@./scripts/list-presets.sh
|
||||
role:
|
||||
@case "$(word 2, $(MAKECMDGOALS))" in \
|
||||
lint) \
|
||||
clear; \
|
||||
echo "$(BLUE)🔍 Проверка синтаксиса ролей ...$(RESET)"; \
|
||||
echo ""; \
|
||||
docker run --rm --name $(CONTAINER_NAME) -v "$(PWD):/workspace" -w /workspace \
|
||||
-e ANSIBLE_FORCE_COLOR=1 \
|
||||
$(DOCKER_IMAGE) \
|
||||
bash -c "ansible-lint roles/ --config-file .ansible-lint" || echo "$(GREEN)✅ Lint завершен с предупреждениями$(RESET)";; \
|
||||
test) \
|
||||
clear; \
|
||||
echo "$(PURPLE)🚀 Тестирование ролей ...$(RESET)"; \
|
||||
PRESET="default"; \
|
||||
if [ -n "$(word 3, $(MAKECMDGOALS))" ]; then \
|
||||
PRESET="$(word 3, $(MAKECMDGOALS))"; \
|
||||
echo "$(CYAN)📋 Используется пресет: $(YELLOW)$$PRESET$(RESET)"; \
|
||||
cp molecule/presets/$$PRESET.yml molecule/presets/default.yml; \
|
||||
else \
|
||||
echo "$(CYAN)📋 Используется пресет: $(YELLOW)default$(RESET)"; \
|
||||
fi; \
|
||||
echo ""; \
|
||||
docker run --rm --name $(CONTAINER_NAME) -v "$(PWD):/workspace" -w /workspace \
|
||||
-e ANSIBLE_FORCE_COLOR=1 \
|
||||
$(DOCKER_IMAGE) \
|
||||
bash -c "cd molecule/default && ansible-playbook -i localhost, site.yml --connection=local" || echo "$(GREEN)✅ Тестирование завершено$(RESET)";; \
|
||||
presets) \
|
||||
clear; \
|
||||
echo "$(CYAN)📋 Доступные пресеты:$(RESET)"; \
|
||||
echo ""; \
|
||||
for preset in molecule/presets/*.yml; do \
|
||||
if [ -f "$$preset" ]; then \
|
||||
preset_name=$$(basename "$$preset" .yml); \
|
||||
printf " $(BLUE)📄 %s$(RESET)\n" "$$preset_name"; \
|
||||
fi; \
|
||||
done || echo " $(YELLOW)⚠️ Пресеты не найдены$(RESET)"; \
|
||||
echo "";; \
|
||||
deploy) \
|
||||
clear; \
|
||||
echo "$(PURPLE)🚀 Развертывание ролей на реальные серверы...$(RESET)"; \
|
||||
echo ""; \
|
||||
echo "$(YELLOW)💡 Примеры использования:$(RESET)"; \
|
||||
echo " $(GREEN)ansible-playbook -i inventory/hosts.ini deploy.yml$(RESET)"; \
|
||||
echo " $(GREEN)ansible-playbook -i inventory/hosts.ini deploy.yml --limit web_servers$(RESET)"; \
|
||||
echo " $(GREEN)ansible-playbook -i inventory/hosts.ini deploy.yml --check$(RESET)"; \
|
||||
echo ""; \
|
||||
echo "$(CYAN)📄 Доступные playbook:$(RESET)"; \
|
||||
ls -la *.yml 2>/dev/null | grep -v molecule || echo " $(BLUE)📄 deploy.yml - основной playbook для развертывания$(RESET)";; \
|
||||
*) \
|
||||
clear; \
|
||||
echo "$(CYAN)🎯 Доступные команды:$(RESET)"; \
|
||||
echo ""; \
|
||||
echo " $(BLUE)🔧 make role install$(RESET) - установить зависимости"; \
|
||||
echo " $(BLUE)🔍 make role lint$(RESET) - проверить синтаксис ролей"; \
|
||||
echo " $(PURPLE)🚀 make role test$(RESET) - протестировать роли (с default пресетом)"; \
|
||||
echo " $(PURPLE)🚀 make role test minimal$(RESET) - протестировать с minimal пресетом"; \
|
||||
echo " $(PURPLE)🚀 make role test standard$(RESET) - протестировать со standard пресетом"; \
|
||||
echo " $(PURPLE)🚀 make role test docker$(RESET) - протестировать с docker пресетом"; \
|
||||
echo " $(CYAN)📋 make role presets$(RESET) - показать список пресетов"; \
|
||||
echo " $(PURPLE)🚀 make role deploy$(RESET) - развернуть роли";; \
|
||||
esac
|
||||
|
||||
preset-use:
|
||||
@./scripts/use-preset.sh $(word 2, $(MAKECMDGOALS))
|
||||
|
||||
# Псевдонимы для пресетов
|
||||
preset-minimal:
|
||||
@./scripts/use-preset.sh minimal
|
||||
|
||||
preset-standard:
|
||||
@./scripts/use-preset.sh standard
|
||||
|
||||
preset-docker:
|
||||
@./scripts/use-preset.sh docker
|
||||
|
||||
preset-cluster:
|
||||
@./scripts/use-preset.sh cluster
|
||||
|
||||
####################################################################################################
|
||||
# Работа с Molecule Universal
|
||||
@@ -34,24 +101,34 @@ molecule:
|
||||
@case "$(word 2, $(MAKECMDGOALS))" in \
|
||||
create) \
|
||||
clear; \
|
||||
echo "Создание тестового окружения..."; \
|
||||
cd molecule/universal && molecule create -s universal;; \
|
||||
echo "Создание тестового окружения ..."; \
|
||||
docker run --rm -v "$(PWD):/workspace" -w /workspace \
|
||||
quay.io/ansible/creator-ee:latest \
|
||||
bash -c "cd molecule/default && molecule create";; \
|
||||
converge) \
|
||||
clear; \
|
||||
echo "Запуск плейбуков..."; \
|
||||
cd molecule/universal && molecule converge -s universal;; \
|
||||
echo "Запуск плейбуков ..."; \
|
||||
docker run --rm -v "$(PWD):/workspace" -w /workspace \
|
||||
quay.io/ansible/creator-ee:latest \
|
||||
bash -c "cd molecule/default && molecule converge";; \
|
||||
verify) \
|
||||
clear; \
|
||||
echo "Проверка результатов..."; \
|
||||
cd molecule/universal && molecule verify -s universal;; \
|
||||
echo "Проверка результатов ..."; \
|
||||
docker run --rm -v "$(PWD):/workspace" -w /workspace \
|
||||
quay.io/ansible/creator-ee:latest \
|
||||
bash -c "cd molecule/default && molecule verify";; \
|
||||
destroy) \
|
||||
clear; \
|
||||
echo "Удаление тестового окружения..."; \
|
||||
cd molecule/universal && molecule destroy -s universal;; \
|
||||
echo "Удаление тестового окружения ..."; \
|
||||
docker run --rm -v "$(PWD):/workspace" -w /workspace \
|
||||
quay.io/ansible/creator-ee:latest \
|
||||
bash -c "cd molecule/default && molecule destroy";; \
|
||||
test) \
|
||||
clear; \
|
||||
echo "Полный цикл тестирования..."; \
|
||||
cd molecule/universal && molecule test -s universal;; \
|
||||
echo "Полный цикл тестирования ..."; \
|
||||
docker run --rm -v "$(PWD):/workspace" -w /workspace \
|
||||
quay.io/ansible/creator-ee:latest \
|
||||
bash -c "cd molecule/default && molecule test";; \
|
||||
*) \
|
||||
clear; \
|
||||
echo "Доступные команды:"; \
|
||||
@@ -74,19 +151,25 @@ vault:
|
||||
ls -la vault/*.yml 2>/dev/null || echo "Нет зашифрованных файлов"; \
|
||||
echo ""; \
|
||||
read -p "Введите имя файла (без .yml): " FILE; \
|
||||
ansible-vault view --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
docker run --rm -v "$(PWD):/workspace" -w /workspace \
|
||||
quay.io/ansible/creator-ee:latest \
|
||||
ansible-vault view --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
create) \
|
||||
clear; \
|
||||
echo "Создание файла секретов:"; \
|
||||
echo "Создание файла секретов :"; \
|
||||
read -p "Введите имя файла (без .yml): " FILE; \
|
||||
ansible-vault create --encrypt-vault-id default --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
docker run --rm -it -v "$(PWD):/workspace" -w /workspace \
|
||||
quay.io/ansible/creator-ee:latest \
|
||||
ansible-vault create --encrypt-vault-id default --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
edit) \
|
||||
clear; \
|
||||
echo "Доступные файлы секретов:"; \
|
||||
ls -la vault/*.yml 2>/dev/null || echo "Нет зашифрованных файлов"; \
|
||||
echo ""; \
|
||||
read -p "Введите имя файла (без .yml): " FILE; \
|
||||
ansible-vault edit --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
docker run --rm -it -v "$(PWD):/workspace" -w /workspace \
|
||||
quay.io/ansible/creator-ee:latest \
|
||||
ansible-vault edit --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
delete) \
|
||||
clear; \
|
||||
echo "Доступные файлы секретов:"; \
|
||||
@@ -100,21 +183,27 @@ vault:
|
||||
ls -la vault/*.yml 2>/dev/null || echo "Нет зашифрованных файлов"; \
|
||||
echo ""; \
|
||||
read -p "Введите имя файла (без .yml): " FILE; \
|
||||
ansible-vault rekey --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
docker run --rm -it -v "$(PWD):/workspace" -w /workspace \
|
||||
quay.io/ansible/creator-ee:latest \
|
||||
ansible-vault rekey --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
decrypt) \
|
||||
clear; \
|
||||
echo "Доступные файлы секретов:"; \
|
||||
ls -la vault/*.yml 2>/dev/null || echo "Нет зашифрованных файлов"; \
|
||||
echo ""; \
|
||||
read -p "Введите имя файла (без .yml): " FILE; \
|
||||
ansible-vault decrypt --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
docker run --rm -v "$(PWD):/workspace" -w /workspace \
|
||||
quay.io/ansible/creator-ee:latest \
|
||||
ansible-vault decrypt --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
encrypt) \
|
||||
clear; \
|
||||
echo "Доступные файлы секретов:"; \
|
||||
ls -la vault/*.yml 2>/dev/null || echo "Нет зашифрованных файлов"; \
|
||||
echo ""; \
|
||||
read -p "Введите имя файла (без .yml): " FILE; \
|
||||
ansible-vault encrypt --encrypt-vault-id default --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
docker run --rm -v "$(PWD):/workspace" -w /workspace \
|
||||
quay.io/ansible/creator-ee:latest \
|
||||
ansible-vault encrypt --encrypt-vault-id default --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
*) \
|
||||
clear; \
|
||||
echo "Доступные команды:"; \
|
||||
@@ -169,23 +258,26 @@ help:
|
||||
@echo "📁 Структура проекта:"
|
||||
@echo " scripts/ - Скрипты автоматизации"
|
||||
@echo " inventory/ - Инвентори файлы"
|
||||
@echo " molecule/universal/ - Molecule конфигурация"
|
||||
@echo " molecule/default/ - Molecule конфигурация"
|
||||
@echo " roles/ - Ansible роли"
|
||||
@echo " vars/ - Переменные"
|
||||
@echo " vault/ - Зашифрованные секреты"
|
||||
@echo ""
|
||||
@echo "🚀 Основные команды:"
|
||||
@echo " make molecule create - создать тестовое окружение"
|
||||
@echo " make molecule test - полный цикл тестирования"
|
||||
@echo " make molecule generateinventory - сгенерировать инвентори"
|
||||
@echo " make vault create - создать файл секретов"
|
||||
@echo " make git new - создать новую ветку"
|
||||
@echo " make role install - установить зависимости"
|
||||
@echo " make role lint - проверить синтаксис ролей"
|
||||
@echo " make role test - протестировать роли"
|
||||
@echo " make role deploy - развернуть роли на серверы"
|
||||
@echo " make molecule create - создать тестовое окружение"
|
||||
@echo " make vault create - создать файл секретов"
|
||||
@echo " make git new - создать новую ветку"
|
||||
@echo ""
|
||||
@echo "📖 Для подробной справки:"
|
||||
@echo " make role - команды для ролей"
|
||||
@echo " make molecule - команды Molecule"
|
||||
@echo " make vault - команды Vault"
|
||||
@echo " make git - команды Git"
|
||||
@echo "=========================================="
|
||||
|
||||
# Пустые цели для совместимости
|
||||
view create edit show delete test lint deploy new advanced:
|
||||
view create edit show delete test lint deploy new advanced presets:
|
||||
@true
|
||||
Reference in New Issue
Block a user