我可以自动查看所有子模块的输出变量,而无需在主根模块的 output.tf 变量中重新定义它们吗?

All*_* Xu 5 terraform

我有一个如下所示的模块结构:

\n
$ tree complete-module/\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 variables.tf\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 outputs.tf\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ...\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 modules/\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 nestedA/\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 variables.tf\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 outputs.tf\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 nestedB/\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .../\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 examples/\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 exampleA/\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 exampleB/\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .../\n
Run Code Online (Sandbox Code Playgroud)\n

模块nestedA定义了输出变量。

\n

为了在之后查看nestedA的输出变量terraform apply,我需要传播根/main.tf变量并在根/outputs.tf中再次输出它们。

\n

虽然它有效,但我想知道是否有任何快捷方式,以便我自动查看所有子模块的输出变量,而terraform apply无需执行管道代码并在 root /outputs.tf 中重新定义它们?

\n

333*_*hin 8

不是全自动化,而是半自动化。

使用上面的示例,假设NestedA输出如下:

# NestedA/outputs.tf
output email {
  value = string
}
output dob {
  value = string
}
Run Code Online (Sandbox Code Playgroud)

假设内部NestedB实例化如下:NestedA

# NestedB/main.tf
module nested_a {
  source = "../NestedA"
  ...
}
Run Code Online (Sandbox Code Playgroud)

您可以将整个声明module.nested_a为 的输出NestedB

# NestedB/outputs.tf
output nested_a {
  value = module.nested_a
}
Run Code Online (Sandbox Code Playgroud)

因此,如果另一个项目(例如直接exampleB实例化)NestedB,它可以访问所有NestedA属性,而无需单独声明它们:

# examples/exampleB/main.tf
module nested_b {
  source = "../../modules/NestedB/"
  ...
}
locals {
  email = module.nested_b.nested_a.email
  dob = module.nested_b.nested_a.dob
}
Run Code Online (Sandbox Code Playgroud)