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
}

转念一想,我不明白你为什么需要它。它会降低你的代码结构的可读性和明确性。因此,选项是使用或不使用默认值显式定义它,或者当您有多个资源要从列表/映射创建时使用for_each。

相关内容

最新更新