diff --git a/stacks/aws/github/pipelines-bootstrap/terragrunt.stack.hcl b/stacks/aws/github/pipelines-bootstrap/terragrunt.stack.hcl index d479584..4438c33 100644 --- a/stacks/aws/github/pipelines-bootstrap/terragrunt.stack.hcl +++ b/stacks/aws/github/pipelines-bootstrap/terragrunt.stack.hcl @@ -3,6 +3,9 @@ locals { terragrunt_scale_catalog_url = try(values.terragrunt_scale_catalog_url, "github.com/gruntwork-io/terragrunt-scale-catalog") terragrunt_scale_catalog_ref = try(values.terragrunt_scale_catalog_ref, "v1.3.1") + // AWS account values + aws_account_id = values.aws_account_id + // OIDC values oidc_resource_prefix = try(values.oidc_resource_prefix, "pipelines") @@ -99,6 +102,9 @@ unit "plan_iam_role" { iam_openid_connect_provider_config_path = "../../oidc-provider" + // Used to generate accurate mock values; actual values come from dependencies + mock_iam_openid_connect_provider_arn = "arn:aws:iam::${local.aws_account_id}:oidc-provider/${local.github_token_actions_domain}" + name = "${local.oidc_resource_prefix}-plan" condition_operator = "StringLike" @@ -137,6 +143,10 @@ unit "plan_iam_role_policy_attachment" { iam_role_config_path = "../iam-role" iam_policy_config_path = "../iam-policy" + // Used to generate accurate mock values; actual values come from dependencies + mock_iam_role_name = "${local.oidc_resource_prefix}-plan" + mock_iam_policy_arn = "arn:aws:iam::${local.aws_account_id}:policy/${local.oidc_resource_prefix}-plan" + import_arn = local.plan_iam_role_policy_attachment_import_arn } } @@ -151,6 +161,9 @@ unit "apply_iam_role" { iam_openid_connect_provider_config_path = "../../oidc-provider" + // Used to generate accurate mock values; actual values come from dependencies + mock_iam_openid_connect_provider_arn = "arn:aws:iam::${local.aws_account_id}:oidc-provider/${local.github_token_actions_domain}" + name = "${local.oidc_resource_prefix}-apply" sub_key = local.sub_key @@ -189,6 +202,10 @@ unit "apply_iam_role_policy_attachment" { iam_role_config_path = "../iam-role" iam_policy_config_path = "../iam-policy" + // Used to generate accurate mock values; actual values come from dependencies + mock_iam_role_name = "${local.oidc_resource_prefix}-apply" + mock_iam_policy_arn = "arn:aws:iam::${local.aws_account_id}:policy/${local.oidc_resource_prefix}-apply" + import_arn = local.apply_iam_role_policy_attachment_import_arn } } diff --git a/stacks/aws/gitlab/pipelines-bootstrap/terragrunt.stack.hcl b/stacks/aws/gitlab/pipelines-bootstrap/terragrunt.stack.hcl index 63cc782..bcbbbc9 100644 --- a/stacks/aws/gitlab/pipelines-bootstrap/terragrunt.stack.hcl +++ b/stacks/aws/gitlab/pipelines-bootstrap/terragrunt.stack.hcl @@ -3,6 +3,9 @@ locals { terragrunt_scale_catalog_url = try(values.terragrunt_scale_catalog_url, "github.com/gruntwork-io/terragrunt-scale-catalog") terragrunt_scale_catalog_ref = try(values.terragrunt_scale_catalog_ref, "v1.3.1") + // AWS account values + aws_account_id = values.aws_account_id + // OIDC values oidc_resource_prefix = try(values.oidc_resource_prefix, "pipelines") @@ -73,6 +76,9 @@ unit "plan_iam_role" { iam_openid_connect_provider_config_path = "../../oidc-provider" + // Used to generate accurate mock values; actual values come from dependencies + mock_iam_openid_connect_provider_arn = "arn:aws:iam::${local.aws_account_id}:oidc-provider/${local.gitlab_server_domain}" + name = "${local.oidc_resource_prefix}-plan" condition_operator = "StringLike" @@ -106,6 +112,10 @@ unit "plan_iam_role_policy_attachment" { iam_role_config_path = "../iam-role" iam_policy_config_path = "../iam-policy" + + // Used to generate accurate mock values; actual values come from dependencies + mock_iam_role_name = "${local.oidc_resource_prefix}-plan" + mock_iam_policy_arn = "arn:aws:iam::${local.aws_account_id}:policy/${local.oidc_resource_prefix}-plan" } } @@ -119,6 +129,9 @@ unit "apply_iam_role" { iam_openid_connect_provider_config_path = "../../oidc-provider" + // Used to generate accurate mock values; actual values come from dependencies + mock_iam_openid_connect_provider_arn = "arn:aws:iam::${local.aws_account_id}:oidc-provider/${local.gitlab_server_domain}" + name = "${local.oidc_resource_prefix}-apply" sub_key = local.sub_key @@ -152,5 +165,9 @@ unit "apply_iam_role_policy_attachment" { iam_role_config_path = "../iam-role" iam_policy_config_path = "../iam-policy" + + // Used to generate accurate mock values; actual values come from dependencies + mock_iam_role_name = "${local.oidc_resource_prefix}-apply" + mock_iam_policy_arn = "arn:aws:iam::${local.aws_account_id}:policy/${local.oidc_resource_prefix}-apply" } } diff --git a/stacks/azure/gitlab/pipelines-bootstrap/terragrunt.stack.hcl b/stacks/azure/gitlab/pipelines-bootstrap/terragrunt.stack.hcl index f021308..7902fc7 100644 --- a/stacks/azure/gitlab/pipelines-bootstrap/terragrunt.stack.hcl +++ b/stacks/azure/gitlab/pipelines-bootstrap/terragrunt.stack.hcl @@ -291,4 +291,3 @@ unit "apply_service_principal_to_apply_custom_role_assignment" { description = "Assign custom apply role to service principal at the subscription scope" } } - diff --git a/templates/boilerplate/aws/github/account/{{ .AccountName }}/_global/bootstrap/terragrunt.stack.hcl b/templates/boilerplate/aws/github/account/{{ .AccountName }}/_global/bootstrap/terragrunt.stack.hcl index 9f8bc66..44a77b1 100644 --- a/templates/boilerplate/aws/github/account/{{ .AccountName }}/_global/bootstrap/terragrunt.stack.hcl +++ b/templates/boilerplate/aws/github/account/{{ .AccountName }}/_global/bootstrap/terragrunt.stack.hcl @@ -11,6 +11,8 @@ stack "bootstrap" { values = { terragrunt_scale_catalog_ref = "{{ .TerragruntScaleCatalogRef }}" + aws_account_id = "{{ .AWSAccountID }}" + oidc_resource_prefix = "{{ .OIDCResourcePrefix }}" github_org_name = "{{ .GitHubOrgName }}" @@ -30,6 +32,19 @@ stack "bootstrap" { state_bucket_name = local.account_hcl.locals.state_bucket_name + {{- if .OIDCProviderTags }} + oidc_provider_tags = {{ toJson .OIDCProviderTags }} + {{- end }} + + + + // ========================================================================= + // Import Variables + // + // The following variables are used to import existing AWS resources into + // OpenTofu/Terraform state. Once the stack has been applied and resources + // have been successfully imported, it is safe to remove this entire section. + // ========================================================================= {{- if .OIDCProviderImportExisting }} oidc_provider_import_arn = "arn:aws:iam::{{ .AWSAccountID }}:oidc-provider/ {{- if .Issuer -}} @@ -63,9 +78,9 @@ stack "bootstrap" { {{- if .ApplyIAMRolePolicyAttachmentImportExisting }} apply_iam_role_policy_attachment_import_arn = "{{ .OIDCResourcePrefix }}-apply/arn:aws:iam::{{ .AWSAccountID }}:policy/{{ .OIDCResourcePrefix }}-apply" {{- end }} + // ========================================================================= + // End Import Variables + // ========================================================================= - {{- if .OIDCProviderTags }} - oidc_provider_tags = {{ toJson .OIDCProviderTags }} - {{- end }} } } diff --git a/templates/boilerplate/aws/gitlab/account/{{ .AccountName }}/_global/bootstrap/terragrunt.stack.hcl b/templates/boilerplate/aws/gitlab/account/{{ .AccountName }}/_global/bootstrap/terragrunt.stack.hcl index 79ca0ee..77f38a4 100644 --- a/templates/boilerplate/aws/gitlab/account/{{ .AccountName }}/_global/bootstrap/terragrunt.stack.hcl +++ b/templates/boilerplate/aws/gitlab/account/{{ .AccountName }}/_global/bootstrap/terragrunt.stack.hcl @@ -9,6 +9,8 @@ stack "bootstrap" { path = "bootstrap" values = { + aws_account_id = "{{ .AWSAccountID }}" + oidc_resource_prefix = "{{ .OIDCResourcePrefix }}" gitlab_group_name = "{{ .GitLabGroupName }}" diff --git a/units/aws/oidc/iam-oidc-role/terragrunt.hcl b/units/aws/oidc/iam-oidc-role/terragrunt.hcl index ef3e4c9..0606964 100644 --- a/units/aws/oidc/iam-oidc-role/terragrunt.hcl +++ b/units/aws/oidc/iam-oidc-role/terragrunt.hcl @@ -22,7 +22,7 @@ dependency "iam_openid_connect_provider" { config_path = values.iam_openid_connect_provider_config_path mock_outputs = { - arn = "arn:aws:iam::123456789012:oidc-provider/mock-oidc-provider" + arn = try(values.mock_iam_openid_connect_provider_arn, "arn:aws:iam::123456789012:oidc-provider/mock-oidc-provider") } } diff --git a/units/aws/oidc/iam-role-policy-attachment/terragrunt.hcl b/units/aws/oidc/iam-role-policy-attachment/terragrunt.hcl index c468d97..b8dd882 100644 --- a/units/aws/oidc/iam-role-policy-attachment/terragrunt.hcl +++ b/units/aws/oidc/iam-role-policy-attachment/terragrunt.hcl @@ -10,7 +10,7 @@ dependency "iam_role" { config_path = values.iam_role_config_path mock_outputs = { - name = "mock-role" + name = try(values.mock_iam_role_name, "mock-role") } } @@ -18,7 +18,7 @@ dependency "iam_policy" { config_path = values.iam_policy_config_path mock_outputs = { - arn = "arn:aws:iam::123456789012:policy/mock-policy" + arn = try(values.mock_iam_policy_arn, "arn:aws:iam::123456789012:policy/mock-policy") } }