【问题标题】:how to make terraform error when data is empty数据为空时如何使terraform错误
【发布时间】:2021-08-09 08:17:53
【问题描述】:

我对 terraform 有问题,尤其是 google 负载平衡器 backend_service

这是我的示例 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 是成功/没有错误。 我希望 terraform plan 出错/失败,尤其是在 google_compute_backend_service 中。

这里是示例 external.data(如果为空)

{"id":""}

我希望这是错误/失败的,尤其是在google_compute_backend_service

是否可以重现错误? 我知道它可以使用count 来检查external.data 的值,但是由于我使用for_each,所以我不能使用count

【问题讨论】:

  • 您仍然可以使用 for_each 检查计数。我不确定实际的问题是什么?
  • 如果我在同一资源上使用 count 和 for_each 会出错。terraform.io/docs/language/meta-arguments/count.html 我的实际问题是,当 data.external.result.id 为空时,terraform 计划是否成功。我想要它失败/错误..
  • 你想做什么?如果external.data 为空,则跳过google_compute_backend_service 的创建?如果是这样,local.backend 是什么?
  • 我用 local.backend 更新我的问题.. 我不想跳过创建 google_compute_backend_service 我希望它在 terraform 计划中重现错误,当 external.data.id 为空时
  • 因为我在管道中使用它,当用户创建MR时,管道确实terraform plan它显示成功..但由于external.data.id为空,应用时它将失败/错误,因为@ 987654340@没有找到自链接

标签: terraform terraform-provider-gcp


【解决方案1】:

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

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

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

如果您的命令像这样不成功退出,那么external 提供程序将检测到该情况并返回一个失败,这将反过来阻止 Terraform 处理依赖于该结果的任何资源。

【讨论】:

    猜你喜欢
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 2019-09-16
    • 2016-09-11
    • 1970-01-01
    相关资源
    最近更新 更多