在编写 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)
您将看到当前所有数据源包含的内容。
如果在文档的调试章节中暗示这种可能性,那就会很方便......
| 归档时间: |
|
| 查看次数: |
10346 次 |
| 最近记录: |