.DEFAULT_GOAL := help .PHONY: install all help nixos infra-plan infra-apply infra-destroy infra-init-backends infra-init-all-backends nixos-image: ## Build a new NixOS image (snapshot) on Hetzner Cloud. Check README.md to see how VERSION= and BUILD= should be set @cd nixos; $(MAKE) $@ module-exists: @test -z "$(MODULE)" && { printf "Please provide a module, e.g. MODULE=environment\n"; exit 1; }; \ test -d "infrastructure/$(MODULE)" || { printf "The module \"%s\" does not exist!\n" "$(MODULE)"; exit 1; }; \ infra-plan: ## Run `terraform plan` inside of infrastructure/$(MODULE), e.g. `make infra-plan MODULE=ingress` @$(MAKE) module-exists MODULE="$(MODULE)" || exit 1; \ cd infrastructure/$(MODULE); \ terraform13.5 plan . infra-apply: ## Run `terraform apply` inside of infrastructure/$(MODULE), e.g. `make infra-apply MODULE=ingress` @$(MAKE) module-exists MODULE="$(MODULE)" || exit 1; \ cd infrastructure/$(MODULE); \ terraform13.5 apply . infra-destroy: ## Run `terraform destroy` inside of infrastructure/$(MODULE), e.g. `make infra-destroy MODULE=ingress` @$(MAKE) module-exists MODULE="$(MODULE)" || exit 1; \ cd infrastructure/$(MODULE); \ terraform13.5 destroy . infra-init-backends: ## Initialize the backend of one or more modules, e.g. `make infra-init-backends MODULES="compute ingress"` @get_value() { awk -v setting="$$1" -F"\"" '$$0 ~ setting {print $$4}' "$$2"; }; \ environment=$$(get_value "terraform_packer_environment" config.json); \ project=$$(get_value "terraform_gitlab_backend_project" secrets.json); \ username=$$(get_value "terraform_gitlab_backend_username" secrets.json); \ password=$$(get_value "terraform_gitlab_backend_password" secrets.json); \ cd infrastructure; \ for m in $(MODULES); do \ gitlab_address="https://gitlab.com/api/v4/projects/$$project/terraform/state/$$environment-$$m"; \ backend_params=""; \ backend_params="$$backend_params -backend-config=\"address=$$gitlab_address\""; \ backend_params="$$backend_params -backend-config=\"lock_address=$$gitlab_address/lock\""; \ backend_params="$$backend_params -backend-config=\"unlock_address=$$gitlab_address/lock\""; \ backend_params="$$backend_params -backend-config=\"username=$$username\""; \ backend_params="$$backend_params -backend-config=\"password=$$password\""; \ cd "$$m"; \ rm -rf .terraform; eval terraform13.5 init -reconfigure "$$backend_params" . ; \ cd ..; \ done; \ infra-init-all-backends: ## Initialize backends of all modules inside of the `infrastructure/` folder @modules=$$(ls infrastructure/modules | xargs) && $(MAKE) infra-init-backends MODULES="$$modules" all install help: @printf "Available targets\n" && \ grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'