terraform - 为什么我的 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 仅显示来自根目录的输出(默认为 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 开始,这是从模块中获取输出的唯一方法。
推荐阅读
- java - Java 泛型奇怪地转换
- php - session_start() 和 $_SESSION 命令不起作用
- flow - 在 Total JS Flow 中更改 CSS 和 HTML
- swift - KVO - 未调用observe() changeHandler
- powerapps - 从多选组合框中获取值
- c - 如何更正手册页中的错误?
- symfony - 使用带有 GoogleCloudStorage 适配器的 KnpGaufretteBundle 检索公共路径
- javascript - Firefox 63 - .focus() 没有触发文本输入的“焦点”事件
- java - 活动关闭时停止方法重复
- java-8 - NotSerializableException:在 JDK 8 上带有 JMeter 5 的 RemoteThreadsListenerTestElement