如何查找 Terraform 对象的属性

90次阅读
没有评论

问题描述

在创建一个 Terraform 文件时,遇到了问题:

Error: Incorrect condition type  on ssh.tf line 47, in locals:  47:   is_generated = data.local_sensitive_file.public_key ? true : false    ├────────────────    │ data.local_sensitive_file.public_key is object with 4 attributesThe condition expression must be of type bool.

但我不知道如何查找 data.local_sensitive_file.public_key 的属性是什么。

解决方案

请注意以下操作可能涉及命令行工具,确保已安装相应工具。

方案1

你可以使用以下命令来查找 data.local_sensitive_file.public_key 的属性:

terraform show -json | jq '.values[].resources[] | select(.address=="data.local_sensitive_file.public_key").values | keys'

这个命令将返回以下属性列表:

[
  "content",
  "content_base64",
  "filename",
  "id"
]

方案2

另一种方法是查阅 Terraform 提供者文档,找到与 data.local_sensitive_file.public_key 相关的信息。你可以在 hashicorp/local 的文档 中找到有关 local_sensitive_file 数据源的属性描述。

方案3

如果你想更通用地了解任何对象的属性类型,可以使用 terraform console 命令来查询:

> type(data.local_sensitive_file.public_key)
object({
    content: string,
    content_base64: string,
    filename: string,
    id: string,
})

需要注意的是,对于资源(无论是 resource 块还是 data 块),直到创建或首次读取之前,它的类型还未知。如果你的配置不合法,你需要先修复配置,使之能够成功执行 terraform apply,然后才能使用这种技巧。但对于在 Terraform 配置中定义的对象(而不是由尚未运行的外部操作定义的对象),控制台是一种有用的检查数据和数据类型的方式。

请根据你的需求选择适合的方法来查找 Terraform 对象的属性。

以上方案可能涉及命令行操作和工具的使用,请确保在执行操作前已充分了解和理解相应命令的含义和效果。

正文完