gpt4 book ai didi

terraform - Terraform 中的条件属性

转载 作者:行者123 更新时间:2023-12-04 13:18:26 24 4
gpt4 key购买 nike

Terraform 是否支持条件属性?我只想根据变量的值使用属性。

例子:

resource "aws_ebs_volume" "my_volume" {
availability_zone = "xyz"
size = 30

if ${var.staging_mode} == true:
snapshot_id = "a_specific_snapshot_id"
endif
}

以上 if包含属性 snapshot_id 的语句是我正在寻找的。 Terraform 是否支持基于变量值的此类属性包含。

最佳答案

Terraform 0.12(尚未发布)也将带来 support for HCL2允许您使用 nullable arguments像这样:

resource "aws_ebs_volume" "my_volume" {
availability_zone = "xyz"
size = 30
snapshot_id = var.staging_mode ? local.a_specific_snapshot_id : null
}
this 0.12 preview guide 中介绍了可为空的参数。 .
对于 0.12 之前的 Terraform 版本, Markusanswer可能是您最好的选择,尽管我会更明确地使用 count像这样:
resource "aws_ebs_volume" "staging_volume" {
count = "${var.staging_mode ? 1 : 0}"
availability_zone = "xyz"
size = 30

snapshot_id = "a_specific_snapshot_id"
}

resource "aws_ebs_volume" "non_staging_volume" {
count = "${var.staging_mode ? 0 : 1}"
availability_zone = "xyz"
size = 30
}
请注意,资源名称必须是唯一的,否则 Terraform 会报错。如果您需要引用 EBS 卷,例如使用 aws_volume_attachment,这会导致问题。如 pre 0.12 the ternary expression is not lazy所以这样的事情不起作用:
resource "aws_volume_attachment" "ebs_att" {
device_name = "/dev/sdh"
volume_id = "${var.staging_mode ? aws_ebs_volume.staging_volume.id : aws_ebs_volume.non_staging_volume.id}"
instance_id = "${aws_instance.web.id}"
}
因为它将尝试评估三元的两侧,其中任何时候只有一个有效。在 Terraform 0.12 中,情况将不再如此,但显然您可以使用可为空的参数更轻松地解决它。

关于terraform - Terraform 中的条件属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51496445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com