|
| 1 | +.DEFAULT_GOAL := help |
| 2 | +REPO_BASE_DIR := $(shell git rev-parse --show-toplevel) |
| 3 | +include ${REPO_BASE_DIR}/scripts/common.Makefile |
| 4 | + |
| 5 | + |
| 6 | + |
| 7 | +# Internal VARIABLES ------------------------------------------------ |
| 8 | +TF_STATE_FILE := terraform/.terraform/terraform.tfstate |
| 9 | + |
| 10 | +terraform/main.tf: terraform/main.tf.j2 .venv $(CI_ENV_FILE) |
| 11 | + # generate $@ |
| 12 | + @$(call jinja, $<, $(CI_ENV_FILE), $@) |
| 13 | + # validate and format $@ |
| 14 | + |
| 15 | +terraform-init: $(TF_STATE_FILE) ## init terraform |
| 16 | + |
| 17 | +$(TF_STATE_FILE): $(CI_ENV_FILE) terraform/main.tf |
| 18 | + # terraform init |
| 19 | + @set -a; source $<; set +a; \ |
| 20 | + if [ "$${TF_STATE_BACKEND_TYPE}" = "local" ]; then \ |
| 21 | + terraform -chdir=./terraform init; \ |
| 22 | + else \ |
| 23 | + terraform -chdir=./terraform init -backend-config="access_key=$${TF_BACKEND_ACCESS_KEY}" -backend-config="secret_key=$${TF_BACKEND_SECRET_KEY}"; \ |
| 24 | + fi |
| 25 | + |
| 26 | +terraform/plan.cache: |
| 27 | + @echo "$@ file not found. Run 'make terraform-plan' to generate it." |
| 28 | + @exit 1 |
| 29 | + |
| 30 | +.PHONY: terraform-plan |
| 31 | +terraform-plan: $(CI_ENV_FILE) $(TF_STATE_FILE) ensure-grafana-online ## terraform plan |
| 32 | + # terraform plan |
| 33 | + @set -a; source $<; source $${REPO_CONFIG_LOCATION}; set +a; \ |
| 34 | + TF_VAR_aws_region=$${TF_AWS_REGION} TF_VAR_aws_access_key=$${TF_AWS_ACCESS_KEY_ID} TF_VAR_aws_secret_key=$${TF_AWS_SECRET_ACCESS_KEY} terraform -chdir=./terraform plan -out=plan.cache |
| 35 | + |
| 36 | +.PHONY: terraform-apply |
| 37 | +terraform-apply: $(CI_ENV_FILE) terraform/plan.cache $(TF_STATE_FILE) ensure-grafana-online ## terraform apply |
| 38 | + # terraform apply |
| 39 | + @set -a; source $<; set +a; \ |
| 40 | + TF_VAR_aws_region=$${TF_AWS_REGION} TF_VAR_aws_access_key=$${TF_AWS_ACCESS_KEY_ID} TF_VAR_aws_secret_key=$${TF_AWS_SECRET_ACCESS_KEY} terraform -chdir=./terraform apply plan.cache |
| 41 | + |
| 42 | +.PHONY: ensure-grafana-online |
| 43 | +ensure-grafana-online: |
| 44 | + @set -o allexport; \ |
| 45 | + source $(REPO_CONFIG_LOCATION); \ |
| 46 | + set +o allexport; \ |
| 47 | + url=$${TF_VAR_GRAFANA_URL}; \ |
| 48 | + echo "Waiting for grafana at $$url to become reachable..."; \ |
| 49 | + while true; do \ |
| 50 | + status_code=$$(curl -k -o /dev/null -s -w "%{http_code}" $$url); \ |
| 51 | + if [ "$$status_code" -ge 200 ] && [ "$$status_code" -lt 400 ]; then \ |
| 52 | + echo "Grafana is online"; \ |
| 53 | + break; \ |
| 54 | + else \ |
| 55 | + echo "Grafana still unreachable, waiting 5s for grafana to become reachable..."; \ |
| 56 | + sleep 5; \ |
| 57 | + fi; \ |
| 58 | +done; |
0 commit comments