Terraform: динамический атрибут из переменной (в синтаксисе сплат) - PullRequest
0 голосов
/ 14 мая 2018

В terraform HCL можно ли динамически ссылаться на атрибут объекта из переменной?

Т.е.:

variable "attribute" {
  type = "string"
}

data "terraform_remote_state" "thing" {
  not_really_important
}

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

Более конкретно в моей ситуации, я собираюсь сделать этос синтаксисом восклицательного знака:

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) и (для проблемы с восклицательным знаком) lookup(element(data.terraform_remote_state.*, count.index), var.attribute), но они оба жалуются, что моя ссылка на атрибут является неполной / в неправильной форме.

1 Ответ

0 голосов
/ 19 февраля 2019

Версия 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 в файле состояния, вы можете установить интересующую переменную равной 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")}"
}
...