Измените список карт в форматированную строку в terraform - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь настроить Google Cloud Load Balancer, и один шаг требует обновления именованных портов в группах управляемых экземпляров, для которых мне нужна отформатированная строка для генерации вызова командной строки.Я чувствую, что это должно быть чем-то, что я могу автоматизировать с помощью terraform, но я борюсь с отображением форматов данных.

У меня есть два набора исходных данных.

Из ресурса группы экземпляров:

data "google_compute_instance_group" "all" {
  count = "${length(var.backend)}"
  self_link = "${element(var.backend, count.index)}"
}

Я получаю существующие именованные порты от data.google_compute_instance_group.all.*.named_port в формате:

[
    [
        map[name:https port:30443],
        map[name:http port:30080]
    ],
    [
        map[name:https port:30443],
        map[port:30080 name:http]
    ]
]

У меня также есть порты, которые я хочу убедиться, что они определены в моей собственной карте:

variable "node_ports" {
  type    = "map"
  default = {
    "https"   = "30443"
    "monitor" = "30012"
  }
}

Между ними могут быть совпадения;Я хочу выбрать значение, определенное в переменной.(Именованные порты одинаковы для всех групп экземпляров.)

Сначала я хочу объединить две карты в одну карту, чтобы убедиться, что для каждого имени существует один порт.Как я могу преобразовать первый список списков карт в одну карту, чтобы получить это?

{
  "http"    = "30080"
  "https"   = "30443"
  "monitor" = "30012"
}

Во-вторых, я хочу преобразовать все это в формат, необходимый в командной строке:

gcloud --project ${var.project} compute instance-groups set-named-ports ${basename(var.backend[count.index])} --named-ports=https:443,http:30080,monitor:30012

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

"${replace(jsonencode(named_ports), "/[\\{\\}\"\\s]/", "")}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...