feat: Добавлена система пресетов для Molecule
- Создана система пресетов для быстрого переключения между конфигурациями - Добавлены пресеты: minimal, standard, docker, cluster - Обновлена структура проекта с папками cicd/, vault/, scripts/ - Упрощена система vault с функциональными секретами - Добавлены скрипты для работы с пресетами - Обновлен Makefile с командами для пресетов - Удалены старые файлы и структуры Автор: Сергей Антропов Сайт: https://devops.org.ru
This commit is contained in:
264
Makefile
264
Makefile
@@ -1,135 +1,130 @@
|
||||
# Глобальные переменные
|
||||
IMAGE ?= ansible
|
||||
TAG ?= 0.1
|
||||
REGISTRY ?= inecs/ansible
|
||||
# По умолчанию используем docker. Для локальной разработки используйте docker-compose
|
||||
RUN_MODE ?= docker
|
||||
# AnsibleTemplate - Универсальная система тестирования Ansible ролей
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
# Определение команды RUN в зависимости от RUN_MODE
|
||||
ifeq ($(RUN_MODE), docker-compose)
|
||||
RUN = docker compose run --rm $(IMAGE)
|
||||
else ifeq ($(RUN_MODE), docker)
|
||||
RUN = docker run -it --rm \
|
||||
--name $(IMAGE) \
|
||||
-v $(PWD):/ansible \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
-v ~/.ssh/id_rsa:/root/.ssh/id_rsa:ro \
|
||||
-e ANSIBLE_VAULT_PASSWORD_FILE=/ansible/vault-password.txt \
|
||||
--privileged \
|
||||
--workdir /ansible \
|
||||
$(REGISTRY)/$(IMAGE)
|
||||
else
|
||||
$(error Invalid RUN_MODE. Use "docker-compose" or "docker")
|
||||
endif
|
||||
|
||||
view create edit show delete test lint deploy new init build rebuild prune release images push pull shell:
|
||||
@true
|
||||
.PHONY: molecule vault git help
|
||||
|
||||
####################################################################################################
|
||||
# Инициализация новой роли
|
||||
# Работа с пресетами
|
||||
####################################################################################################
|
||||
init:
|
||||
@echo "Шаг 1: Создание Docker-образа..."
|
||||
@make docker build
|
||||
@echo "Шаг 2: Создание Docker-образов для запуска Molecule..."
|
||||
@make docker images
|
||||
@echo "Шаг 3: Создание нового vault-файла с паролем..."
|
||||
@read -p "Введите пароль для vault: " VAULT_PASSWORD; \
|
||||
echo "$$VAULT_PASSWORD" > vault-password.txt; \
|
||||
make vault create
|
||||
@echo "Шаг 4: Создание нового брэнча в гите..."
|
||||
@make git new
|
||||
@echo "Шаг 5: Создание новой роли..."
|
||||
@make role new
|
||||
# Пресеты
|
||||
preset-list:
|
||||
@./scripts/list-presets.sh
|
||||
|
||||
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
|
||||
|
||||
####################################################################################################
|
||||
# Управление контейнерами с помощью docker compose или docker run
|
||||
# Работа с Molecule Universal
|
||||
####################################################################################################
|
||||
docker:
|
||||
molecule:
|
||||
@case "$(word 2, $(MAKECMDGOALS))" in \
|
||||
build) \
|
||||
docker buildx create --use --name multiarch-builder --driver docker-container; \
|
||||
if [ "$(RUN_MODE)" = "docker-compose" ]; then \
|
||||
docker compose build $(c); \
|
||||
else \
|
||||
docker build -t $(REGISTRY)/$(IMAGE) .; \
|
||||
fi;; \
|
||||
rebuild) \
|
||||
docker buildx create --use --name multiarch-builder --driver docker-container; \
|
||||
if [ "$(RUN_MODE)" = "docker-compose" ]; then \
|
||||
docker compose build --no-cache $(c); \
|
||||
else \
|
||||
docker build --no-cache -t $(REGISTRY)/$(IMAGE) .; \
|
||||
fi;; \
|
||||
prune) \
|
||||
docker system prune -af;; \
|
||||
shell) \
|
||||
create) \
|
||||
clear; \
|
||||
echo "Entering to Ansible container shell..."; \
|
||||
$(RUN) bash ;; \
|
||||
release) \
|
||||
docker buildx create --use --name multiarch-builder --driver docker-container; \
|
||||
docker login $(REGISTRY); \
|
||||
docker buildx build -t $(REGISTRY)/$(IMAGE):$(TAG) -t $(REGISTRY)/$(IMAGE):latest --platform linux/amd64,linux/arm64 --push .;; \
|
||||
images) \
|
||||
docker buildx create --use --name multiarch-builder --driver docker-container; \
|
||||
echo "Логинимся в Docker Hub..."; \
|
||||
docker login; \
|
||||
echo "Собираем и пушим основной Ansible образ..."; \
|
||||
docker buildx build -t $(REGISTRY)/$(IMAGE):$(TAG) -t $(REGISTRY)/$(IMAGE):latest --platform linux/amd64,linux/arm64 --push .; \
|
||||
echo "Собираем и пушим образ CentOS..."; \
|
||||
docker buildx build -t $(REGISTRY):centos --platform linux/amd64,linux/arm64 --push -f Dockerfile-CentOS .; \
|
||||
echo "Собираем и пушим образ Ubuntu..."; \
|
||||
docker buildx build -t $(REGISTRY):ubuntu --platform linux/amd64,linux/arm64 --push -f Dockerfile-Ubuntu .; \
|
||||
echo "Образы успешно опубликованы в Docker Hub: $(REGISTRY)";; \
|
||||
*) echo "Unknown action. Available actions: build, rebuild, prune, release";; \
|
||||
echo "Создание тестового окружения..."; \
|
||||
cd molecule/universal && molecule create -s universal;; \
|
||||
converge) \
|
||||
clear; \
|
||||
echo "Запуск плейбуков..."; \
|
||||
cd molecule/universal && molecule converge -s universal;; \
|
||||
verify) \
|
||||
clear; \
|
||||
echo "Проверка результатов..."; \
|
||||
cd molecule/universal && molecule verify -s universal;; \
|
||||
destroy) \
|
||||
clear; \
|
||||
echo "Удаление тестового окружения..."; \
|
||||
cd molecule/universal && molecule destroy -s universal;; \
|
||||
test) \
|
||||
clear; \
|
||||
echo "Полный цикл тестирования..."; \
|
||||
cd molecule/universal && molecule test -s universal;; \
|
||||
*) \
|
||||
clear; \
|
||||
echo "Доступные команды:"; \
|
||||
echo " make molecule create - создать окружение"; \
|
||||
echo " make molecule converge - запустить плейбуки"; \
|
||||
echo " make molecule verify - проверить результаты"; \
|
||||
echo " make molecule destroy - удалить окружение"; \
|
||||
echo " make molecule test - полный цикл тестирования"; \
|
||||
;; \
|
||||
esac
|
||||
|
||||
####################################################################################################
|
||||
# Работа с ролью
|
||||
# Работа с Ansible Vault
|
||||
####################################################################################################
|
||||
vault:
|
||||
@case "$(word 2, $(MAKECMDGOALS))" in \
|
||||
show) $(RUN) bash -c "ansible-vault view --vault-password-file vault-password.txt vars/secrets.yml";; \
|
||||
create) $(RUN) bash -c "ansible-vault create --encrypt-vault-id default --vault-password-file vault-password.txt vars/secrets.yml";; \
|
||||
edit) $(RUN) bash -c "ansible-vault edit --vault-password-file vault-password.txt vars/secrets.yml";; \
|
||||
delete) $(RUN) bash -c "rm vars/secrets.yml";; \
|
||||
rekey) $(RUN) bash -c "ansible-vault rekey --vault-password-file vault-password.txt vars/secrets.yml";; \
|
||||
decrypt) $(RUN) bash -c "ansible-vault decrypt --vault-password-file vault-password.txt vars/secrets.yml";; \
|
||||
encrypt) $(RUN) bash -c "ansible-vault encrypt --encrypt-vault-id default --vault-password-file vault-password.txt vars/secrets.yml";; \
|
||||
*) echo "Unknown action";; \
|
||||
esac
|
||||
|
||||
role:
|
||||
@case "$(word 2, $(MAKECMDGOALS))" in \
|
||||
new) \
|
||||
show) \
|
||||
clear; \
|
||||
echo "Введите название новой роли на английском:"; \
|
||||
read ROLE_NAME; \
|
||||
echo "Введите описание роли:"; \
|
||||
read ROLE_DESC; \
|
||||
cp -r default/ "roles/$${ROLE_NAME}"; \
|
||||
printf "\n- name: $${ROLE_DESC}" >> roles/deploy.yaml; \
|
||||
printf "\n import_playbook: $${ROLE_NAME}/deploy.yaml" >> roles/deploy.yaml; \
|
||||
printf '\n - ../../roles/%s' "$$ROLE_NAME" >> molecule/default/converge.yml; \
|
||||
printf "\n - $${ROLE_NAME}" >> roles/$$ROLE_NAME/deploy.yaml;; \
|
||||
lint) \
|
||||
echo "Доступные файлы секретов:"; \
|
||||
ls -la vault/*.yml 2>/dev/null || echo "Нет зашифрованных файлов"; \
|
||||
echo ""; \
|
||||
read -p "Введите имя файла (без .yml): " FILE; \
|
||||
ansible-vault view --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
create) \
|
||||
clear; \
|
||||
echo "Check your role..."; \
|
||||
$(RUN) bash -c "ansible-vault decrypt --vault-password-file vault-password.txt vars/secrets.yml"; \
|
||||
$(RUN) bash -c "ansible-lint roles/*"; \
|
||||
$(RUN) bash -c "ansible-vault encrypt vars/secrets.yml --encrypt-vault-id default --vault-password-file vault-password.txt";; \
|
||||
test) \
|
||||
echo "Создание файла секретов:"; \
|
||||
read -p "Введите имя файла (без .yml): " FILE; \
|
||||
ansible-vault create --encrypt-vault-id default --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
edit) \
|
||||
clear; \
|
||||
echo "Running test roles..."; \
|
||||
$(RUN) bash -c "ansible-vault decrypt --vault-password-file vault-password.txt vars/secrets.yml"; \
|
||||
$(RUN) bash -c "docker login $(REGISTRY) && molecule test --parallel --destroy=always"; \
|
||||
$(RUN) bash -c "ansible-vault encrypt vars/secrets.yml --encrypt-vault-id default --vault-password-file vault-password.txt";; \
|
||||
deploy) \
|
||||
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;; \
|
||||
delete) \
|
||||
clear; \
|
||||
echo "Deploying roles to production..."; \
|
||||
$(RUN) bash -c "ansible-playbook roles/deploy.yaml";; \
|
||||
*) echo "Unknown action";; \
|
||||
echo "Доступные файлы секретов:"; \
|
||||
ls -la vault/*.yml 2>/dev/null || echo "Нет зашифрованных файлов"; \
|
||||
echo ""; \
|
||||
read -p "Введите имя файла (без .yml): " FILE; \
|
||||
rm -f vault/$$FILE.yml;; \
|
||||
rekey) \
|
||||
clear; \
|
||||
echo "Доступные файлы секретов:"; \
|
||||
ls -la vault/*.yml 2>/dev/null || echo "Нет зашифрованных файлов"; \
|
||||
echo ""; \
|
||||
read -p "Введите имя файла (без .yml): " FILE; \
|
||||
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;; \
|
||||
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;; \
|
||||
*) \
|
||||
clear; \
|
||||
echo "Доступные команды:"; \
|
||||
echo " make vault create - создать файл секретов"; \
|
||||
echo " make vault edit - редактировать секреты"; \
|
||||
echo " make vault show - показать секреты"; \
|
||||
echo " make vault delete - удалить секреты"; \
|
||||
echo " make vault encrypt - зашифровать файл"; \
|
||||
echo " make vault decrypt - расшифровать файл"; \
|
||||
echo " make vault rekey - сменить пароль";; \
|
||||
esac
|
||||
|
||||
####################################################################################################
|
||||
@@ -153,5 +148,44 @@ git:
|
||||
NEW_BRANCH="$$BRANCH_NAME"; \
|
||||
git checkout -b $$NEW_BRANCH; \
|
||||
echo "Создана и переключена на новую ветку: $$NEW_BRANCH";; \
|
||||
*) echo "Unknown action. Available actions: push, pull, cluster-branch";; \
|
||||
esac
|
||||
*) \
|
||||
clear; \
|
||||
echo "Доступные команды:"; \
|
||||
echo " make git push - запушить изменения"; \
|
||||
echo " make git pull - получить изменения"; \
|
||||
echo " make git new - создать новую ветку";; \
|
||||
esac
|
||||
|
||||
####################################################################################################
|
||||
# Справка
|
||||
####################################################################################################
|
||||
help:
|
||||
@clear
|
||||
@echo "=========================================="
|
||||
@echo "AnsibleTemplate - Универсальная система"
|
||||
@echo "тестирования Ansible ролей"
|
||||
@echo "=========================================="
|
||||
@echo ""
|
||||
@echo "📁 Структура проекта:"
|
||||
@echo " scripts/ - Скрипты автоматизации"
|
||||
@echo " inventory/ - Инвентори файлы"
|
||||
@echo " molecule/universal/ - Molecule конфигурация"
|
||||
@echo " roles/ - Ansible роли"
|
||||
@echo " vars/ - Переменные"
|
||||
@echo ""
|
||||
@echo "🚀 Основные команды:"
|
||||
@echo " make molecule create - создать тестовое окружение"
|
||||
@echo " make molecule test - полный цикл тестирования"
|
||||
@echo " make molecule generateinventory - сгенерировать инвентори"
|
||||
@echo " make vault create - создать файл секретов"
|
||||
@echo " make git new - создать новую ветку"
|
||||
@echo ""
|
||||
@echo "📖 Для подробной справки:"
|
||||
@echo " make molecule - команды Molecule"
|
||||
@echo " make vault - команды Vault"
|
||||
@echo " make git - команды Git"
|
||||
@echo "=========================================="
|
||||
|
||||
# Пустые цели для совместимости
|
||||
view create edit show delete test lint deploy new advanced:
|
||||
@true
|
||||
Reference in New Issue
Block a user