terraform 输出为 运行 时无法获取输出

Cannot get the outputs when terraform output is run

我正在使用模块。这是我的文件的结构 - Provisioner 和模块不同 folders.The main.tf 在堆栈中调用模块。

  > provisioner 
        >stack
           |--main.tf
           |--variables.tf
  > module (folder)  
    |--aks
    |     |--main.tf
    |     |--outputs.tf
    |     |--variables.tf
    |
    |--postgresql
    |     |--main.tf
    |     |--outputs.tf
    |     |--variables.tf

当我运行 "terraform apply" command in the provsioner directory, it is expected to return 应用完成后的输出。我没有得到输出。 当我 运行 'terraform output' 我得到- “状态文件没有定义输出,或者所有定义的输出都是空的。请使用输出关键字在您的配置中定义一个输出和运行 terraform 刷新使其可用。如果您使用插值,请验证插值不为空"

我想知道为什么会这样?

Terraform 0.12 及更高版本有意仅跟踪状态中的根模块输出。要公开模块输出以供外部使用,您必须使用输出块从根模块导出它们,从 0.12 开始,现在可以在一个输出中对单个模块完成此操作,如下所示:

output "example_module" {
  value = module.example_module
}

因此,对于您的代码,在根目录中添加一个 output.tf 文件,然后在应用后添加您需要输出的输出语句。

Github 问题:https://github.com/hashicorp/terraform/issues/22126

默认情况下不会打印出模块的输出变量。您必须在 provisioner 目录中明确定义输出变量。

添加到@crewy_stack 回答。假设您的模块名为 sample_ec2_mod。在模块目录中确保在 outputs.tf

中指定输出

main.tf的根文件夹中,添加以下内容:

module "sample_ec2_mod" {
    source = "./ec2"  
}
  
output "ec2_module" {  
  value = module.sample_ec2_mod  
}

当你在 cli 中输入 terraform apply 时,它应该给你 一个输出选项。申请后,只需使用terraform output即可查看 输出。