调试 terraform 时如何查看对象值

Kri*_*ien 6 terraform

在编写 terraform 模块时,我经常遇到这样的错误:

Error: Invalid index

  on ../../../modules/host/main.tf line 7, in resource "aws_network_interface" "host":
   7:   subnet_id = data.aws_subnet_ids.current[each.key].ids[0]
    |----------------
    | data.aws_subnet_ids.current is object with 2 attributes
    | each.key is "lab"
Run Code Online (Sandbox Code Playgroud)

发生这种情况的原因有多种。通常是因为我认为某个对象将包含的内容是错误的。

为了帮助调试,至少查看对象包含的内容会很有用。“具有 2 个属性的对象”相当模糊。我想知道它有什么属性,所以我可以添加必要的转换以最终得到我需要的字符串。

那么有办法吗?您能否以某种方式运行“terraform plan”,以便在计划出现错误时实际显示这些对象的内容?

adi*_*ya 6

您可以运行“terraform console”命令并直接输入您的表达式。例如。假设对于变量文件中的给定映射,您希望查看扁平列表。

variable "podmap" {
   type  = "map"
   default = {
       dev = ["pod1", "pod6"]
       qa =  ["pod5"]
       uat = ["pod5"]
       testenv = []
  }
}
Run Code Online (Sandbox Code Playgroud)

运行 terraform 控制台:

$ terraform console
> flatten([for podtype, podlist in var.podmap : [for podname in podlist : { name = podname, type = podtype }]])flatten([for podtype, podlist in var.podmap : [for podname in podlist : { name = podname, type = podtype }]])
Run Code Online (Sandbox Code Playgroud)

根据您的表达/陈述,它会为您提供相应的输出。

对于上面的展平函数,您将得到下面的输出列表,在执行 terraform 计划时您无法看到该列表。

[
  {
    "name" = "pod5"
    "type" = "dev"
  },
  {
    "name" = "pod6"
    "type" = "dev"
  },
  {
    "name" = "pod5"
    "type" = "qa"
  },
  {
    "name" = "pod5"
    "type" = "uat"
  },
]
Run Code Online (Sandbox Code Playgroud)


Kri*_*ien -2

这实际上比我预期的要容易。

做就是了:

terraform refresh
terraform show
Run Code Online (Sandbox Code Playgroud)

您将看到当前所有数据源包含的内容。

如果在文档的调试章节中暗示这种可能性,那就会很方便......