Как интерполировать выражения в Terraform? - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь использовать выражение keys в Terraform, чтобы получить список ключей (из переменной карты) и назначить его локальной переменной. Вот фрагмент кода:

 locals {
 project_name_list = keys(${var.project_map})
 }

Однако я получаю следующую ошибку:

Unknown token: 29:22 IDENT keys

Я что-то здесь упускаю? Нигде не могу найти пример этого выражения. Как бы плохо это ни было, даже официальная документация не помогает - https://www.terraform.io/docs/configuration/functions/keys.html

HashiCorp действительно плохо справился с разработкой нюансов Terraform для начинающих на своем сайте.

1 Ответ

3 голосов
/ 13 мая 2019

Функции Terraform необходимо обернуть в синтаксис выражения, чтобы показать, что это не буквальное значение: "${}"

Поэтому попробуйте это: project_name_list = "${keys(var.project_map)}"

Пример в документации написанкак будто он запускается из командной строки terraform, которая уже предполагает, что команда является выражением HCL и не требует этого синтаксиса.

UPDATE

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

Думая об этом в этих терминах, лучше понять сообщение об ошибке Unknown token, потому что terraform пытается прочитать его как ключевое слово конфигурации.

Я сравнил его с буквальным значением, потому что оно вта же позиция, что и для буквального значения.

...