首页 > 解决方案 > 为什么我的 Terraform 输出在模块中不起作用?

问题描述

我有以下简单的设置:

~$ 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

标签: terraform

解决方案


Terraform 仅显示来自根目录的输出(默认为 v0.12 之前的版本) https://www.terraform.io/docs/commands/output.html

在 Terraform 0.12 之前,您可以通过以下方式从 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"
}

从 Terraform 0.12 开始,这是从模块中获取输出的唯一方法。


推荐阅读