Использование вывода скрипта bash в качестве переменной в Terraform - PullRequest
2 голосов
/ 09 апреля 2019

Мне было интересно, если бы кто-то мог указать мне правильное направление, я смотрю на вербализацию нашей версии Kubernetes в нашем модуле Terraform, поскольку в настоящее время она жестко запрограммирована.

Время от времени мы получаем сообщение о том, чтонаша «версия оркестровки» недействительна при развертывании нашего кластера - это связано с тем, что Azure отбрасывает нашу версию Kubernetes ... (мы ежедневно развертываем наши среды разработки / разработки)

Поэтому я пришел к мыслииспользования переменной для нашей версии, чтобы мы всегда могли развернуть, избегая ошибки «неверная оркестровка».Я написал скрипт bash для того, что мне нужно;

az aks get-versions --location westeurope --query 'orchestrators' -o tsv | awk '{print $3}' | tail -2 | head -n 1

Но теперь я хочу использовать вывод ^^^ для использования в качестве нашей версии Kubernetes в нашем модуле Terraform, который мы ежедневно развертываем.

Кто-нибудь может указать мне правильное направление?

Я смотрел на использование build-args в контейнере Docker.

Ответы [ 3 ]

0 голосов
/ 09 апреля 2019

Вы можете использовать Подстановку команд, чтобы присвоить результат команды переменной. Я позволил себе очистить обработку текста в одном awk утверждении. Следующий Bash должен назначить второе-последнее значение третьего столбца вашего az вывода переменной kubernetes_version.

kubernetes_version=$(
  az aks get-versions -o tsv \
    --location westeurope --query orchestrators \
      |awk '{penult=ult; ult=$3} END{printf penult}'
)

Это не проверено, так как я не использую Azure; пожалуйста, комментируйте любые вопросы / проблемы.

0 голосов
/ 16 апреля 2019

Вы можете легко передать выходные данные bash-скрипта в модуль terraform через Terraform CLI

  1. Назначить выходные данные bash-скрипта в переменную, скажем, kubernetes_version=$([your-bash-command])
  2. Втот же файл bash, передайте эту переменную через CLI Terraform.Это выглядит примерно так:
terraform [action] -var "tf_kubernetes_version=$kubernetes_version" [some-other-options] [tf-root-directory]

action может быть plan/destroy/apply.Посетите это для получения более подробной информации.

Убедитесь, что каталог tf-root содержит объявление переменной
variable "tf_kubernetes_version" {}
Передайте переменную tf_kubernetes_version от пользователя root в модуль
module "kubernetes_module" {
   source = "[tf-module-directory]"
   md_kubernetes = "${var.tf_kubernetes_version}"
}
Убедитесь, что директория tf-module содержит объявление переменной
variable "md_kubernetes_version" {}

Наконец, вы можете использовать $ {var.md_kubernetes_version} в вашем модуле terraform.

Примечание: Вы можете добавить значение по умолчанию для объявления переменных terraform в шагах 3 и 5 для базовой версии kubernetes.

Надеюсь, это поможет!

0 голосов
/ 09 апреля 2019

Один из способов решить эту проблему - сохранить выходные данные bash-скрипта в файл и использовать локальный поставщик для чтения этого файла:

data "local_file" "foo" {
    filename = "${path.module}/foo.bar"
}

, а затем вы можете использовать содержимое файла через${local_file.foo.content}.

Но я бы проверил, какие источники данных доступны у провайдера Azure.Вы можете использовать ресурс данных azurem_kubernetes_cluster , чтобы получить версию kubernetes_version развернутого кластера:

data "azurerm_kubernetes_cluster" "test" {
  name                = "myakscluster"
  resource_group_name = "my-example-resource-group"
}

, которая делает версию kubernetes через атрибут kubernetes_version.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...