# Глобальные переменные IMAGE ?= ansible TAG ?= 0.1 REGISTRY ?= hub.cism-ms.ru # По умолчанию используем docker. Для локальной разработки используйте docker-compose RUN_MODE ?= docker # Определение команды 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 \ -e ANSIBLE_VAULT_PASSWORD_FILE=/ansible/vault-password.txt \ --privileged \ --workdir /ansible \ $(REGISTRY)/ansible/$(IMAGE) else $(error Invalid RUN_MODE. Use "docker-compose" or "docker") endif view create edit show delete test lint deploy new: @true #################################################################################################### # Управление контейнерами с помощью docker compose или docker run #################################################################################################### # Сборка docker-образов build: cp ~/.ssh/id_rsa . ifeq ($(RUN_MODE), docker-compose) docker compose build $(c) else docker build -t $(REGISTRY)/ansible/$(IMAGE) . endif rm id_rsa # Пересборка docker-образов rebuild: cp ~/.ssh/id_rsa . ifeq ($(RUN_MODE), docker-compose) docker compose build --no-cache $(c) else docker build --no-cache -t $(REGISTRY)/ansible/$(IMAGE) . endif rm id_rsa # Удаление docker-контейнеров с полной очисткой неактивных контейнеров prune: docker system prune -af release: cp ~/.ssh/id_rsa . docker login $(REGISTRY) docker buildx build -t $(REGISTRY)/ansible/$(IMAGE):$(TAG) --platform linux/amd64,linux/arm64 --push . rm id_rsa #################################################################################################### # Работа с ролью #################################################################################################### 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";; \ *) echo "Unknown action";; \ esac role: @case "$(word 2, $(MAKECMDGOALS))" in \ new) \ 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 - /ansible/roles/%s' "$$ROLE_NAME" >> molecule/default/converge.yml; \ printf "\n - $${ROLE_NAME}" >> roles/$$ROLE_NAME/deploy.yaml;; \ lint) \ 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) \ clear; \ echo "Running test roles..."; \ $(RUN) bash -c "ansible-vault decrypt --vault-password-file vault-password.txt vars/secrets.yml"; \ $(RUN) bash -c "molecule test --parallel"; \ $(RUN) bash -c "ansible-vault encrypt vars/secrets.yml --encrypt-vault-id default --vault-password-file vault-password.txt";; \ deploy) \ clear; \ echo "Deploying roles to production..."; \ $(RUN) bash -c "ansible-playbook /ansible/roles/deploy.yaml";; \ *) echo "Unknown action";; \ esac #################################################################################################### # Работа с Git #################################################################################################### push: git branch @read -p "Выберите ветку для пуша: " BRANCH; \ read -p "Введите описание коммита: " COMMIT; \ commitname=$$COMMIT; \ git add . ; \ git commit -m "$$commitname"; \ git push -u origin $$BRANCH; \ echo "Изменения внесены в Git" pull: git pull