Как передать переменные Terraform в файлы .yaml?

У меня есть модуль terraform и .yaml docker-compose с конфигурацией службы. В Yaml есть такие переменные, как:

version: '3.2'
services:
  cadvisor:
    image: gcr.io/google-containers/cadvisor:${var.image_version}     
    container_name: cadvisor
    volumes:
    - /:/rootfs:ro
    - /var/lib/docker:/var/lib/docker:ro
    mem_limit: ${var.limit}
    mem_reservation: ${var.reservation}
    ports:
    - 8080:8080

и мой ресурс:

resource "local_file" "compose" {
  content = file("${var.compose_path}/docker-compose.yml")
  filename = "${path.module}/foo.bar"
}

Значения объявлены в моем модуле. Я собираюсь использовать этот файл docker-compose.yml в своем проекте, например. отправить на удаленный сервер и запустить там. Как передать значения переменных из моего модуля в yaml?

Я попытался объявить значения и выполнить некоторые действия с моим yaml, такие как resource "local_file" , чтобы сохранить как файл, но .yaml остается без значений.

Можете ли вы добавить весь блок кода к вопросу? У меня есть представление об ответе, но мне нужно увидеть все, что у вас есть на данный момент.

Marko E 09.11.2022 22:45
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
1
231
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете добиться того, чего хотите, используя встроенную функцию templatefile [1]:

resource "local_file" "compose" {
  content = templatefile("${var.compose_path}/docker-compose.yml", {
    image_version = var.image_version
    limit         = var.limit       
    reservation   = var.reservation
  })
  filename = "${path.module}/docker-compose.yml"
}

Это также потребует незначительных изменений в файле docker-compose.yml:

version: '3.2'
services:
  cadvisor:
    image: gcr.io/google-containers/cadvisor:${image_version}     
    container_name: cadvisor
    volumes:
    - /:/rootfs:ro
    - /var/lib/docker:/var/lib/docker:ro
    mem_limit: ${limit}
    mem_reservation: ${reservation}
    ports:
    - 8080:8080

[1] https://www.terraform.io/language/functions/templatefile

Другие вопросы по теме