在 Terraform 中读取数据源(可能不存在的 Cloud 运行 服务)中的嵌套属性
Reading nested attribute in data source (of a Cloud Run service that might not exist) in Terraform
我将 Terraform v0.14.4 与 GCP 结合使用。我有一个不使用 Terraform 管理的 Cloud 运行 服务(它可能存在也可能不存在),我想阅读它的 url.
如果该服务存在,则可以正常工作:
data "google_cloud_run_service" "myservice" {
name = "myservice"
location = "us-central1"
}
output "myservice" {
value = data.google_cloud_run_service.myservice.status[0].url
}
但如果它不存在,我就无法让它工作!。我尝试过的:
data.google_cloud_run_service.myservice.*.status[*].url
状态为空
length(data.google_cloud_run_service.myservice) > 0 ? data.google_cloud_run_service.myservice.*.status[0].url : ""
尝试过 join("", data.google_cloud_run_service.myservice.*.status)
我收到此错误:data.google_cloud_run_service.myservice is object with 9 attributes
coalescelist(data.google_cloud_run_service.myservice.*.status, <...>)
它只是 returns [null],对结果使用 compact
得到 Invalid value for "list" parameter: element 0: string required.
有什么想法吗?
您在这里似乎有点违反此数据源的设计,但根据您显示的错误消息,行为似乎是当请求的对象时 status
为空不存在,存在时是一个列表,因此您需要编写一个可以处理这两种情况的表达式。
这是我的尝试,仅基于资源文档以及我根据您包含的错误消息所做的一些假设:
output "myservice" {
value = (
data.google_cloud_run_service.myservice.status != null ?
data.google_cloud_run_service.myservice.status[0].url :
null
)
}
还有另一种可能更短的写法,依赖于 the try
function 捕获动态错误的能力和 return 后备值,尽管这确实违背了文档中的建议因为它迫使一个不熟悉的未来 reader 做更多的猜测,以了解表达式在哪些情况下可能成功以及它可能 return 回退:
output "myservice" {
value = try(data.google_cloud_run_service.myservice.status[0].url, null)
}
我将 Terraform v0.14.4 与 GCP 结合使用。我有一个不使用 Terraform 管理的 Cloud 运行 服务(它可能存在也可能不存在),我想阅读它的 url.
如果该服务存在,则可以正常工作:
data "google_cloud_run_service" "myservice" {
name = "myservice"
location = "us-central1"
}
output "myservice" {
value = data.google_cloud_run_service.myservice.status[0].url
}
但如果它不存在,我就无法让它工作!。我尝试过的:
data.google_cloud_run_service.myservice.*.status[*].url
状态为空
length(data.google_cloud_run_service.myservice) > 0 ? data.google_cloud_run_service.myservice.*.status[0].url : ""
尝试过
join("", data.google_cloud_run_service.myservice.*.status)
我收到此错误:
data.google_cloud_run_service.myservice is object with 9 attributes
coalescelist(data.google_cloud_run_service.myservice.*.status, <...>)
它只是 returns [null],对结果使用
compact
得到Invalid value for "list" parameter: element 0: string required.
有什么想法吗?
您在这里似乎有点违反此数据源的设计,但根据您显示的错误消息,行为似乎是当请求的对象时 status
为空不存在,存在时是一个列表,因此您需要编写一个可以处理这两种情况的表达式。
这是我的尝试,仅基于资源文档以及我根据您包含的错误消息所做的一些假设:
output "myservice" {
value = (
data.google_cloud_run_service.myservice.status != null ?
data.google_cloud_run_service.myservice.status[0].url :
null
)
}
还有另一种可能更短的写法,依赖于 the try
function 捕获动态错误的能力和 return 后备值,尽管这确实违背了文档中的建议因为它迫使一个不熟悉的未来 reader 做更多的猜测,以了解表达式在哪些情况下可能成功以及它可能 return 回退:
output "myservice" {
value = try(data.google_cloud_run_service.myservice.status[0].url, null)
}