使用 Terraform 插值将资源转换为字符串列表
Converting resource to string list with Terraform interpolation
给定 .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()
或两者的组合来生成。正在努力寻找合适的示例。
我能得到的最接近结果的计划如下:
nodes.467461356: "" => "\"/Common/preprod_web_0\","/Common/preprod_web_1\""
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
表示获取在名称 node.web_nodes
下创建的每个实例的 name
属性,并从中生成一个字符串列表。 formatlist
然后将给定的格式依次应用于列表的每个元素,附加 :443
端口后缀。
给定 .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()
或两者的组合来生成。正在努力寻找合适的示例。
我能得到的最接近结果的计划如下:
nodes.467461356: "" => "\"/Common/preprod_web_0\","/Common/preprod_web_1\""
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
表示获取在名称 node.web_nodes
下创建的每个实例的 name
属性,并从中生成一个字符串列表。 formatlist
然后将给定的格式依次应用于列表的每个元素,附加 :443
端口后缀。