diff --git a/modules/compute-vm/README.md b/modules/compute-vm/README.md index e025e1f6b..752a54e42 100644 --- a/modules/compute-vm/README.md +++ b/modules/compute-vm/README.md @@ -293,7 +293,7 @@ module "instance-group" { | name | description | sensitive | |---|---|:---:| | external_ips | Instance main interface external IP addresses. | | -| group | Instance group resource. | | +| groups | Instance group resources. | | | instances | Instance resources. | | | internal_ips | Instance main interface internal IP addresses. | | | names | Instance names. | | diff --git a/modules/compute-vm/main.tf b/modules/compute-vm/main.tf index 08c0b1b6a..4d4eaf139 100644 --- a/modules/compute-vm/main.tf +++ b/modules/compute-vm/main.tf @@ -368,8 +368,10 @@ resource "google_compute_instance_template" "default" { } resource "google_compute_instance_group" "unmanaged" { - count = ( - var.group != null && !var.use_instance_template ? 1 : 0 + for_each = toset( + var.group != null && !var.use_instance_template + ? local.zones_list + : [] ) project = var.project_id network = ( @@ -377,11 +379,12 @@ resource "google_compute_instance_group" "unmanaged" { ? var.network_interfaces.0.network : "" ) - zone = local.zones_list[0] - name = var.name + zone = each.key + name = "${var.name}-${each.key}" description = "Terraform-managed." instances = [ - for name, instance in google_compute_instance.default : instance.self_link + for name, instance in google_compute_instance.default : + instance.self_link if instance.zone == each.key ] dynamic "named_port" { for_each = var.group.named_ports != null ? var.group.named_ports : {} diff --git a/modules/compute-vm/outputs.tf b/modules/compute-vm/outputs.tf index 37529ff94..6dd86c285 100644 --- a/modules/compute-vm/outputs.tf +++ b/modules/compute-vm/outputs.tf @@ -26,9 +26,9 @@ output "external_ips" { ) } -output "group" { - description = "Instance group resource." - value = try(google_compute_instance_group.unmanaged.0, null) +output "groups" { + description = "Instance group resources." + value = google_compute_instance_group.unmanaged } output "instances" { diff --git a/modules/net-ilb/README.md b/modules/net-ilb/README.md index 2b7460f08..31bd0dd4b 100644 --- a/modules/net-ilb/README.md +++ b/modules/net-ilb/README.md @@ -99,16 +99,18 @@ module "ilb" { network = var.vpc.self_link subnetwork = var.subnet.self_link ports = [80] - backends = [{ - failover = false - group = module.instance-group.group.self_link - balancing_mode = "CONNECTION" - }] + backends = [ + for name, group in module.instance-group.groups : { + failover = false + group = group.self_link + balancing_mode = "CONNECTION" + } + ] health_check_config = { type = "http", check = { port = 80 }, config = {}, logging = true } } -# tftest:modules=2:resources=5 +# tftest:modules=2:resources=6 ``` diff --git a/networking/ilb-next-hop/gateways.tf b/networking/ilb-next-hop/gateways.tf index 540b2cbef..88bea42fb 100644 --- a/networking/ilb-next-hop/gateways.tf +++ b/networking/ilb-next-hop/gateways.tf @@ -75,7 +75,7 @@ module "ilb-left" { } backends = [{ failover = false - group = module.gw.group.self_link + group = values(module.gw.groups)[0].self_link balancing_mode = "CONNECTION" }] health_check_config = { @@ -99,7 +99,7 @@ module "ilb-right" { } backends = [{ failover = false - group = module.gw.group.self_link + group = values(module.gw.groups)[0].self_link balancing_mode = "CONNECTION" }] health_check_config = { diff --git a/tests/modules/compute_vm/test_plan.py b/tests/modules/compute_vm/test_plan.py index 43697d7b2..26d48b102 100644 --- a/tests/modules/compute_vm/test_plan.py +++ b/tests/modules/compute_vm/test_plan.py @@ -62,6 +62,16 @@ def test_group(plan_runner): ]) +def test_group_zones(plan_runner): + _, resources = plan_runner(FIXTURES_DIR, instance_count=2, + group='{named_ports={}}', + zones='["europe-west1-b", "europe-west1-c"]') + assert len(resources) == 4 + assert set(r['type'] for r in resources) == set([ + 'google_compute_instance_group', 'google_compute_instance' + ]) + + def test_iam(plan_runner): iam = ( '{"roles/compute.instanceAdmin" = ["user:a@a.com", "user:b@a.com"],'