该代码用于创建一个ILB,但我需要使用下面的terraform代码创建三个ILB。但我无法为每一个人想出计算的逻辑。例如,如果我在模块中为ilb_name使用'for‘,如何引用ip地址和组管理器,每个地址都使用相同的地址。提前谢谢你的时间。
Terraform tf vars
ilb_name = ["qat-rs-web","qat-rs-lb","qat-wi-web"]
project_id = "cloudops-dev01-sb"
project_name = "cloudops-dev01-sb"
region = "us-east4"
#"us-west1"
subnetwork = "cloudops-sb-sandbox-us-east4"
health_check_port = "4000"
ports = [4000, 5000]
load_balancer_ip_name = "test-ilb-ip"
#instance-template
name_prefix = "rs-instance-template"
instance_description = "rs instance template"
machine_type = "n1-standard-2"
network = "dev-shared"
subnetwork_project = "dev-host"
compute_ip_address = ["10.0.0.8","10.238.0.9","10.238.0.10"]
image_family = "gold-centos-7"
source_image_project = "dev-tools"
group_manager_name = ["rs-web-igm","rs-lb-igm","wi-web-igm"]
base_instance_name = "qat-rs-app"
target_size = "2" 模块/ilb.tf
data "google_compute_image" "default_image" {
family = var.image_family
project = var.source_image_project
}
resource "google_compute_address" "load_balancer_ip" {
project = var.project_id
name = "load-balancer-ip-name-${var.project_id}"
subnetwork = var.subnetwork
address_type = "INTERNAL"
address = var.compute_ip_address
region = var.region
}
resource "google_compute_instance_template" "instance_template" {
name_prefix = var.name_prefix
instance_description = var.instance_description
machine_type = var.machine_type
region = var.region
#foll.
project = var.project_id
labels = var.labels
// boot disk
disk {
source_image = data.google_compute_image.default_image.self_link
auto_delete = false
}
network_interface {
network = var.network
subnetwork = var.subnetwork
subnetwork_project = var.subnetwork_project
}
}
resource "google_compute_region_instance_group_manager" "rs_igm" {
name = var.group_manager_name
base_instance_name = var.base_instance_name
region = var.region
target_size = var.target_size
project = var.project_id
version {
instance_template = google_compute_instance_template.instance_template.id
}
update_policy {
type = "PROACTIVE"
minimal_action = "REPLACE"
max_surge_fixed = 4
max_unavailable_fixed = 0
}
auto_healing_policies {
health_check = google_compute_health_check.tcp.id
initial_delay_sec = 300
}
}
# Forwarding Rule
resource "google_compute_forwarding_rule" "default" {
name = var.name
project = var.project_id
region = var.region
subnetwork = var.subnetwork
load_balancing_scheme = "INTERNAL"
backend_service = google_compute_region_backend_service.default.self_link
ip_protocol = "TCP"
ip_address = google_compute_address.load_balancer_ip.address
ports = var.ports
service_label = var.name
}
# Backend
resource "google_compute_region_backend_service" "default" {
name = var.name
project = var.project_id
region = var.region
protocol = "TCP"
timeout_sec = 10
connection_draining_timeout_sec = 10
session_affinity = var.session_affinity
/* "backend" {
for_each = var.backends
content {
description = lookup(backend.value, "description", null)
group = lookup(backend.value, "group", null)
}
}*/
backend {
group = google_compute_region_instance_group_manager.rs_igm.instance_group
balancing_mode = "UTILIZATION"
}
health_checks = [google_compute_health_check.tcp.self_link]
}
# Health Check(s)
resource "google_compute_health_check" "tcp" {
name = "${var.name}-hc"
project = var.project_id
tcp_health_check {
port = var.health_check_port
}
}main.tf
module "qat_hosted_pacs_ilb" {
source = "../modules/load_balancer/"
for_each = toset([var.ilb_name])
image_family = var.image_family
source_image_project = var.source_image_project
project_id = var.project_id
#load_balancer_ip_name = var.load_balancer_ip_name
compute_ip_address = each.value.compute_ip_address
region = var.region
network = var.network
subnetwork = var.subnetwork
subnetwork_project = var.subnetwork_project
name_prefix = var.name_prefix
instance_description = var.instance_description
machine_type = var.machine_type
labels = var.labels
group_manager_name = each.value.group_manager_name
base_instance_name = var.base_instance_name
target_size = var.target_size
name = each.value.ilb_name
ports = var.ports
}Error: Unsupported attribute
on main.tf line 8, in module "qat_hosted_pacs_ilb":
8: compute_ip_address = each.value.compute_ip_address
|----------------
| each.value is "cloudops-dev01-ilb"
This value does not have any attributes.
Error: Unsupported attribute
on main.tf line 19, in module "qat_hosted_pacs_ilb":
19: group_manager_name = each.value.group_manager_name
|----------------
| each.value is "cloudops-dev01-ilb"
This value does not have any attributes.
Error: Unsupported attribute
on main.tf line 23, in module "qat_hosted_pacs_ilb":
23: name = each.value.ilb_name
|----------------
| each.value is "cloudops-dev01-ilb"
This value does not have any attributes.发布于 2022-09-03 07:43:38
由于您将ilb_name、group_manager_name和compute_ip_address保持为三个不同的列表,所以使用count比使用for_each更容易
module "qat_hosted_pacs_ilb" {
source = "../modules/load_balancer/"
count = length(ilb_name)
image_family = var.image_family
source_image_project = var.source_image_project
project_id = var.project_id
#load_balancer_ip_name = var.load_balancer_ip_name
compute_ip_address = var.compute_ip_address[count.index]
region = var.region
network = var.network
subnetwork = var.subnetwork
subnetwork_project = var.subnetwork_project
name_prefix = var.name_prefix
instance_description = var.instance_description
machine_type = var.machine_type
labels = var.labels
group_manager_name = var.group_manager_name[count.index]
base_instance_name = var.base_instance_name
target_size = var.target_size
name = var.ilb_name[count.index]
ports = var.ports
}https://stackoverflow.com/questions/73590277
复制相似问题