Как подготовить рендеринг JSON для aws-cli в Terraform? - PullRequest
0 голосов
/ 29 августа 2018

В другой теме я спросил , как сохранить определения задач ECS активными в AWS. В результате я планирую обновить определение задачи следующим образом:

resource "null_resource" "update_task_definition" {
  triggers {
    keys = "${uuid()}"
  }

  # Workaround to prevent older task definitions being deactivated
  provisioner "local-exec" {
    command = <<EOF
aws ecs register-task-definition \
--family my-task-definition \
--container-definitions ${data.template_file.task_definition.rendered} \
--network-mode bridge \
EOF
  }
}

data.template_file.task_definition - это источник данных шаблона, который предоставляет шаблон JSON из файла. Однако это не работает, поскольку JSON содержит новые строки и пробелы.

Я уже понял, что могу использовать интерполяционную функцию replace, чтобы избавиться от новых строк и пробелов, однако мне все еще требуется экранировать двойные кавычки, чтобы API-интерфейс AWS принимал запрос.

Как можно безопасно подготовить строку, полученную из data.template_file.task_definition.rendered? Я ищу что-то вроде этого:

Необработанная строка:

{
  "key": "value",
  "another_key": "another_value"
}

Подготовленная строка:

{\"key\":\"value\",\"another_key\":\"another_value\"}

1 Ответ

0 голосов
/ 29 августа 2018

Вы должны иметь возможность обернуть визуализированный JSON с помощью функции jsonencode .

Со следующим кодом Terraform:

data "template_file" "example" {
  template = "${file("example.tpl")}"

  vars {
    foo = "foo"
    bar = "bar"
  }
}

resource "null_resource" "update_task_definition" {
  triggers {
    keys = "${uuid()}"
  }

  provisioner "local-exec" {
    command = <<EOF
echo ${jsonencode(data.template_file.example.rendered)}
EOF
  }
}

И следующий файл шаблона:

{
  "key": "${foo}",
  "another_key": "${bar}"
}

Запуск применения Terraform дает следующий вывод:

null_resource.update_task_definition: Creating...
  triggers.%:    "" => "1"
  triggers.keys: "" => "18677676-4e59-8476-fdde-dc19cd7d2f34"
null_resource.update_task_definition: Provisioning with 'local-exec'...
null_resource.update_task_definition (local-exec): Executing: ["/bin/sh" "-c" "echo \"{\\n  \\\"key\\\": \\\"foo\\\",\\n  \\\"another_key\\\": \\\"bar\\\"\\n}\\n\"\n"]
null_resource.update_task_definition (local-exec): {
null_resource.update_task_definition (local-exec):   "key": "foo",
null_resource.update_task_definition (local-exec):   "another_key": "bar"
null_resource.update_task_definition (local-exec): }
...