SHELL := /bin/bash .DEFAULT_GOAL := help .PHONY: help doctor validate check tree bootstrap vault-init terraform-init terraform-plan terraform-apply check-terraform-inputs KUBE_CONTEXT ?= TF_ROOT ?= BACKEND_CONFIG ?= TF_DIR = infrastructure/live/dev-k3s/$(TF_ROOT) PLAN_FILE ?= $(CURDIR)/.local/terraform-plans/dev-k3s-$(TF_ROOT).tfplan help: ## 사용 가능한 명령을 표시합니다. @awk 'BEGIN {FS = ":.*## "; print "Usage: make "} /^[a-zA-Z_-]+:.*## / {printf " %-20s %s\n", $$1, $$2}' $(MAKEFILE_LIST) doctor: ## 현재 로컬 도구 상태를 확인합니다. @./scripts/doctor.sh validate: ## 템플릿 구조와 프로젝트별 GitOps/IaC 계약을 검증합니다. @./scripts/validate.sh check: validate ## CI와 동일한 전체 검증을 실행합니다. tree: ## 생성물과 Git 메타데이터를 제외한 구조를 표시합니다. @find . \ \( \ -name .build -o \ -name .cache -o \ -name .git -o \ -name .terraform -o \ -name .terragrunt-cache -o \ -name dist -o \ -name rendered -o \ -name tmp \ \) -prune -o \ -print | sort bootstrap: ## 확인된 kube context에 Argo CD와 root Application을 설치합니다. @test -n "$(KUBE_CONTEXT)" || (echo "KUBE_CONTEXT is required" >&2; exit 1) ./scripts/bootstrap-argocd.sh --context "$(KUBE_CONTEXT)" vault-init: ## 개발 Vault를 최초 초기화합니다. ./scripts/vault-init.sh init check-terraform-inputs: @case "$(TF_ROOT)" in \ vault-foundation|vault-workloads|vault-database) ;; \ *) echo "TF_ROOT must be vault-foundation, vault-workloads, or vault-database" >&2; exit 1 ;; \ esac @test -f "$(BACKEND_CONFIG)" || (echo "BACKEND_CONFIG must point to a readable backend file" >&2; exit 1) terraform-init: check-terraform-inputs ## 선택한 Vault Terraform root를 초기화합니다. terraform -chdir="$(TF_DIR)" init -input=false -reconfigure -backend-config="$(abspath $(BACKEND_CONFIG))" terraform-plan: terraform-init ## 검토 가능한 saved Terraform plan을 만듭니다. @mkdir -p "$(dir $(PLAN_FILE))" @umask 077; terraform -chdir="$(TF_DIR)" plan \ -input=false \ -lock-timeout=5m \ -out="$(PLAN_FILE)" terraform-apply: terraform-init ## 명시적으로 승인한 saved Terraform plan을 적용합니다. @test "$(APPROVE_APPLY)" = "dev-k3s/$(TF_ROOT)" || \ (echo "Set APPROVE_APPLY=dev-k3s/$(TF_ROOT) to continue" >&2; exit 1) @test -f "$(PLAN_FILE)" || \ (echo "Run terraform-plan first; approved plan is missing: $(PLAN_FILE)" >&2; exit 1) terraform -chdir="$(TF_DIR)" apply -input=false -lock-timeout=5m "$(PLAN_FILE)" @rm -f "$(PLAN_FILE)"