属性变量所要求的元素字符串值不合适



应用terraform时出错我正在使用cloud-init部署terraform。我想从本地获取IP地址。template_file vars块中的Tf文件。当我做tertransform应用时,它会显示"属性变量不合适的值"one_answers"元素字符串需要"。locals.tf

locals {
workers = {
"worker-1" = { host_name = "wrkr-1", vm_ip = "90" }
"worker-2" = { host_name = "wrkr-2", vm_ip = "91" }
"worker-3" = { host_name = "wrkr-3", vm_ip = "92" }
"worker-4" = { host_name = "wrkr-4", vm_ip = "93" }
"worker-5" = { host_name = "wrkr-5", vm_ip = "94" }
"worker-6" = { host_name = "wrkr-6", vm_ip = "95" }    
}
controllers = {
"controllers-1" = { host_name = "ctrl-1", vm_ip = "87" }
"controllers-2" = { host_name = "ctrl-2", vm_ip = "88" }
"controllers-3" = { host_name = "ctrl-3", vm_ip = "89" }
}
}

config.tf

data template_file "lb_userdata" {
template = file("${path.module}/cloud-init/lb-cloud-config.yaml")
vars = {
network_cidr = var.network_cidr
controller_ip = local.controllers
ip_address  = var.loadbalancer_ip
}
}

感谢您的帮助

感谢

谢谢我发现了一个窍门,我们可以做到这一点。数据文件如下

data template_file "lb_userdata" {
template = file("${path.module}/cloud-init/lb-cloud-config.yaml")
vars = {
network_cidr = var.network_cidr
controller_ip = join(",",([for k in local.controllers: k.vm_ip ]))
ip_address  = var.loadbalancer_ip
}
}

我使用join函数和for循环来获取字符串形式的值。

这里是我的lb_cloud_config。yaml文件
%{~ for f in split(",",controller_ip) ~}
server ${network_cidr}.${f}:30793
%{~ endfor ~}

最新更新