diff --git a/blueprints/apigee/bigquery-analytics/README.md b/blueprints/apigee/bigquery-analytics/README.md index d674a841..5261f72e 100644 --- a/blueprints/apigee/bigquery-analytics/README.md +++ b/blueprints/apigee/bigquery-analytics/README.md @@ -105,5 +105,5 @@ module "test" { europe-west1 = "10.0.0.0/28" } } -# tftest modules=10 resources=65 +# tftest modules=10 resources=64 ``` diff --git a/blueprints/apigee/hybrid-gke/README.md b/blueprints/apigee/hybrid-gke/README.md index e2151d47..5d79f1f8 100644 --- a/blueprints/apigee/hybrid-gke/README.md +++ b/blueprints/apigee/hybrid-gke/README.md @@ -80,5 +80,5 @@ module "test" { project_id = "my-project" hostname = "test.myorg.org" } -# tftest modules=18 resources=62 +# tftest modules=18 resources=61 ``` diff --git a/blueprints/apigee/network-patterns/nb-glb-psc-neg-sb-psc-ilbl7-hybrid-neg/README.md b/blueprints/apigee/network-patterns/nb-glb-psc-neg-sb-psc-ilbl7-hybrid-neg/README.md index 8abca3c3..51534dda 100644 --- a/blueprints/apigee/network-patterns/nb-glb-psc-neg-sb-psc-ilbl7-hybrid-neg/README.md +++ b/blueprints/apigee/network-patterns/nb-glb-psc-neg-sb-psc-ilbl7-hybrid-neg/README.md @@ -79,5 +79,5 @@ module "test" { onprem_project_id = "my-onprem-project" hostname = "test.myorg.org" } -# tftest modules=14 resources=78 +# tftest modules=14 resources=77 ``` diff --git a/modules/apigee/README.md b/modules/apigee/README.md index 353fb528..5a8eb525 100644 --- a/modules/apigee/README.md +++ b/modules/apigee/README.md @@ -48,6 +48,7 @@ module "apigee" { europe-west3 = { runtime_ip_cidr_range = "10.0.8.0/22" troubleshooting_ip_cidr_range = "10.1.16.0/28" + enable_nat = true } } endpoint_attachments = { @@ -96,7 +97,7 @@ module "apigee" { } } } -# tftest modules=1 resources=9 +# tftest modules=1 resources=8 ``` ### New environment group @@ -109,7 +110,7 @@ module "apigee" { test = ["test.example.com"] } } -# tftest modules=1 resources=2 +# tftest modules=1 resources=1 ``` ### New environment @@ -125,7 +126,7 @@ module "apigee" { } } } -# tftest modules=1 resources=2 +# tftest modules=1 resources=1 ``` ### New instance @@ -141,7 +142,7 @@ module "apigee" { } } } -# tftest modules=1 resources=2 +# tftest modules=1 resources=1 ``` ### New endpoint attachment @@ -159,7 +160,7 @@ module "apigee" { } } } -# tftest modules=1 resources=2 +# tftest modules=1 resources=1 ``` ### Apigee add-ons @@ -179,13 +180,13 @@ module "apigee" { | name | description | type | required | default | |---|---|:---:|:---:|:---:| -| [project_id](variables.tf#L90) | Project ID. | string | ✓ | | +| [project_id](variables.tf#L95) | Project ID. | string | ✓ | | | [addons_config](variables.tf#L17) | Addons configuration. | object({…}) | | null | -| [endpoint_attachments](variables.tf#L29) | Endpoint attachments. | map(object({…})) | | null | -| [envgroups](variables.tf#L38) | Environment groups (NAME => [HOSTNAMES]). | map(list(string)) | | null | -| [environments](variables.tf#L44) | Environments. | map(object({…})) | | null | -| [instances](variables.tf#L62) | Instances ([REGION] => [INSTANCE]). | map(object({…})) | | null | -| [organization](variables.tf#L75) | Apigee organization. If set to null the organization must already exist. | object({…}) | | null | +| [endpoint_attachments](variables.tf#L29) | Endpoint attachments. | map(object({…})) | | {} | +| [envgroups](variables.tf#L39) | Environment groups (NAME => [HOSTNAMES]). | map(list(string)) | | {} | +| [environments](variables.tf#L46) | Environments. | map(object({…})) | | {} | +| [instances](variables.tf#L65) | Instances ([REGION] => [INSTANCE]). | map(object({…})) | | {} | +| [organization](variables.tf#L80) | Apigee organization. If set to null the organization must already exist. | object({…}) | | null | ## Outputs @@ -195,8 +196,9 @@ module "apigee" { | [envgroups](outputs.tf#L22) | Environment groups. | | | [environments](outputs.tf#L27) | Environment. | | | [instances](outputs.tf#L32) | Instances. | | -| [org_id](outputs.tf#L37) | Organization ID. | | -| [org_name](outputs.tf#L42) | Organization name. | | -| [organization](outputs.tf#L47) | Organization. | | -| [service_attachments](outputs.tf#L52) | Service attachments. | | +| [nat_ips](outputs.tf#L37) | NAT IP addresses used in instances. | | +| [org_id](outputs.tf#L45) | Organization ID. | | +| [org_name](outputs.tf#L50) | Organization name. | | +| [organization](outputs.tf#L55) | Organization. | | +| [service_attachments](outputs.tf#L60) | Service attachments. | | diff --git a/modules/apigee/main.tf b/modules/apigee/main.tf index e68c5f90..4a2e3d25 100644 --- a/modules/apigee/main.tf +++ b/modules/apigee/main.tf @@ -1,5 +1,5 @@ /** - * Copyright 2022 Google LLC + * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,12 +15,8 @@ */ locals { - org_id = try(google_apigee_organization.organization[0].id, "organizations/${var.project_id}") - org_name = try(google_apigee_organization.organization[0].name, var.project_id) - envgroups = coalesce(var.envgroups, {}) - environments = coalesce(var.environments, {}) - instances = coalesce(var.instances, {}) - endpoint_attachments = coalesce(var.endpoint_attachments, {}) + org_id = try(google_apigee_organization.organization[0].id, "organizations/${var.project_id}") + org_name = try(google_apigee_organization.organization[0].name, var.project_id) } resource "google_apigee_organization" "organization" { @@ -35,14 +31,14 @@ resource "google_apigee_organization" "organization" { } resource "google_apigee_envgroup" "envgroups" { - for_each = local.envgroups + for_each = var.envgroups name = each.key hostnames = each.value org_id = local.org_id } resource "google_apigee_environment" "environments" { - for_each = local.environments + for_each = var.environments name = each.key display_name = each.value.display_name description = each.value.description @@ -64,7 +60,7 @@ resource "google_apigee_environment" "environments" { } resource "google_apigee_envgroup_attachment" "envgroup_attachments" { - for_each = merge(concat([for k1, v1 in local.environments : { + for_each = merge(concat([for k1, v1 in var.environments : { for v2 in coalesce(v1.envgroups, []) : "${k1}-${v2}" => { environment = k1 envgroup = v2 @@ -75,7 +71,7 @@ resource "google_apigee_envgroup_attachment" "envgroup_attachments" { } resource "google_apigee_environment_iam_binding" "binding" { - for_each = merge(concat([for k1, v1 in local.environments : { + for_each = merge(concat([for k1, v1 in var.environments : { for k2, v2 in coalesce(v1.iam, {}) : "${k1}-${k2}" => { environment = "${k1}" role = k2 @@ -89,7 +85,7 @@ resource "google_apigee_environment_iam_binding" "binding" { } resource "google_apigee_instance" "instances" { - for_each = local.instances + for_each = var.instances name = "instance-${each.key}" display_name = each.value.display_name description = each.value.description @@ -100,8 +96,18 @@ resource "google_apigee_instance" "instances" { consumer_accept_list = each.value.consumer_accept_list } +resource "google_apigee_nat_address" "apigee_nat" { + for_each = { + for k, v in var.instances : + k => google_apigee_instance.instances[k].id + if v.enable_nat + } + name = each.key + instance_id = each.value +} + resource "google_apigee_instance_attachment" "instance_attachments" { - for_each = merge(concat([for k1, v1 in local.environments : { + for_each = merge(concat([for k1, v1 in var.environments : { for v2 in coalesce(v1.regions, []) : "${k1}-${v2}" => { environment = k1 @@ -114,7 +120,7 @@ resource "google_apigee_instance_attachment" "instance_attachments" { } resource "google_apigee_endpoint_attachment" "endpoint_attachments" { - for_each = local.endpoint_attachments + for_each = var.endpoint_attachments org_id = local.org_id endpoint_attachment_id = each.key location = each.value.region @@ -122,39 +128,37 @@ resource "google_apigee_endpoint_attachment" "endpoint_attachments" { } resource "google_apigee_addons_config" "test_organization" { - org = local.org_name - dynamic "addons_config" { - for_each = var.addons_config == null ? [] : [""] - content { - dynamic "advanced_api_ops_config" { - for_each = var.addons_config.advanced_api_ops ? [] : [""] - content { - enabled = true - } + for_each = toset(var.addons_config == null ? [] : [""]) + org = local.org_name + addons_config { + dynamic "advanced_api_ops_config" { + for_each = var.addons_config.advanced_api_ops ? [] : [""] + content { + enabled = true } - dynamic "api_security_config" { - for_each = var.addons_config.api_security ? [] : [""] - content { - enabled = true - } + } + dynamic "api_security_config" { + for_each = var.addons_config.api_security ? [] : [""] + content { + enabled = true } - dynamic "connectors_platform_config" { - for_each = var.addons_config.connectors_platform ? [] : [""] - content { - enabled = true - } + } + dynamic "connectors_platform_config" { + for_each = var.addons_config.connectors_platform ? [] : [""] + content { + enabled = true } - dynamic "integration_config" { - for_each = var.addons_config.integration ? [] : [""] - content { - enabled = true - } + } + dynamic "integration_config" { + for_each = var.addons_config.integration ? [] : [""] + content { + enabled = true } - dynamic "monetization_config" { - for_each = var.addons_config.monetization ? [] : [""] - content { - enabled = true - } + } + dynamic "monetization_config" { + for_each = var.addons_config.monetization ? [] : [""] + content { + enabled = true } } } diff --git a/modules/apigee/outputs.tf b/modules/apigee/outputs.tf index 74ad9f18..eb3ab2cc 100644 --- a/modules/apigee/outputs.tf +++ b/modules/apigee/outputs.tf @@ -1,5 +1,5 @@ /** - * Copyright 2022 Google LLC + * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,6 +34,14 @@ output "instances" { value = try(google_apigee_instance.instances, null) } +output "nat_ips" { + description = "NAT IP addresses used in instances." + value = { + for k, v in google_apigee_nat_address.apigee_nat : + k => v.ip_address + } +} + output "org_id" { description = "Organization ID." value = local.org_id diff --git a/modules/apigee/variables.tf b/modules/apigee/variables.tf index 4c2f0308..c5832e33 100644 --- a/modules/apigee/variables.tf +++ b/modules/apigee/variables.tf @@ -1,5 +1,5 @@ /** - * Copyright 2022 Google LLC + * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,13 +32,15 @@ variable "endpoint_attachments" { region = string service_attachment = string })) - default = null + default = {} + nullable = false } variable "envgroups" { description = "Environment groups (NAME => [HOSTNAMES])." type = map(list(string)) - default = null + default = {} + nullable = false } variable "environments" { @@ -56,7 +58,8 @@ variable "environments" { envgroups = optional(list(string)) regions = optional(list(string)) })) - default = null + default = {} + nullable = false } variable "instances" { @@ -68,8 +71,10 @@ variable "instances" { troubleshooting_ip_cidr_range = string disk_encryption_key = optional(string) consumer_accept_list = optional(list(string)) + enable_nat = optional(bool, false) })) - default = null + default = {} + nullable = false } variable "organization" {