Присоединяйтесь к массиву с одним элементом в terraform или jq - PullRequest
1 голос
/ 26 мая 2020

У меня есть следующие json данные, которые я получаю от data "external" в терраформе

{
  "ips": ["192.168.0.1",
          "192.168.0.2",
          "192.168.0.3"],

  "port": "8080"
}

Я хочу построить целевой адрес в формате ip:port

Желаемый выводим следующим образом:

["192.168.0.1:8080",
"192.168.0.2:8080",
"192.168.0.3:8080"]

Я пытаюсь сделать это в terraform, но меня устраивает решение, использующее jq

Ближайшее, что я смог найти, - это строка join функция, которая принимает разделитель, но не добавляет порт к последнему элементу

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Если выходной формат jq вам подходит, вы можете использовать это:

jq '[ .ips[] + ":" + .port ]' input

[
  "192.168.0.1:8080",
  "192.168.0.2:8080",
  "192.168.0.3:8080"
]

.ips[] выполняет итерацию по массиву ip, сохраняя root объект в качестве входных данных, так что .port доступен. Затем выражение ... + ":" + .port применяется к каждому элементу, создавая поток преобразованных значений.

0 голосов
/ 26 мая 2020

Мне удалось найти рабочее решение с помощью terraform join, затем вручную добавить порт к последнему IP-адресу, но я буду рад найти более чистое решение

фрагмент terraform

format("%s:%s", 
      join(
         format(":%s,", port),
         ips
       ),
      port)
...