diff --git a/blueprints/data-solutions/sqlserver-alwayson/README.md b/blueprints/data-solutions/sqlserver-alwayson/README.md index 7fd3231b..96937cbc 100644 --- a/blueprints/data-solutions/sqlserver-alwayson/README.md +++ b/blueprints/data-solutions/sqlserver-alwayson/README.md @@ -18,7 +18,6 @@ and to `C:\GcpSetupLog.txt` file. - ## Files | name | description | modules | @@ -66,10 +65,8 @@ and to `C:\GcpSetupLog.txt` file. | name | description | sensitive | |---|---|:---:| -| [instructions](outputs.tf#L19) | List of steps to follow after applying. | | - +| [instructions](outputs.tf#L22) | List of steps to follow after applying. | | - ## Test ```hcl diff --git a/blueprints/data-solutions/sqlserver-alwayson/outputs.tf b/blueprints/data-solutions/sqlserver-alwayson/outputs.tf index 1856f823..c9722b11 100644 --- a/blueprints/data-solutions/sqlserver-alwayson/outputs.tf +++ b/blueprints/data-solutions/sqlserver-alwayson/outputs.tf @@ -1,4 +1,4 @@ -# 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. @@ -13,7 +13,10 @@ # limitations under the License. locals { - loadbalancer_outputs = [for aog in var.always_on_groups : format("%s (%s)", module.listener-ilb[aog].forwarding_rule_address, aog)] + loadbalancer_outputs = [ + for aog, ilb in module.listener-ilb + : format("%s (%s)", ilb.forwarding_rule_addresses[""], aog) + ] } output "instructions" { diff --git a/blueprints/data-solutions/sqlserver-alwayson/vpc.tf b/blueprints/data-solutions/sqlserver-alwayson/vpc.tf index 5c4a15b0..d2500652 100644 --- a/blueprints/data-solutions/sqlserver-alwayson/vpc.tf +++ b/blueprints/data-solutions/sqlserver-alwayson/vpc.tf @@ -141,7 +141,11 @@ module "listener-ilb" { region = var.region name = "${var.prefix}-${each.value}-ilb" service_label = "${var.prefix}-${each.value}-ilb" - address = local.internal_address_ips["${var.prefix}-lb-${each.value}"] + forwarding_rules_config = { + "" = { + address = local.internal_address_ips["${var.prefix}-lb-${each.value}"] + } + } vpc_config = { network = local.network subnetwork = local.subnetwork diff --git a/blueprints/networking/filtering-proxy-psc/main.tf b/blueprints/networking/filtering-proxy-psc/main.tf index 319217cd..6908197f 100644 --- a/blueprints/networking/filtering-proxy-psc/main.tf +++ b/blueprints/networking/filtering-proxy-psc/main.tf @@ -106,7 +106,7 @@ resource "google_compute_service_attachment" "service_attachment" { enable_proxy_protocol = true connection_preference = "ACCEPT_MANUAL" nat_subnets = [module.vpc.subnets_psc["${var.region}/psc"].self_link] - target_service = module.squid-ilb.forwarding_rule_self_link + target_service = module.squid-ilb.forwarding_rule_self_links[""] consumer_accept_lists { project_id_or_num = module.project.project_id connection_limit = 10 @@ -206,8 +206,12 @@ module "squid-ilb" { project_id = module.project.project_id region = var.region name = "squid-ilb" - ports = [3128] service_label = "squid-ilb" + forwarding_rules_config = { + "" = { + ports = [3128] + } + } vpc_config = { network = module.vpc.self_link subnetwork = module.vpc.subnet_self_links["${var.region}/proxy"] diff --git a/blueprints/networking/filtering-proxy/main.tf b/blueprints/networking/filtering-proxy/main.tf index b9072a21..107ca1f7 100644 --- a/blueprints/networking/filtering-proxy/main.tf +++ b/blueprints/networking/filtering-proxy/main.tf @@ -17,7 +17,7 @@ locals { squid_address = ( var.mig - ? module.squid-ilb.0.forwarding_rule_address + ? module.squid-ilb.0.forwarding_rule_addresses[""] : module.squid-vm.internal_ip ) } @@ -210,8 +210,12 @@ module "squid-ilb" { project_id = module.project-host.project_id region = var.region name = "squid-ilb" - ports = [3128] service_label = "squid-ilb" + forwarding_rules_config = { + "" = { + ports = [3128] + } + } vpc_config = { network = module.vpc.self_link subnetwork = module.vpc.subnet_self_links["${var.region}/proxy"] diff --git a/blueprints/networking/glb-hybrid-neg-internal/glb.tf b/blueprints/networking/glb-hybrid-neg-internal/glb.tf index e071e7e6..b8edd35a 100644 --- a/blueprints/networking/glb-hybrid-neg-internal/glb.tf +++ b/blueprints/networking/glb-hybrid-neg-internal/glb.tf @@ -44,7 +44,7 @@ module "hybrid-glb" { endpoints = { primary = { ip_address = (var.ilb_create - ? module.test_vm_ilbs["primary"].forwarding_rule_address + ? module.test_vm_ilbs["primary"].forwarding_rule_addresses[""] : module.test_vms["primary"].internal_ip ) port = 80 @@ -59,7 +59,7 @@ module "hybrid-glb" { endpoints = { secondary = { ip_address = (var.ilb_create - ? module.test_vm_ilbs["secondary"].forwarding_rule_address + ? module.test_vm_ilbs["secondary"].forwarding_rule_addresses[""] : module.test_vms["secondary"].internal_ip ) port = 80 diff --git a/blueprints/networking/glb-hybrid-neg-internal/main.tf b/blueprints/networking/glb-hybrid-neg-internal/main.tf index 55600156..3a7551ff 100644 --- a/blueprints/networking/glb-hybrid-neg-internal/main.tf +++ b/blueprints/networking/glb-hybrid-neg-internal/main.tf @@ -53,12 +53,12 @@ module "vpc_landing_untrusted" { spoke1-primary = { dest_range = var.ip_config.spoke_primary next_hop_type = "ilb" - next_hop = module.nva_untrusted_ilbs["primary"].forwarding_rule_self_link + next_hop = module.nva_untrusted_ilbs["primary"].forwarding_rule_self_links[""] } spoke1-secondary = { dest_range = var.ip_config.spoke_secondary next_hop_type = "ilb" - next_hop = module.nva_untrusted_ilbs["secondary"].forwarding_rule_self_link + next_hop = module.nva_untrusted_ilbs["secondary"].forwarding_rule_self_links[""] } } diff --git a/blueprints/networking/ilb-next-hop/gateways.tf b/blueprints/networking/ilb-next-hop/gateways.tf index 458b995d..2e99956e 100644 --- a/blueprints/networking/ilb-next-hop/gateways.tf +++ b/blueprints/networking/ilb-next-hop/gateways.tf @@ -67,7 +67,11 @@ module "ilb-left" { network = module.vpc-left.self_link subnetwork = values(module.vpc-left.subnet_self_links)[0] } - address = local.addresses.ilb-left + forwarding_rules_config = { + "" = { + address = local.addresses.ilb-left + } + } backend_service_config = { session_affinity = var.ilb_session_affinity } @@ -91,7 +95,11 @@ module "ilb-right" { network = module.vpc-right.self_link subnetwork = values(module.vpc-right.subnet_self_links)[0] } - address = local.addresses.ilb-right + forwarding_rules_config = { + "" = { + address = local.addresses.ilb-right + } + } backend_service_config = { session_affinity = var.ilb_session_affinity } diff --git a/blueprints/networking/ilb-next-hop/outputs.tf b/blueprints/networking/ilb-next-hop/outputs.tf index c00282ae..c69501d9 100644 --- a/blueprints/networking/ilb-next-hop/outputs.tf +++ b/blueprints/networking/ilb-next-hop/outputs.tf @@ -18,8 +18,8 @@ output "addresses" { description = "IP addresses." value = { gw = [for z, mod in module.gw : mod.internal_ip] - ilb-left = module.ilb-left.forwarding_rule_address - ilb-right = module.ilb-right.forwarding_rule_address + ilb-left = module.ilb-left.forwarding_rule_addresses[""] + ilb-right = module.ilb-right.forwarding_rule_addresses[""] vm-left = [for z, mod in module.vm-left : mod.internal_ip] vm-right = [for z, mod in module.vm-right : mod.internal_ip] } diff --git a/blueprints/networking/ilb-next-hop/vpc-left.tf b/blueprints/networking/ilb-next-hop/vpc-left.tf index 4cc73159..13d4501d 100644 --- a/blueprints/networking/ilb-next-hop/vpc-left.tf +++ b/blueprints/networking/ilb-next-hop/vpc-left.tf @@ -29,7 +29,7 @@ module "vpc-left" { to-right = { dest_range = var.ip_ranges.right next_hop_type = "ilb" - next_hop = module.ilb-left.forwarding_rule.self_link + next_hop = module.ilb-left.forwarding_rule_self_links[""] } } } diff --git a/blueprints/networking/ilb-next-hop/vpc-right.tf b/blueprints/networking/ilb-next-hop/vpc-right.tf index 5483d34a..e9cd4cd9 100644 --- a/blueprints/networking/ilb-next-hop/vpc-right.tf +++ b/blueprints/networking/ilb-next-hop/vpc-right.tf @@ -30,7 +30,7 @@ module "vpc-right" { dest_range = var.ip_ranges.left priority = var.ilb_right_enable ? 900 : 1100 next_hop_type = "ilb" - next_hop = module.ilb-right.forwarding_rule.self_link + next_hop = module.ilb-right.forwarding_rule_self_links[""] } to-left-gw-1 = { dest_range = var.ip_ranges.left diff --git a/fast/stages/2-networking-c-nva/nva.tf b/fast/stages/2-networking-c-nva/nva.tf index 9d099282..595b72b7 100644 --- a/fast/stages/2-networking-c-nva/nva.tf +++ b/fast/stages/2-networking-c-nva/nva.tf @@ -129,7 +129,11 @@ module "ilb-nva-untrusted" { region = each.value.region name = "nva-untrusted-${each.key}" service_label = var.prefix - global_access = true + forwarding_rules_config = { + "" = { + global_access = true + } + } vpc_config = { network = module.landing-untrusted-vpc.self_link subnetwork = module.landing-untrusted-vpc.subnet_self_links[each.value.subnet] @@ -160,7 +164,11 @@ module "ilb-nva-trusted" { region = each.value.region name = "nva-trusted-${each.key}" service_label = var.prefix - global_access = true + forwarding_rules_config = { + "" = { + global_access = true + } + } vpc_config = { network = module.landing-trusted-vpc.self_link subnetwork = module.landing-trusted-vpc.subnet_self_links[each.value.subnet] diff --git a/fast/stages/2-networking-c-nva/spoke-dev.tf b/fast/stages/2-networking-c-nva/spoke-dev.tf index 0f6e8b8f..b90ed4dc 100644 --- a/fast/stages/2-networking-c-nva/spoke-dev.tf +++ b/fast/stages/2-networking-c-nva/spoke-dev.tf @@ -65,28 +65,28 @@ module "dev-spoke-vpc" { priority = 1000 tags = ["primary"] next_hop_type = "ilb" - next_hop = module.ilb-nva-trusted["primary"].forwarding_rule_address + next_hop = module.ilb-nva-trusted["primary"].forwarding_rule_addresses[""] } nva-secondary-to-secondary = { dest_range = "0.0.0.0/0" priority = 1000 tags = ["secondary"] next_hop_type = "ilb" - next_hop = module.ilb-nva-trusted["secondary"].forwarding_rule_address + next_hop = module.ilb-nva-trusted["secondary"].forwarding_rule_addresses[""] } nva-primary-to-secondary = { dest_range = "0.0.0.0/0" priority = 1001 tags = ["primary"] next_hop_type = "ilb" - next_hop = module.ilb-nva-trusted["primary"].forwarding_rule_address + next_hop = module.ilb-nva-trusted["primary"].forwarding_rule_addresses[""] } nva-secondary-to-primary = { dest_range = "0.0.0.0/0" priority = 1001 tags = ["secondary"] next_hop_type = "ilb" - next_hop = module.ilb-nva-trusted["secondary"].forwarding_rule_address + next_hop = module.ilb-nva-trusted["secondary"].forwarding_rule_addresses[""] } } } diff --git a/fast/stages/2-networking-c-nva/spoke-prod.tf b/fast/stages/2-networking-c-nva/spoke-prod.tf index 98959509..a4bdb1d2 100644 --- a/fast/stages/2-networking-c-nva/spoke-prod.tf +++ b/fast/stages/2-networking-c-nva/spoke-prod.tf @@ -64,28 +64,28 @@ module "prod-spoke-vpc" { priority = 1000 tags = ["primary"] next_hop_type = "ilb" - next_hop = module.ilb-nva-trusted["primary"].forwarding_rule_address + next_hop = module.ilb-nva-trusted["primary"].forwarding_rule_addresses[""] } nva-secondary-to-secondary = { dest_range = "0.0.0.0/0" priority = 1000 tags = ["secondary"] next_hop_type = "ilb" - next_hop = module.ilb-nva-trusted["secondary"].forwarding_rule_address + next_hop = module.ilb-nva-trusted["secondary"].forwarding_rule_addresses[""] } nva-primary-to-secondary = { dest_range = "0.0.0.0/0" priority = 1001 tags = ["primary"] next_hop_type = "ilb" - next_hop = module.ilb-nva-trusted["secondary"].forwarding_rule_address + next_hop = module.ilb-nva-trusted["secondary"].forwarding_rule_addresses[""] } nva-secondary-to-primary = { dest_range = "0.0.0.0/0" priority = 1001 tags = ["secondary"] next_hop_type = "ilb" - next_hop = module.ilb-nva-trusted["primary"].forwarding_rule_address + next_hop = module.ilb-nva-trusted["primary"].forwarding_rule_addresses[""] } } } diff --git a/modules/net-lb-int/README.md b/modules/net-lb-int/README.md index 02c4fbc8..f8f454ff 100644 --- a/modules/net-lb-int/README.md +++ b/modules/net-lb-int/README.md @@ -119,12 +119,16 @@ module "ilb" { project_id = var.project_id region = "europe-west1" name = "ilb-test" - protocol = "L3_DEFAULT" service_label = "ilb-test" vpc_config = { network = var.vpc.self_link subnetwork = var.subnet.self_link } + forwarding_rules_config = { + "" = { + protocol = "L3_DEFAULT" + } + } group_configs = { my-group = { zone = "europe-west1-b" @@ -141,6 +145,90 @@ module "ilb" { # tftest modules=1 resources=4 ``` +### Mutiple forwarding rules + +You can add more forwarding rules to your load balancer and override some forwarding rules defaults, including the global access policy, the IP protocol, the IP version and ports. + +The example adds two forwarding rules: + +- the first one, called `ilb-test-vip-one` exposes an IPv4 address, it listens on all ports, and allows connections from any region. +- the second one, called `ilb-test-vip-two` exposes an IPv4 address, it listens on port 80 and allows connections from the same region only. + + +```hcl +module "ilb" { + source = "./fabric/modules/net-lb-int" + project_id = var.project_id + region = "europe-west1" + name = "ilb-test" + service_label = "ilb-test" + vpc_config = { + network = var.vpc.self_link + subnetwork = var.subnet.self_link + } + forwarding_rules_config = { + vip-one = {} + vip-two = { + global_access = false + ports = [80] + } + } + group_configs = { + my-group = { + zone = "europe-west1-b" + instances = [ + "instance-1-self-link", + "instance-2-self-link" + ] + } + } + backends = [{ + group = module.ilb.groups.my-group.self_link + }] +} +# tftest modules=1 resources=5 +``` + +### Dual stack (IPv4 and IPv6) + +Your load balancer can use a combination of either or both IPv4 and IPv6 forwarding rules. +In this example we set the load balancer to work as dual stack, meaning it exposes both an IPv4 and an IPv6 address. + +```hcl +module "ilb" { + source = "./fabric/modules/net-lb-int" + project_id = var.project_id + region = "europe-west1" + name = "ilb-test" + service_label = "ilb-test" + vpc_config = { + network = var.vpc.self_link + subnetwork = var.subnet.self_link + } + forwarding_rules_config = { + ipv4 = { + version = "IPV4" + } + ipv6 = { + version = "IPV6" + } + } + group_configs = { + my-group = { + zone = "europe-west1-b" + instances = [ + "instance-1-self-link", + "instance-2-self-link" + ] + } + } + backends = [{ + group = module.ilb.groups.my-group.self_link + }] +} +# tftest modules=1 resources=5 +``` + ### End to end example This example spins up a simple HTTP server and combines four modules: @@ -192,7 +280,11 @@ module "ilb" { network = var.vpc.self_link subnetwork = var.subnet.self_link } - ports = [80] + forwarding_rules_config = { + "" = { + ports = [80] + } + } backends = [ for z, mod in module.instance-group : { group = mod.group.self_link @@ -212,22 +304,20 @@ module "ilb" { | name | description | type | required | default | |---|---|:---:|:---:|:---:| -| [name](variables.tf#L189) | Name used for all resources. | string | ✓ | | -| [project_id](variables.tf#L200) | Project id where resources will be created. | string | ✓ | | -| [region](variables.tf#L211) | GCP region. | string | ✓ | | -| [vpc_config](variables.tf#L222) | VPC-level configuration. | object({…}) | ✓ | | -| [address](variables.tf#L17) | Optional IP address used for the forwarding rule. | string | | null | -| [backend_service_config](variables.tf#L23) | Backend service level configuration. | object({…}) | | {} | -| [backends](variables.tf#L57) | Load balancer backends, balancing mode is one of 'CONNECTION' or 'UTILIZATION'. | list(object({…})) | | [] | -| [description](variables.tf#L76) | Optional description used for resources. | string | | "Terraform managed." | -| [global_access](variables.tf#L82) | Global access, defaults to false if not set. | bool | | null | -| [group_configs](variables.tf#L88) | Optional unmanaged groups to create. Can be referenced in backends via outputs. | map(object({…})) | | {} | -| [health_check](variables.tf#L100) | Name of existing health check to use, disables auto-created health check. | string | | null | -| [health_check_config](variables.tf#L106) | Optional auto-created health check configuration, use the output self-link to set it in the auto healing policy. Refer to examples for usage. | object({…}) | | {…} | -| [labels](variables.tf#L183) | Labels set on resources. | map(string) | | {} | -| [ports](variables.tf#L194) | Comma-separated ports, leave null to use all ports. | list(string) | | null | -| [protocol](variables.tf#L205) | Forwarding rule protocol used, defaults to TCP. | string | | "TCP" | -| [service_label](variables.tf#L216) | Optional prefix of the fully qualified forwarding rule name. | string | | null | +| [name](variables.tf#L192) | Name used for all resources. | string | ✓ | | +| [project_id](variables.tf#L197) | Project id where resources will be created. | string | ✓ | | +| [region](variables.tf#L208) | GCP region. | string | ✓ | | +| [vpc_config](variables.tf#L219) | VPC-level configuration. | object({…}) | ✓ | | +| [backend_service_config](variables.tf#L17) | Backend service level configuration. | object({…}) | | {} | +| [backends](variables.tf#L51) | Load balancer backends, balancing mode is one of 'CONNECTION' or 'UTILIZATION'. | list(object({…})) | | [] | +| [description](variables.tf#L70) | Optional description used for resources. | string | | "Terraform managed." | +| [forwarding_rules_config](variables.tf#L76) | The optional forwarding rules configuration. | map(object({…})) | | {…} | +| [group_configs](variables.tf#L91) | Optional unmanaged groups to create. Can be referenced in backends via outputs. | map(object({…})) | | {} | +| [health_check](variables.tf#L103) | Name of existing health check to use, disables auto-created health check. | string | | null | +| [health_check_config](variables.tf#L109) | Optional auto-created health check configuration, use the output self-link to set it in the auto healing policy. Refer to examples for usage. | object({…}) | | {…} | +| [labels](variables.tf#L186) | Labels set on resources. | map(string) | | {} | +| [protocol](variables.tf#L202) | Forwarding rule protocol used, defaults to TCP. | string | | "TCP" | +| [service_label](variables.tf#L213) | Optional prefix of the fully qualified forwarding rule name. | string | | null | ## Outputs @@ -236,13 +326,13 @@ module "ilb" { | [backend_service](outputs.tf#L17) | Backend resource. | | | [backend_service_id](outputs.tf#L22) | Backend id. | | | [backend_service_self_link](outputs.tf#L27) | Backend self link. | | -| [forwarding_rule](outputs.tf#L32) | Forwarding rule resource. | | -| [forwarding_rule_address](outputs.tf#L37) | Forwarding rule address. | | -| [forwarding_rule_self_link](outputs.tf#L42) | Forwarding rule self link. | | -| [group_self_links](outputs.tf#L47) | Optional unmanaged instance group self links. | | -| [groups](outputs.tf#L54) | Optional unmanaged instance group resources. | | -| [health_check](outputs.tf#L59) | Auto-created health-check resource. | | -| [health_check_self_id](outputs.tf#L64) | Auto-created health-check self id. | | -| [health_check_self_link](outputs.tf#L69) | Auto-created health-check self link. | | -| [id](outputs.tf#L74) | Fully qualified forwarding rule id. | | +| [forwarding_rule_addresses](outputs.tf#L32) | Forwarding rule address. | | +| [forwarding_rule_self_links](outputs.tf#L40) | Forwarding rule self links. | | +| [forwarding_rules](outputs.tf#L48) | Forwarding rule resources. | | +| [group_self_links](outputs.tf#L56) | Optional unmanaged instance group self links. | | +| [groups](outputs.tf#L63) | Optional unmanaged instance group resources. | | +| [health_check](outputs.tf#L68) | Auto-created health-check resource. | | +| [health_check_self_id](outputs.tf#L73) | Auto-created health-check self id. | | +| [health_check_self_link](outputs.tf#L78) | Auto-created health-check self link. | | +| [id](outputs.tf#L83) | Fully qualified forwarding rule ids. | | diff --git a/modules/net-lb-int/groups.tf b/modules/net-lb-int/groups.tf index 5bb71978..736dfc6f 100644 --- a/modules/net-lb-int/groups.tf +++ b/modules/net-lb-int/groups.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. diff --git a/modules/net-lb-int/health-check.tf b/modules/net-lb-int/health-check.tf index 88f9f6ea..c9525878 100644 --- a/modules/net-lb-int/health-check.tf +++ b/modules/net-lb-int/health-check.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. diff --git a/modules/net-lb-int/main.tf b/modules/net-lb-int/main.tf index eccb536e..9a55937d 100644 --- a/modules/net-lb-int/main.tf +++ b/modules/net-lb-int/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. @@ -25,24 +25,28 @@ locals { ) } -resource "google_compute_forwarding_rule" "default" { - provider = google-beta - project = var.project_id +resource "google_compute_forwarding_rule" "forwarding_rules" { + for_each = var.forwarding_rules_config + provider = google-beta + project = var.project_id + name = ( + each.key == "" ? var.name : "${var.name}-${each.key}" + ) region = var.region - name = var.name - description = var.description - ip_address = var.address - ip_protocol = var.protocol + description = each.value.description + ip_address = each.value.address + ip_protocol = each.value.protocol + ip_version = each.value.ip_version backend_service = ( google_compute_region_backend_service.default.self_link ) load_balancing_scheme = "INTERNAL" network = var.vpc_config.network - ports = var.ports # "nnnnn" or "nnnnn,nnnnn,nnnnn" max 5 + ports = each.value.ports # "nnnnn" or "nnnnn,nnnnn,nnnnn" max 5 subnetwork = var.vpc_config.subnetwork - allow_global_access = var.global_access + allow_global_access = each.value.global_access labels = var.labels - all_ports = var.ports == null ? true : null + all_ports = each.value.ports == null ? true : null service_label = var.service_label # is_mirroring_collector = false } diff --git a/modules/net-lb-int/outputs.tf b/modules/net-lb-int/outputs.tf index bab17b94..c4dabbb7 100644 --- a/modules/net-lb-int/outputs.tf +++ b/modules/net-lb-int/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. @@ -29,19 +29,28 @@ output "backend_service_self_link" { value = google_compute_region_backend_service.default.self_link } -output "forwarding_rule" { - description = "Forwarding rule resource." - value = google_compute_forwarding_rule.default -} - -output "forwarding_rule_address" { +output "forwarding_rule_addresses" { description = "Forwarding rule address." - value = google_compute_forwarding_rule.default.ip_address + value = { + for k, v in google_compute_forwarding_rule.forwarding_rules + : k => v.ip_address + } } -output "forwarding_rule_self_link" { - description = "Forwarding rule self link." - value = google_compute_forwarding_rule.default.self_link +output "forwarding_rule_self_links" { + description = "Forwarding rule self links." + value = { + for k, v in google_compute_forwarding_rule.forwarding_rules + : k => v.self_link + } +} + +output "forwarding_rules" { + description = "Forwarding rule resources." + value = { + for k, v in google_compute_forwarding_rule.forwarding_rules + : k => v + } } output "group_self_links" { @@ -72,6 +81,9 @@ output "health_check_self_link" { } output "id" { - description = "Fully qualified forwarding rule id." - value = google_compute_forwarding_rule.default.id + description = "Fully qualified forwarding rule ids." + value = { + for k, v in google_compute_forwarding_rule.forwarding_rules + : k => v.id + } } diff --git a/modules/net-lb-int/variables.tf b/modules/net-lb-int/variables.tf index d10f6dbd..644b9f01 100644 --- a/modules/net-lb-int/variables.tf +++ b/modules/net-lb-int/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. @@ -14,12 +14,6 @@ * limitations under the License. */ -variable "address" { - description = "Optional IP address used for the forwarding rule." - type = string - default = null -} - variable "backend_service_config" { description = "Backend service level configuration." type = object({ @@ -79,10 +73,19 @@ variable "description" { default = "Terraform managed." } -variable "global_access" { - description = "Global access, defaults to false if not set." - type = bool - default = null +variable "forwarding_rules_config" { + description = "The optional forwarding rules configuration." + type = map(object({ + address = optional(string) + description = optional(string) + global_access = optional(bool, true) + ip_version = optional(string) + ports = optional(list(string), null) + protocol = optional(string, "TCP") + })) + default = { + "" = {} + } } variable "group_configs" { @@ -191,12 +194,6 @@ variable "name" { type = string } -variable "ports" { - description = "Comma-separated ports, leave null to use all ports." - type = list(string) - default = null -} - variable "project_id" { description = "Project id where resources will be created." type = string diff --git a/tests/modules/net_lb_int/defaults.yaml b/tests/modules/net_lb_int/defaults.yaml index dcbc12d0..d35fa935 100644 --- a/tests/modules/net_lb_int/defaults.yaml +++ b/tests/modules/net_lb_int/defaults.yaml @@ -13,7 +13,7 @@ # limitations under the License. values: - google_compute_forwarding_rule.default: + google_compute_forwarding_rule.forwarding_rules[""]: all_ports: true ip_protocol: TCP labels: null diff --git a/tests/modules/net_lb_int/forwarding-rule.tfvars b/tests/modules/net_lb_int/forwarding-rule.tfvars index c204090e..492212d0 100644 --- a/tests/modules/net_lb_int/forwarding-rule.tfvars +++ b/tests/modules/net_lb_int/forwarding-rule.tfvars @@ -11,4 +11,10 @@ backends = [{ failover = false }] global_access = true -ports = [80] + +forwarding_rules_config = { + "port-80" = { + ports = [80] + } +} + diff --git a/tests/modules/net_lb_int/forwarding-rule.yaml b/tests/modules/net_lb_int/forwarding-rule.yaml index 3608afcd..c29bda27 100644 --- a/tests/modules/net_lb_int/forwarding-rule.yaml +++ b/tests/modules/net_lb_int/forwarding-rule.yaml @@ -13,7 +13,7 @@ # limitations under the License. values: - google_compute_forwarding_rule.default: + google_compute_forwarding_rule.forwarding_rules["port-80"]: all_ports: null allow_global_access: true ports: