Terraform 当数据为空时,如何生成地形错误
我对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}-$
后端服务
这是我的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服务
未找到自链接