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

Sid*_*kar 2 terraform terraform-provider-azure terraform0.12+

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

  > provisioner 
        >stack
           |--main.tf
           |--variables.tf
  > module (folder)  
    |--aks
    |     |--main.tf
    |     |--outputs.tf
    |     |--variables.tf
    |
    |--postgresql
    |     |--main.tf
    |     |--outputs.tf
    |     |--variables.tf
Run Code Online (Sandbox Code Playgroud)

当我在 provsioner 目录中运行“terraform apply”命令时,预计会在应用完成后返回输出。我没有得到输出。当我运行 'terraform output' 时,我得到-“状态文件要么没有定义输出,要么所有定义的输出都是空的。请在您的配置中使用 output 关键字定义一个输出并运行 terraform refresh 使其可用。如果您正在使用插值,请确认插值不为空

我想知道为什么会这样?

小智 9

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

输出“example_module”{
value = module.example_module
}

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

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


Zar*_*aga 9

添加到@crewy_stack 答案。假设您的模块名为sample_ec2_mod。在模块目录内确保输出在outputs.tf中指定

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

module "sample_ec2_mod" {
    source = "./ec2"  
}
  
output "ec2_module" {  
  value = module.sample_ec2_mod  
}
Run Code Online (Sandbox Code Playgroud)

当您输入terraform applycli 时,它应该会给您一个输出选项。应用后,只需使用即可terraform output查看输出。


dmk*_*kvl 6

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