我有以下简单的设置:
~$ 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"
}
Run Code Online (Sandbox Code Playgroud)
然后我运行:
~$ terraform get
~$ terraform apply
Run Code Online (Sandbox Code Playgroud)
我希望在输出中看到 world_module_says,但我没有,我只看到 root_module_says。这真的很令人困惑,为什么?
如果有帮助:
~$ terraform --version
v0.10.8
Run Code Online (Sandbox Code Playgroud)
9bO*_*fw5 11
Terraform 仅显示 root 的输出(默认情况下 v0.12 之前) https://www.terraform.io/docs/commands/output.html
在 Terraform 0.12 之前,您可以使用以下命令从 world 模块获取输出:
terraform output -module=world
Run Code Online (Sandbox Code Playgroud)
我认为这里的逻辑是模块的输出将由 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"
}
Run Code Online (Sandbox Code Playgroud)
从 Terraform 0.12 开始,这是从模块内获取输出的唯一方法。
小智 7
当访问模块输出组时(使用控制台或脚本中的“terraform output”命令),Terraform 将以格式化方式打印该组中的所有输出变量,或使用“-json”标志以 json 格式打印。
提取输出值时,仅当存在单个具有字符串格式的变量时,我们才能使用“-raw”标志。
如果模块内的输出组中有超过 1 个输出:
假设我们在“根”模块中声明了模块中的以下输出组:
output "world_world_module_says" {
value = module.world.world_module_says
}
Run Code Online (Sandbox Code Playgroud)
在模块 main.tf 中我们有 2 个变量:
output "world_module_says" {
value = "hello from world module"
}
output "world_module_says_again" {
value = "hi again from world module"
}
Run Code Online (Sandbox Code Playgroud)
terraform output -json world_world_module_says |jq '.'"world_module_says"
Run Code Online (Sandbox Code Playgroud)
output "world_world_module_says" {
value = module.world.world_module_says
}
output "world_world_module_says_again" {
value = module.world.world_module_says_again
}
Run Code Online (Sandbox Code Playgroud)
以下命令显示特定模块的输出
terraform output -module=example_module
Run Code Online (Sandbox Code Playgroud)以下命令在 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.
Run Code Online (Sandbox Code Playgroud)要从 Terraform 0.12 及更高版本中的模块获取输出,您必须example_module使用调用者模块中的输出块从根(例如)模块导出它们。
现在只需在调用者模块中添加一行即可完成此操作,如下所示:
output "example_module_outputs" {
value = module.example_module
}
Run Code Online (Sandbox Code Playgroud)output "example_module_outputs" {
value = module.example_module
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
7146 次 |
| 最近记录: |