数据为空时如何使地形错误
how to make terraform error when data is empty
我对 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
为 success/without 错误。
我希望 terraform plan
成为 error/failed,尤其是 google_compute_backend_service
。
here's sample external.data if empty
{"id":""}
我希望这是 error/failed 特别是 google_compute_backend_service
。
是否可以重现错误?
我知道它可以使用 count
来检查 external.data
值,但是因为我使用 for_each
,所以我不能使用 count
您使用 external
数据源执行的程序的部分预期协议是,它们可以通过将错误消息打印到 stderr 然后以非零退出状态退出来指示错误。
在 shell 脚本中,您可以通过如下命令执行此操作:
echo >&2 "No matching object is available."
exit 1
如果您的命令像这样未成功退出,那么 external
提供程序将检测到并 return 失败,这将反过来阻止 Terraform 处理依赖于该结果的任何资源。
我对 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
为 success/without 错误。
我希望 terraform plan
成为 error/failed,尤其是 google_compute_backend_service
。
here's sample external.data if empty
{"id":""}
我希望这是 error/failed 特别是 google_compute_backend_service
。
是否可以重现错误?
我知道它可以使用 count
来检查 external.data
值,但是因为我使用 for_each
,所以我不能使用 count
您使用 external
数据源执行的程序的部分预期协议是,它们可以通过将错误消息打印到 stderr 然后以非零退出状态退出来指示错误。
在 shell 脚本中,您可以通过如下命令执行此操作:
echo >&2 "No matching object is available."
exit 1
如果您的命令像这样未成功退出,那么 external
提供程序将检测到并 return 失败,这将反过来阻止 Terraform 处理依赖于该结果的任何资源。