5

在 terraform HCL 中,是否可以从变量中动态引用对象的属性?

IE:

variable "attribute" {
  type = "string"
}

data "terraform_remote_state" "thing" {
  not_really_important
}

output "chosen" {
  value = "${data.terraform_remote_state.thing.$var.attribute}"
}

更具体到我的情况,我希望使用 splat 语法来做到这一点:

variable "attribute" {
  type = "string"
}

data "terraform_remote_state" "thing" {
  count = 3 # really this is also a variable
  not_really_important
}

output "chosen" {
  value = "${data.terraform_remote_state.thing.*.$var.attribute}"
}

我已经尝试过lookup(data.terraform_remote_state.thing, var.attribute)和(对于 splat 问题)之类的东西,lookup(element(data.terraform_remote_state.*, count.index), var.attribute)但他们都抱怨我的属性引用不完整/格式错误。

4

1 回答 1

0

Terraform 版本 0.12

https://www.terraform.io/upgrade-guides/0-12.html#remote-state-references

您可以terraform_remote_state直接以地图的形式访问输出。

访问状态文件输出作为地图 data.terraform_remote_state.thing.outputs

output "chosen" {
  value = "${lookup(data.terraform_remote_state.thing.outputs, "property1")}"
}

Terraform 0.11 或更低版本

如果您可以更改outputs状态文件中的变量,您可以将您感兴趣的变量设置为 a map,然后通过索引查找变量。

"outputs": {            
       "thing_variable": {
           "type": "map",
           "value": {
                "property1": "foobar"                        
               }
          }
 }

property1然后要在您的 terraform中引用该属性,请查看输出变量“thing_variable”。

 data "terraform_remote_state" "thing" {
 }

output "chosen" {
  #"property1" could be a variable var.attribute = "property1"
  value = "${lookup(data.terraform_remote_state.thing_variable, "property1")}"
}
于 2019-02-19T13:06:51.380 回答