真实的例子很复杂,我尝试简化一下:
variable "input" {
type = string
default "In Xanadu did Khubla Khan"
}
module "child" {
source = "./child
input = var.input
}
output "output" {
value = module.child.output
}
现在是子模块
variable "input" {
type = string
}
output "output" {
value = "${var.input} a stately pleasure dome decree"
}
结果我得到了
╷
│ Error: Unsupported attribute
│
│ on output.tf line 122, in output "output":
│ 122: value = module.child.output
│ ├────────────────
│ │ module.child is a object, known only after apply
│
│ This object does not have an attribute named "output".
更新:我在这里使用了一个带有“输入”和“输出”等变量名称的抽象示例,并从引用变量“aws_s3_cxrossaccount_iam_role_arn”的真实 terraform 脚本中复制了错误消息。这显然让本文的一些读者感到困惑。因此,我将错误消息中的真实姓名替换为我在本示例中使用的名称“output”。
当然,错误消息是从真实的脚本中获取的,但我希望通过上面的示例,我会得到类似的结果
我已经用谷歌搜索过这个问题,但没有得到任何线索。 Terraform 提供程序版本是
C:\Databricks\dbx_tpch> terraform -version
Terraform v1.2.2
on windows_amd64
+ provider registry.terraform.io/databricks/databricks v1.14.2
+ provider registry.terraform.io/hashicorp/aws v4.62.0
+ provider registry.terraform.io/hashicorp/random v3.4.3
+ provider registry.terraform.io/hashicorp/time v0.9.1
Your version of Terraform is out of date! The latest version
is 1.4.4. You can update by downloading from https://www.terraform.io/downloads.html
我当然可以升级,但我不认为这会有帮助
output "single_child_output" {
description = "Do not use it"
value = module.child.child_output
}
output "all_child_outputs" {
description = "use this instead"
value = module.child
}
结果你会得到一张地图
输出:
all_child_outputs = {
"variable1" = "value1"
"variable2" = "value2"
"variable3" = "value3"
}
重要 - 这个解决方法甚至在我升级 terraform 之前就有效了
但是,发生了这样的情况,我在故障排除的一个步骤中升级了 terraform 本身
dbx_tpch> terraform version
Terraform v1.4.4
on windows_amd64
+ provider registry.terraform.io/databricks/databricks v1.14.2
+ provider registry.terraform.io/hashicorp/aws v4.62.0
+ provider registry.terraform.io/hashicorp/random v3.5.1
+ provider registry.terraform.io/hashicorp/time v0.9.1
错误消失了,我可以使用上面的两种变体 - 寻址子模块或整个输出块中的单个输出变量。两者都有效。 恕我直言,寻址整个块有时更容易,但如果您想使用“terraform output”的输出作为某些脚本的输入 - 通过单个变量寻址可能会更好。