【发布时间】:2021-06-21 13:14:31
【问题描述】:
我有这个 terraform 代码,它有两个动态块:
# block one
dynamic "backend_address_pool" {
for_each = var.backend_pools
content {
name = each.key
fqdns = each.value["fqdns"]
ip_addresses = each.value["ip_addresses"]
}
}
# block two
dynamic "request_routing_rule" {
for_each = var.request_routing_rules
content {
name = each.key
rule_type = each.value["rule_type"]
http_listener_name = each.value["http_listener_name"]
backend_address_pool_name = <How to get the names of the block1's address pools here>
backend_http_settings_name = each.value["backend_http_settings_name"]
}
}
在block1 中,我迭代了多个地址池,即pool1、pool2、pool3 等等,在block2 中,我需要获取每个块迭代的值和将其分配给block2 中的值backend_address_pool_name
我该怎么做?
那么在block2 中,有没有一种方法可以将每次迭代的值引用为dynamic.backend_address_pool 并分配给block2 中的值backend_address_pool_name?
这是我的variables.tf
variable "backend_pools" {
type = map(object({
name = string
fqdns = list(string)
ip_addresses = list(string)
}))
description = "The configuration for backend pools"
}
variable "request_routing_rules" {
type = map(object({
rule_type = string
http_listener_name = string
backend_address_pool_name = string
backend_http_settings_name = string
}))
description = "The configuration of routing rules for backend pools"
}
这是我的variables.tfvars
backend_pools = {
pool1 = {
fqdns = ["some-value1", "some-value2", "some-value3"]
ip_addresses = ["10.0.0.0"]
},
pool2 = {
fqdns = ["some-value1", "some-value2", "some-value3"]
ip_addresses = ["10.0.0.0"]
},
pool3 = {
fqdns = ["some-value1", "some-value2", "some-value3"]
ip_addresses = ["10.0.0.0"]
}
}
request_routing_rules = {
pool1 = {
rule_type = "Basic"
http_listener_name = ""
backend_address_pool_name = ""
backend_http_settings_name = ""
},
pool2 = {
rule_type = "Basic"
http_listener_name = ""
backend_address_pool_name = ""
backend_http_settings_name = ""
}
pool3 = {
rule_type = "Basic"
http_listener_name = ""
backend_address_pool_name = ""
backend_http_settings_name = ""
}
}
【问题讨论】:
-
您能否在原始帖子中举例说明每个动态块的变量输入是什么样的?
-
我更新了帖子@rk92
-
谢谢,
backend_address_pool_name=fqdns在您的示例中也是如此,还是您只是想从backend_pools(pool1、pool2等)获取池的名称? -
是的,试图获取池的名称(pool1、pool2 等)
-
您的问题的直接答案在文档中:terraform.io/docs/language/expressions/dynamic-blocks.html。但是,像这样在嵌套迭代器中匹配两个
Map是危险的,您应该考虑将request_routing_rules作为object嵌套在backend_pools中。这将更安全,更容易实施。
标签: terraform