Terraform 当数据为空时,如何生成地形错误

Terraform 当数据为空时,如何生成地形错误,terraform,terraform-provider-gcp,Terraform,Terraform Provider Gcp,我对terraform有问题,尤其是谷歌负载均衡器后端服务 这是我的tf配置示例 var backends { default = [ { 'name':'red' 'service': 'abcd' }, { 'name':'blue' 'service': 'efgh' } ] } local { backend = {for i in var.backends: "${i.name}-$

我对terraform有问题,尤其是谷歌负载均衡器
后端服务

这是我的tf配置示例

var backends {
  default = [
     {
      'name':'red'
      'service': 'abcd'
     },
     {
      'name':'blue'
      'service': 'efgh'
     }
]
}

local {
backend = {for i in var.backends: "${i.name}-${i.service}" => i}
}

data "external" "mydata" {
    for_each = local.backend
    program = ["/bin/sh", "script.sh", each.value.name]
}
//that script will get some data like this //

{"id": "sometext"}

//

resource "google_compute_backend_service" "default" {
  project  = local.project_id
  for_each = local.backend
  name     = each.key

  dynamic "backend" {
    for_each = {for zone in var.zone: zone => "projects/${local.project_id}/zones/${zone}/networkEndpointGroups/${data.external.mydata[each.key].result.id}"}

  }
}
问题是,如果
data.external.mydata[each.key].result.id
为空,则
terraform plan
为成功/无错误。 我希望
terraformplan
出错/失败,尤其是在
google\u compute\u backend\u服务中

下面是示例external.data(如果为空)

{“id”:“”}

我希望这是错误/失败的,尤其是在
google\u compute\u backend\u服务中

有可能重现错误吗?
我知道它可以使用
count
检查
外部.data
值,但由于我对每个
都使用
,所以我不能使用
count

对于使用
外部
数据源执行的程序,预期协议的一部分是,它们可以通过将错误消息打印到stderr,然后以非零退出状态退出来指示错误

在shell脚本中,您可以通过以下命令执行此操作:

echo >&2 "No matching object is available."
exit 1

如果您的命令以这种方式退出失败,则
外部
提供程序将检测到并返回一个失败,这将反过来阻止Terraform处理依赖于该结果的任何资源。

您仍然可以检查每个资源的计数。我不确定实际问题是什么?如果在同一资源中使用count和for_,则会出错。。我的实际问题是,当data.external.result.id为空时,terraform plan是否成功。。我希望它失败/出错..你想做什么?如果
external.data
为空,则跳过创建
google\u compute\u后端\u服务
?如果是,什么是本地.backend
?我用本地.backend更新我的问题。。我不想跳过
google\u compute\u backend\u服务的创建
我希望它在
external.data.id
为空时在地形图中重现错误,因为我在管道中使用它,当用户创建MR时,管道确实
terraform plan
显示成功。。但是由于
external.data.id
为空,应用时将失败/出错,因为
google\u compute\u backend\u服务
未找到自链接