我有以下简单设置:
~$ tree
.
├── main.tf
└── modules
└── world
└── main.tf
~$ cat main.tf
output "root_module_says" {
value = "hello from root module"
}
module "world" {
source = "modules/world"
}
~$ cat modules/world/main.tf
output "world_module_says" {
value = "hello from world module"
}
然后我运行:
~$ terraform get
~$ terraform apply
我希望在输出中看到world_module_says,但我没有,我只看到root_module_says。 这真是令人困惑,为什么?
如果有帮助:
~$ terraform --version
v0.10.8
答案 0 :(得分:4)
以下命令显示特定模块的输出
terraform output -module=example_module
以下命令在Terraform 0.12及更高版本中失败,并显示错误:
terraform output -module=example_module
Error: Unsupported option
The -module option is no longer supported since Terraform 0.12, because now
only root outputs are persisted in the state.
要从Terraform 0.12及更高版本中的模块获取输出,必须使用调用程序模块中的输出块从根模块(例如example_module
)导出它们。
现在只需在调用者模块中添加一行,如下所示即可完成此操作:
output "example_module_outputs" {
value = module.example_module
}
terraform output
答案 1 :(得分:2)
Terraform仅默认显示来自root的输出 https://www.terraform.io/docs/commands/output.html
您可以使用以下命令从world模块获取输出:
terraform output -module=world
我认为这里的逻辑是模块的输出将被root占用,如果您实际需要输出,那么您也将其输出到root中,因此main.tf可能包含以下内容:
output "root_module_says" {
value = "hello from root module"
}
output "world_module_says" {
value = "${module.world.world_module_says}"
}
module "world" {
source = "modules/world"
}
答案 2 :(得分:0)
当访问模块输出组时(使用控制台或脚本中的 'terraform output' 命令),Terraform 将以格式化方式或使用 '-json' 标志以 json 格式打印该组中的所有输出变量。
在提取输出值时,只有当存在具有字符串格式的单个变量时,我们才能使用“-raw”标志。
如果我们在模块内的输出组中有 1 个以上的输出:
假设我们在“root”模块中声明了模块中的以下输出组:
output "world_world_module_says" {
value = module.world.world_module_says
}
在 main.tf 模块中,我们有 2 个变量:
output "world_module_says" {
value = "hello from world module"
}
output "world_module_says_again" {
value = "hi again from world module"
}
terraform output -json world_world_module_says |jq '.'"world_module_says"
output "world_world_module_says" {
value = module.world.world_module_says
}
output "world_world_module_says_again" {
value = module.world.world_module_says_again
}