01-terragrunt/root.hcl

locals {
  # default_values = read_terragrunt_config("${get_repo_root()}/default_values.hcl").locals
  default_values = read_terragrunt_config("${get_repo_root()}/blueprints/01-terragrunt/default_values.hcl").locals
  dir_levels     = ["../../../../..", "../../../..", "../../../..", "../../..", "../..", "..", ".", ]
 
  all_provider_configs = [for level in local.dir_levels : try(read_terragrunt_config("${get_original_terragrunt_dir()}/${level}/provider_config.hcl", "${get_repo_root()}/placeholder_config.hcl").locals, {})]
 
  providers_config = merge(local.default_values, local.all_provider_configs...)
 
  all_backend_configs = [for level in local.dir_levels : try(read_terragrunt_config("${get_original_terragrunt_dir()}/${level}/backend_config.hcl", "${get_repo_root()}/placeholder_config.hcl").locals, {})]
 
  backend_config = merge(local.default_values, local.all_backend_configs...)
 
  all_variables = [for level in local.dir_levels : try(read_terragrunt_config("${get_original_terragrunt_dir()}/${level}/variables.hcl", "${get_repo_root()}/placeholder_config.hcl").locals, {})]
}
 
inputs = merge(local.all_variables...)
 
# Generate versions block
generate "versions" {
  path      = "versions.tf"
  if_exists = "overwrite"
  disable   = try(local.providers_config.generate_versions_disable, false)
  contents  = <<EOF
    terraform {
      required_version = "${local.providers_config.terraform_version}"
 
      required_providers {
        %{if try(local.providers_config.aws_provider_enable, false)}
        aws = {
          source  = "${local.providers_config.aws_provider_source}"
          version = "${local.providers_config.aws_provider_version}"
        }
        %{endif}
      }
    }
EOF
}
 
 
generate "providers" {
  path      = "providers.tf"
  if_exists = "overwrite"
  contents  = <<EOF
    %{if try(local.providers_config.aws_provider_enable, false)}
      provider "aws" {
        region = "${local.providers_config.aws_provider_region}"
      }
    %{endif}
  EOF
}
 
remote_state {
  backend = "s3"
 
  generate = {
    path      = "backend.tf"
    if_exists = "overwrite_terragrunt"
  }
 
  config = {
    bucket = local.backend_config.backend_bucket
 
    key          = try(local.backend_config.backend_key, "${path_relative_to_include()}/terraform.tfstate")
    region       = local.backend_config.backend_region
    encrypt      = true
    use_lockfile = true
    kms_key_id   = try(local.backend_config.backend_kms_key_id != "" ? local.backend_config.backend_kms_key_id : null, null)
  }
}