Terraform Output 变量输出

output可以理解为它是一个变量,只不过它是输出变量,它主要的是帮我们打印变量。

下面就是输出变量。 

Changes to Outputs:
  + first_image_id = [
      + "centos_7_9_uefi_x64_20G_alibase_20210611.vhd",
      + "centos_7_9_uefi_x64_20G_scc_20220906.vhd",
      + "centos_7_9_x64_20G_alibase_20220824.vhd",
      + "centos_7_8_amd_x64_20G_alibase_20200806.vhd",
      + "centos_7_8_tpm_x64_20G_alibase_20200810.vhd",
      + "centos_7_8_x64_20G_alibase_20211130.vhd",
      + "centos_7_7_x64_20G_alibase_20211130.vhd",
      + "centos_7_6_x64_20G_alibase_20211130.vhd",
      + "centos_7_5_x64_20G_alibase_20211130.vhd",
      + "centos_7_05_64_40G_scc_20190415.raw",
      + "centos_7_04_64_20G_alibase_201701015.vhd",
      + "centos_7_03_64_20G_alibase_20170818.vhd",
      + "centos_7_02_64_20G_alibase_20170818.vhd",
    ]
  + my_env         = "prod"

但凡你想调试的时候都可以加output去打印出来。 

比如有两个模块,一个模块a,一个模块b。比如要想返回ecs的IP,那么提供为另外一个模块去引用。这样就可以在模块里面加上output,将IP打印出来,一个是打印,另外一个是另外模块调用它的IP。

所以这是两个模块之间传递值的方法。

如果是私密的消息,那么就可以让其不打印。 

output "esc_info" {
  value = var.ecs_info.esc_image
  sensitive = true
}

其实每一个目录都可以理解为一个模块,最外层的模块叫做根模块。

比如在写esc代码的时候,创建两台ecs,总不能定义两个ecs资源吧,定义一次,改改参数就行了,或者直接引用。模块其实也帮我们节省代码了,这是管理terraform最佳实践。

如果在自己在本模块当中,资源引用output变量会报错,在本模块当中,还是直接引用资源的属性即可。

output "security_group_id" {
  value = alicloud_security_group.group.id
}


│ Error: Reference to undeclared input variable
│
│   on alicloud_security_group_rule.tf line 19, in resource "alicloud_security_group_rule" "allow_22_tcp":
│   19:   security_group_id = var.security_group_id
│
│ An input variable with the name "security_group_id" has not been declared. This variable can be declared with a        
│ variable "security_group_id" {} block.

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/127587869