给定.tfvars
包含:
environment = "dev"
web_servers = ["192.168.0.1","192.168.0.2"]
以及node
资源,例如:
resource "node" "web_nodes" {
count = "${length(var.web_servers)}"
name = "${var.environment}_web_${count.index}"
address = "${element(var.web_servers, count.index)}"
}
我想动态地表达以下内容:
resource "pool" "homepage_pool" {
name = "homepage_${var.environment}"
nodes = [
"dev_web_0:443",
"dev_web_1:443"
]
}
计划输出如:
nodes.2387117855: "" => "dev_web_1:443"
nodes.3005787823: "" => "dev_web_0:443"
我认为pool.nodes
应使用formatlist()
或join()
或2的组合生成.2。努力寻找合适的例子。
我能得到的最接近的计划如下:
nodes.467461356: "" => "\"/Common/preprod_web_0\","/Common/preprod_web_1\""
答案 0 :(得分:4)
formatlist
函数可以与“splat”运算符一起使用,以获得您需要的结果。
“splat”运算符允许您从一组count
ed资源实例的给定属性中简明地创建列表。您的示例似乎是您要使用节点名称和硬编码端口443,在这种情况下,这可以表示如下:
resource "pool" "homepage_pool" {
name = "homepage_${var.environment}"
nodes = "${formatlist("%s:443", node.web_nodes.*.name)}"
}
表示法node.web_nodes.*.name
表示获取在名称name
下创建的每个实例的node.web_nodes
属性,并从中生成字符串列表。然后formatlist
依次将给定格式应用于列表的每个元素,附加:443
端口后缀。