Azure Terraform有条件地排除资源块

Azure Terraform有条件地排除资源块,azure,terraform,terraform-provider-azure,Azure,Terraform,Terraform Provider Azure,以下是terraform.11特有的,适用于terraform.12 下面是我正在使用的代码。它是从Azure共享图像库获取图像详细信息的数据块 我有一个变量输入参数用于image\u版本 我可以将图像\u版本作为特定版本(如*1.0.1或1.0.2*)提供,也可以将输入作为*最新版本提供* 如果您在下面的代码中看到输出块,如果图像_版本为最新版本,则将执行第一个数据段,并将最新图像作为输出 如果我给出的输入不是最新的,那么第二个数据部分将被执行,并给出特定的图像ID作为输出 所以这个输出,我用

以下是terraform.11特有的,适用于terraform.12

下面是我正在使用的代码。它是从Azure共享图像库获取图像详细信息的数据块

我有一个变量输入参数用于image\u版本

我可以将图像\u版本作为特定版本(如*1.0.1或1.0.2*)提供,也可以将输入作为*最新版本提供*

如果您在下面的代码中看到输出块,如果图像_版本为最新版本,则将执行第一个数据段,并将最新图像作为输出 如果我给出的输入不是最新的,那么第二个数据部分将被执行,并给出特定的图像ID作为输出

所以这个输出,我用来创建虚拟机

### 1. latest section ####
data "azurerm_shared_image" "centos7" {
name                = "centos"
gallery_name        = "centos_galleries"
resource_group_name = "centos-galleries-rg"
}

### 2. image version number section ####
data "azurerm_shared_image_version" "centos7" {
name                = "1.0.1" ## [ This block fails when provided a dummy number ]
image_name          = "centos"
gallery_name        = "centos_galleries"
resource_group_name = "centos-galleries-rg"
}

output "id" {
value = "${var.image_version == "latest" ? data.azurerm_shared_image.centos7.id : data.azurerm_shared_image_version.centos7.id}"
}
现在的问题是,在第二节的数据中,我给出了name=1.0.1,这应该是共享图像库中的现有版本。 如果我在我的代码中给出了一个不存在的版本号(比如name=10.10.10),并给出了我的输入图像_version=latest,理想情况下,只有第一个数据段应该被评估,并且应该可以正常工作-但是对于terraform 11,第二个数据段也会被评估,它会失败,因为name=10.10.10版本不存在。在这里,我给出了输入image\u version=latest,但仍然失败


那么,有没有一种方法可以有条件地排除一个完整的数据段,或者有没有更好的方法可以重新编写此代码?

您可以将此决定转移到一个脚本中,在该脚本中您可以控制流?您在引用id时是否尝试过
count
和splat?Hi@JakubKania Yes尝试过count,但由于以下错误刷新状态而失败:发生了1个错误:*output.id:在第3列的第1行:true和false表达式类型必须匹配;将类型字符串和类型列表放入:@NiceThomas好吧,使用count第二个数据段不应该进行计算,那么您尝试它时出现了什么问题?是的,当我为第二个数据段提供count=0时,它抱怨为输出段提供.id,因此需要将输出更改为以下输出“id”{value=“${var.image\u version==”最新“?data.azurerm_shared_image.centos7.id:data.azurerm_shared_image_version.centos7..id}”并且当我给出.id时,它给出了如下输出错误。id:在第3列,第1行:true和false表达式类型必须匹配;在中包含类型字符串和类型列表: