Terraform 12 块变量
Terraform 12 block variable
现在我正在迁移到 Terraform 12。这里的主要功能之一是更严格的 HCL2,我喜欢它。
例如,如果我有地图列表:
elb_listeners = [
{
instance_port = 80
instance_protocol = "http"
lb_port = 80
lb_protocol = "http"
},
{
instance_port = 443
instance_protocol = "http"
lb_port = 443
lb_protocol = "https"
ssl_certificate_id = ARN certificate
}
我可以像这样用动态块旋转它:
dynamic "listener" {
for_each = [for listener in var.elb_listeners : {
instance_port = listener.instance_port
instance_protocol = listener.instance_protocol
lb_port = listener.lb_port
lb_protocol = listener.lb_protocol
}]
content {
instance_port = listener.value.instance_port
instance_protocol = listener.value.instance_protocol
lb_port = listener.value.lb_port
lb_protocol = listener.value.lb_protocol
}
}
但是假设我只有一个方块而且只有一个可能的方块:
health_check {
healthy_threshold = 2
unhealthy_threshold = 2
timeout = 3
target = "HTTP:8000/"
interval = 30
}
我不想声明所有这些变量,我也想在设置中将其描述为一次块。是的,在这里我也可以只对一个元素使用 dynamic_block
但它在这里看起来有点矫枉过正。有可能这样做吗?喜欢
health_check {
var.health_check
}
什么的。
我知道你要去哪里。但是我认为目前不可能在资源中“扩展”地图。您可以定义一个具有默认值的地图变量,尽管这是更多的代码行。
variable health_check {
type = "map"
default = {
healthy_threshold = 2
unhealthy_threshold = 2
timeout = 3
target = "HTTP:8000/"
interval = 30
}
}
health_check {
healthy_threshold = var.health_check.healthy_threshold
unhealthy_threshold = var.health_check.unhealthy_threshold
timeout = var.health_check.timeout
target = var.health_check.target
interval = var.health_check.interval
}
再想想,我不明白你为什么需要它。它使您的代码结构的可读性和明确性降低。因此,选项是使用或不使用默认值显式定义它,或者当您有多个资源要从 list/map.
创建时使用 for_each
现在我正在迁移到 Terraform 12。这里的主要功能之一是更严格的 HCL2,我喜欢它。
例如,如果我有地图列表:
elb_listeners = [
{
instance_port = 80
instance_protocol = "http"
lb_port = 80
lb_protocol = "http"
},
{
instance_port = 443
instance_protocol = "http"
lb_port = 443
lb_protocol = "https"
ssl_certificate_id = ARN certificate
}
我可以像这样用动态块旋转它:
dynamic "listener" {
for_each = [for listener in var.elb_listeners : {
instance_port = listener.instance_port
instance_protocol = listener.instance_protocol
lb_port = listener.lb_port
lb_protocol = listener.lb_protocol
}]
content {
instance_port = listener.value.instance_port
instance_protocol = listener.value.instance_protocol
lb_port = listener.value.lb_port
lb_protocol = listener.value.lb_protocol
}
}
但是假设我只有一个方块而且只有一个可能的方块:
health_check {
healthy_threshold = 2
unhealthy_threshold = 2
timeout = 3
target = "HTTP:8000/"
interval = 30
}
我不想声明所有这些变量,我也想在设置中将其描述为一次块。是的,在这里我也可以只对一个元素使用 dynamic_block
但它在这里看起来有点矫枉过正。有可能这样做吗?喜欢
health_check {
var.health_check
}
什么的。
我知道你要去哪里。但是我认为目前不可能在资源中“扩展”地图。您可以定义一个具有默认值的地图变量,尽管这是更多的代码行。
variable health_check {
type = "map"
default = {
healthy_threshold = 2
unhealthy_threshold = 2
timeout = 3
target = "HTTP:8000/"
interval = 30
}
}
health_check {
healthy_threshold = var.health_check.healthy_threshold
unhealthy_threshold = var.health_check.unhealthy_threshold
timeout = var.health_check.timeout
target = var.health_check.target
interval = var.health_check.interval
}
再想想,我不明白你为什么需要它。它使您的代码结构的可读性和明确性降低。因此,选项是使用或不使用默认值显式定义它,或者当您有多个资源要从 list/map.
创建时使用 for_each