Разбор результатов команды Bash в Terraform

В этом примере мы хотим взять результат bash-команды whoami и вернуть переменную, которую Terraform использует в качестве имени пользователя, в данном примере это poweruser.

Документация Terraform показалась мне чрезмерно сложной и запутанной, поскольку она требует ввода строки в корректном JSON. К счастью, это не так сложно сделать в shell.

ПРИМЕЧАНИЕ: Во многих руководствах предлагается использовать инструмент jq, но это только добавляет дополнительные сложности, особенно если Terraform запускается в произвольном unix-контейнере. Поэтому мы постараемся использовать только стандартные инструменты.

Вот сценарий Bash, который генерирует имя пользователя в JSON:

#!/bin/env bash

username=`whoami`

echo "{"value": "$username"}"
Войти в полноэкранный режим Выйти из полноэкранного режима

Назовем этот скрипт whoami.sh и сохраним его в каталоге верхнего уровня нашего проекта.

Вот результат:

{"value": "poweruser"}
Вход в полноэкранный режим Выход из полноэкранного режима

Вот Terraform:

data "external" "username" {
  program = ["bash","whoami.sh"]
  query = {
    p_env = "whoami"
  }
}
Войти в полноэкранный режим Выход из полноэкранного режима

Чтобы использовать код, используйте следующее в качестве переменной:

  username            = data.external.username.result.value
Enter fullscreen mode Выйти из полноэкранного режима

Как это работает, можно увидеть, взглянув на верхнюю строку terraform, в которой есть «data», затем «external», затем имя, «username».

Наконец, «result.value» жестко закодированы в Terraform, когда он разбирает json-вывод.

Это должно помочь получить данные из тривиальной shell-команды в Terraform с чуть меньшими усилиями. В целом, я нашел это довольно запутанным.

Если будет время, я отредактирую это сообщение и добавлю полный рабочий код Terrform.

Оцените статью
devanswers.ru
Добавить комментарий