diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-vpc/outputs.tf b/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-vpc/outputs.tf deleted file mode 100644 index 36b1103e..00000000 --- a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-vpc/outputs.tf +++ /dev/null @@ -1,19 +0,0 @@ -output "vpc_id" { - value = module.dev_vpc.vpc_id - description = "VPC ID for dev environment" -} - -output "public_subnet_ids" { - value = module.dev_vpc.public_subnet_ids - description = "Public Subnets for dev" -} - -output "private_subnet_ids" { - value = module.dev_vpc.private_subnet_ids - description = "Private Subnets for dev" -} - -output "nat_gateway_id" { - value = module.dev_vpc.nat_gateway_id - description = "NAT Gateway for dev" -} diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-alb/main.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/alb/main.tf similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-alb/main.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/alb/main.tf diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-alb/outputs.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/alb/outputs.tf similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-alb/outputs.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/alb/outputs.tf diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-ec2/.gitignore b/iac-template/terraform-hcl-standard/aws-cloud/instance/ec2/.gitignore similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-ec2/.gitignore rename to iac-template/terraform-hcl-standard/aws-cloud/instance/ec2/.gitignore diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-ec2/Makefile b/iac-template/terraform-hcl-standard/aws-cloud/instance/ec2/Makefile similarity index 90% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-ec2/Makefile rename to iac-template/terraform-hcl-standard/aws-cloud/instance/ec2/Makefile index fab1f518..25da5340 100644 --- a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-ec2/Makefile +++ b/iac-template/terraform-hcl-standard/aws-cloud/instance/ec2/Makefile @@ -1,4 +1,4 @@ -# envs/dev-ec2/Makefile +# instance/ec2/Makefile render: python ../../render_provider_backend.py diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-ec2/main.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/ec2/main.tf similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-ec2/main.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/ec2/main.tf diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-ec2/outputs.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/ec2/outputs.tf similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-ec2/outputs.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/ec2/outputs.tf diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-kafka/.gitignore b/iac-template/terraform-hcl-standard/aws-cloud/instance/kafka/.gitignore similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-kafka/.gitignore rename to iac-template/terraform-hcl-standard/aws-cloud/instance/kafka/.gitignore diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-kafka/Makefile b/iac-template/terraform-hcl-standard/aws-cloud/instance/kafka/Makefile similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-kafka/Makefile rename to iac-template/terraform-hcl-standard/aws-cloud/instance/kafka/Makefile diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-kafka/main.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/kafka/main.tf similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-kafka/main.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/kafka/main.tf diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-kafka/outputs.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/kafka/outputs.tf similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-kafka/outputs.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/kafka/outputs.tf diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-landingzone/.gitignore b/iac-template/terraform-hcl-standard/aws-cloud/instance/landingzone/.gitignore similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-landingzone/.gitignore rename to iac-template/terraform-hcl-standard/aws-cloud/instance/landingzone/.gitignore diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-landingzone/Makefile b/iac-template/terraform-hcl-standard/aws-cloud/instance/landingzone/Makefile similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-landingzone/Makefile rename to iac-template/terraform-hcl-standard/aws-cloud/instance/landingzone/Makefile diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-landingzone/main.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/landingzone/main.tf similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-landingzone/main.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/landingzone/main.tf diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-nlb/main.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/nlb/main.tf similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-nlb/main.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/nlb/main.tf diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-nlb/outputs.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/nlb/outputs.tf similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-nlb/outputs.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/nlb/outputs.tf diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-rds/.terraform.lock.hcl b/iac-template/terraform-hcl-standard/aws-cloud/instance/rds/.terraform.lock.hcl similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-rds/.terraform.lock.hcl rename to iac-template/terraform-hcl-standard/aws-cloud/instance/rds/.terraform.lock.hcl diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-rds/Makefile b/iac-template/terraform-hcl-standard/aws-cloud/instance/rds/Makefile similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-rds/Makefile rename to iac-template/terraform-hcl-standard/aws-cloud/instance/rds/Makefile diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-rds/main.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/rds/main.tf similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-rds/main.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/rds/main.tf diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-rds/outputs.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/rds/outputs.tf similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-rds/outputs.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/rds/outputs.tf diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-redis/main.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/redis/main.tf similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-redis/main.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/redis/main.tf diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-redis/outputs.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/redis/outputs.tf similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-redis/outputs.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/redis/outputs.tf diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-object/.gitignore b/iac-template/terraform-hcl-standard/aws-cloud/instance/role/.gitignore similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-object/.gitignore rename to iac-template/terraform-hcl-standard/aws-cloud/instance/role/.gitignore diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-role/Makefile b/iac-template/terraform-hcl-standard/aws-cloud/instance/role/Makefile similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-role/Makefile rename to iac-template/terraform-hcl-standard/aws-cloud/instance/role/Makefile diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-role/main.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/role/main.tf similarity index 66% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-role/main.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/role/main.tf index df15c4e2..f84c1148 100644 --- a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-role/main.tf +++ b/iac-template/terraform-hcl-standard/aws-cloud/instance/role/main.tf @@ -5,7 +5,7 @@ locals { } -data "aws_iam_policy_document" "dev_assume" { +data "aws_iam_policy_document" "assume" { statement { actions = ["sts:AssumeRole"] @@ -16,11 +16,11 @@ data "aws_iam_policy_document" "dev_assume" { } } -module "dev_role" { +module "role" { source = "../../modules/iam" - name = "dev-app-role" - assume_role_policy = data.aws_iam_policy_document.dev_assume.json + name = "app-role" + assume_role_policy = data.aws_iam_policy_document.assume.json tags = local.account.tags } diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-role/outputs.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/role/outputs.tf similarity index 67% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-role/outputs.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/role/outputs.tf index f44c3eb9..97d8e789 100644 --- a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-role/outputs.tf +++ b/iac-template/terraform-hcl-standard/aws-cloud/instance/role/outputs.tf @@ -1,9 +1,9 @@ output "iam_role_arn" { description = "IAM role ARN created for Terraform deployment" - value = module.dev_role.arn + value = module.role.arn } output "iam_role_name" { description = "IAM role name" - value = module.dev_role.name + value = module.role.name } diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-role/.gitignore b/iac-template/terraform-hcl-standard/aws-cloud/instance/s3/.gitignore similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-role/.gitignore rename to iac-template/terraform-hcl-standard/aws-cloud/instance/s3/.gitignore diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-object/Makefile b/iac-template/terraform-hcl-standard/aws-cloud/instance/s3/Makefile similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-object/Makefile rename to iac-template/terraform-hcl-standard/aws-cloud/instance/s3/Makefile diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-object/main.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/s3/main.tf similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-object/main.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/s3/main.tf diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-object/outputs.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/s3/outputs.tf similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-object/outputs.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/s3/outputs.tf diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-vpc/.terraform.lock.hcl b/iac-template/terraform-hcl-standard/aws-cloud/instance/vpc/.terraform.lock.hcl similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-vpc/.terraform.lock.hcl rename to iac-template/terraform-hcl-standard/aws-cloud/instance/vpc/.terraform.lock.hcl diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-vpc/Makefile b/iac-template/terraform-hcl-standard/aws-cloud/instance/vpc/Makefile similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-vpc/Makefile rename to iac-template/terraform-hcl-standard/aws-cloud/instance/vpc/Makefile diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-vpc/README.md b/iac-template/terraform-hcl-standard/aws-cloud/instance/vpc/README.md similarity index 100% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-vpc/README.md rename to iac-template/terraform-hcl-standard/aws-cloud/instance/vpc/README.md diff --git a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-vpc/main.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/vpc/main.tf similarity index 95% rename from iac-template/terraform-hcl-standard/aws-cloud/envs/dev-vpc/main.tf rename to iac-template/terraform-hcl-standard/aws-cloud/instance/vpc/main.tf index a31eee32..f6516642 100644 --- a/iac-template/terraform-hcl-standard/aws-cloud/envs/dev-vpc/main.tf +++ b/iac-template/terraform-hcl-standard/aws-cloud/instance/vpc/main.tf @@ -8,7 +8,7 @@ locals { ) } -module "dev_vpc" { +module "vpc" { source = "../../modules/vpc" vpc_cidr = local.vpc_conf.vpc_cidr diff --git a/iac-template/terraform-hcl-standard/aws-cloud/instance/vpc/outputs.tf b/iac-template/terraform-hcl-standard/aws-cloud/instance/vpc/outputs.tf new file mode 100644 index 00000000..9804b57f --- /dev/null +++ b/iac-template/terraform-hcl-standard/aws-cloud/instance/vpc/outputs.tf @@ -0,0 +1,19 @@ +output "vpc_id" { + value = module.vpc.vpc_id + description = "VPC ID for this instance" +} + +output "public_subnet_ids" { + value = module.vpc.public_subnet_ids + description = "Public Subnet IDs" +} + +output "private_subnet_ids" { + value = module.vpc.private_subnet_ids + description = "Private Subnet IDs" +} + +output "nat_gateway_id" { + value = module.vpc.nat_gateway_id + description = "NAT Gateway ID" +} diff --git a/iac-template/terraform-hcl-standard/aws-cloud/scripts/fix_instance_paths.sh b/iac-template/terraform-hcl-standard/aws-cloud/scripts/fix_instance_paths.sh new file mode 100755 index 00000000..ea01c44d --- /dev/null +++ b/iac-template/terraform-hcl-standard/aws-cloud/scripts/fix_instance_paths.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Normalize relative paths inside Terraform stacks after moving envs/* to instance/*. +# The script uses BSD sed on macOS or gsed if available. +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" +cd "${ROOT_DIR}" + +SED_CMD="$(command -v gsed || command -v sed)" + +FILES=$(find instance -type f \( -name "main.tf" -o -name "outputs.tf" -o -name "Makefile" \)) + +for FILE in ${FILES}; do + echo "Rewriting paths in ${FILE}" + # Point any lingering envs/dev-* references to the new instance layout + ${SED_CMD} -i'' -e 's|envs/dev-[a-zA-Z0-9_-]*/|instance/|g' "${FILE}" + + # Ensure YAML lookups target the config folder two levels up + ${SED_CMD} -i'' -e 's|file("${path.root}/../../config/|file("${path.root}/../../config/|g' "${FILE}" + + # Keep module sources anchored on the shared modules directory + ${SED_CMD} -i'' -e 's|source = "../../modules/|source = "../../modules/|g' "${FILE}" +done + +echo "Path normalization complete. Review git diff for any updates." diff --git a/iac-template/terraform-hcl-standard/aws-cloud/scripts/rename_envs_to_instance.sh b/iac-template/terraform-hcl-standard/aws-cloud/scripts/rename_envs_to_instance.sh new file mode 100755 index 00000000..c36b7838 --- /dev/null +++ b/iac-template/terraform-hcl-standard/aws-cloud/scripts/rename_envs_to_instance.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Move environment-specific stacks from envs/ into instance/ with environment-less names. +# Run from any directory; the script will change into the aws-cloud root automatically. +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" +cd "${ROOT_DIR}" + +declare -A RENAMES=( + ["envs/dev-vpc"]="instance/vpc" + ["envs/dev-rds"]="instance/rds" + ["envs/dev-redis"]="instance/redis" + ["envs/dev-kafka"]="instance/kafka" + ["envs/dev-nlb"]="instance/nlb" + ["envs/dev-alb"]="instance/alb" + ["envs/dev-object"]="instance/s3" + ["envs/dev-role"]="instance/role" + ["envs/dev-ec2"]="instance/ec2" + ["envs/dev-landingzone"]="instance/landingzone" +) + +mkdir -p instance + +for FROM in "${!RENAMES[@]}"; do + TO="${RENAMES[${FROM}]}" + if [[ -d "${FROM}" ]]; then + echo "Moving ${FROM} -> ${TO}" + git mv "${FROM}" "${TO}" + else + echo "Skipping ${FROM}; not found" >&2 + fi +done + +# Show the resulting structure for quick confirmation +printf "\nCurrent instance layout:\n" +find instance -maxdepth 2 -type d | sed 's/^/ /' diff --git a/iac-template/terraform-hcl-standard/aws-cloud/scripts/validate_instance_layout.sh b/iac-template/terraform-hcl-standard/aws-cloud/scripts/validate_instance_layout.sh new file mode 100755 index 00000000..e9385404 --- /dev/null +++ b/iac-template/terraform-hcl-standard/aws-cloud/scripts/validate_instance_layout.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" +cd "${ROOT_DIR}" + +RUN_TERRAFORM=false +if [[ ${1:-} == "--terraform-validate" ]]; then + RUN_TERRAFORM=true +fi + +status=0 + +if [[ -d envs ]]; then + ORPHANS=$(find envs -maxdepth 1 -type d -name 'dev-*' ! -path 'envs') + if [[ -n "${ORPHANS}" ]]; then + echo "[FAIL] Orphan environment directories detected under envs/:" + echo "${ORPHANS}" | sed 's/^/ - /' + status=1 + else + echo "[OK] No orphaned envs/dev-* directories remain." + fi +else + echo "[WARN] envs/ directory not found; skipping orphan check." +fi + +python <<'PY' +import pathlib +import re +import sys + +root = pathlib.Path(__file__).resolve().parents[1] +instance_dir = root / "instance" +issues = [] + +file_pattern = re.compile(r'file\("\$\{path\.root\}/([^"}]+)"\)') +source_pattern = re.compile(r'source\s*=\s*"([\.\./][^"]+)"') +rel_hint_pattern = re.compile(r'(\.\./\.\./[^"\s]+)') + +for tf in instance_dir.rglob("*.tf"): + text = tf.read_text() + + for match in file_pattern.finditer(text): + rel = match.group(1) + target = (tf.parent / rel).resolve() + if not target.exists(): + issues.append(f"{tf}: missing YAML target -> {target}") + + for match in source_pattern.finditer(text): + rel = match.group(1) + target = (tf.parent / rel).resolve() + if not target.exists(): + issues.append(f"{tf}: module source not found -> {target}") + + for match in rel_hint_pattern.finditer(text): + rel = match.group(1) + target = (tf.parent / rel).resolve() + if not target.exists(): + issues.append(f"{tf}: relative path hint not found -> {target}") + +if issues: + print("[FAIL] Broken paths detected:") + for issue in issues: + print(f" - {issue}") + sys.exit(1) +else: + print("[OK] Terraform files reference existing relative paths.") +PY + +if [[ ${RUN_TERRAFORM} == true ]]; then + if command -v terraform >/dev/null 2>&1; then + for DIR in instance/*; do + if [[ -d ${DIR} ]]; then + echo "Running terraform validate in ${DIR}" \ + && (cd "${DIR}" && terraform validate) || status=1 + fi + done + else + echo "[WARN] terraform binary not found; skipping validate step." + fi +else + echo "[INFO] Terraform validate skipped (enable with --terraform-validate)." +fi + +exit ${status}