Преобразовать строку или массив для отображения в Terraform? - PullRequest
0 голосов
/ 21 января 2019

Terraform v0.10.7 Версия провайдера AWS = "~> 1.54.0"

Есть ли примеры, как преобразовать строку или список в карту в Terraform?

Мы настраиваем хранилище ключей / значений Консула следующим образом:

consul kv put common/rules/alb/service1 name=service1,port=80,hcproto=http,hcport=80

Я могу правильно обращаться к ключам и значениям, и теперь я пытаюсь использовать значения в качестве карты в Terraform:

data "consul_key_prefix" "common" {
  path_prefix = "common/rules"
}

output "common"{
value = "${jsonencode(lookup(var.CommonRules,element(keys(var.CommonRules),1))) }"
}

$ terraform output

common = "{name=service1,port=80,hcproto=http,hcport=80}"

Но когда я пытаюсь получить к нему доступ как к карте, она не работает:

output "common"{
value = "${lookup(jsonencode(lookup(var.CommonRules,element(keys(var.CommonRules),1))),"name") }"
}

$ terraform output

(нет ответа)

Я попробовал несколько вещей здесь - например, разбить эти значения и снова объединить их в список, а затем запустить функцию «map», но она тоже не работает:

$ terraform output

common = [
    name,
    service1,
    port,
    80,
    hcproto,
    http,
    hcport,
    80
]

и затем пытаемся создать карту этого списка:

output "common2" {
value = "${map(split(",",join(",",split("=",lookup(var.CommonRules,element(keys(var.CommonRules),1))))))}"
}

но это тоже не работает.

Итак, мой вопрос: есть ли у кого-нибудь рабочий пример, когда он переводил строку (или список) в карту?

Заранее спасибо.

1 Ответ

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

jsondecode функция в предстоящей Terraform v0.12 будет инструментом для решения этой проблемы.

jsondecode функция GitHub выпуск

...