Как проверить конфигурацию в Terraform перед развертыванием?

1
7

У меня есть конфигурация службы с именем loki.yml. Я не хочу развертывать недействительную конфигурацию. Чтобы проверить конфигурацию, мне нужно выполнить команду loki -log.level debug -verify-config -config.file ./loki.yml.

Как мне написать конфигурацию Terraform для выполнения этой команды?

Я пробовал читать:

и исследовать:

Может ли кто-нибудь поделиться тем, как это должно быть написано? Существуют ли лучшие практики для проверки конфигурации — может быть, это лучше делать вне terraform с помощью Makefile? Вот моя текущая конфигурация:

check "loki_config_is_ok" {
  data "??" "??" {
    ?? get exit code of command ??
  }

  assert {
    condition = ??.exit_code is not 0
    error_message = "dont"
  }
}

resource "nomad_job" "loki" {
  jobspec = file("./loki.nomad.hcl")
  hcl2 {
    vars     = { mark = file("./loki.yml") }
  }
  # dissallow deployment if config is invalid ?
  depends_on = [loki_config_is_ok]
}

Эрнст
Вопрос задан9 июля 2024 г.

1 Ответ

2

Чтобы выполнить проверку файла конфигурации Loki перед его развертыванием с помощью Terraform, вы можете использовать источник данных external в Terraform для запуска команды и захвата ее выходных данных. Это поможет в проверке конфигурации и обеспечении того, чтобы любая недопустимая конфигурация была обнаружена перед развертыванием.

Вот обновленная версия вашей конфигурации Terraform для выполнения команды loki -log.level debug -verify-config -config.file ./loki.yml и использования ее codeа выхода для условного управления развертыванием:

ОбъяснениеВнешний источник данных: Блок data "external" используется для запуска внешней программы и захвата ее выходных данных. Здесь он запускает команду loki -log.level debug -verify-config -config.file ./loki.yml.

Нулевой ресурс:null_resource используется для создания ресурса, который будет запускать команду проверки с помощью поставщика local-exec. Поставщик local-exec запускает команду и проверяет ее code выхода. Если команда не выполняется, параметр on_failure = "fail" гарантирует, что Terraform остановит выполнение.

Ресурс задания Nomad: Ресурс nomad_job зависит от null_resource.loki_config_is_ok, гарантируя, что задание будет создано только в случае успешной проверки конфигурации. Такой подход гарантирует, что конфигурация Loki будет проверена перед развертыванием, и любые ошибки в конфигурации не позволят продолжить развертывание.

data "external" "verify_loki_config" {
  program = ["sh", "-c", "loki -log.level debug -verify-config -config.file ./loki.yml"]
}

resource "null_resource" "loki_config_is_ok" {
  triggers = {
    always_run = "${timestamp()}"
  }

  provisioner "local-exec" {
    command = "loki -log.level debug -verify-config -config.file ./loki.yml"
  }

  provisioner "local-exec" {
    when    = "destroy"
    command = "echo 'Validation complete'"
  }

  provisioner "local-exec" {
    when    = "create"
    command = "echo 'Configuration verified'"
    on_failure = "fail"
  }
}

resource "nomad_job" "loki" {
  jobspec = file("./loki.nomad.hcl")
  hcl2 {
    vars = { mark = file("./loki.yml") }
  }
  depends_on = [null_resource.loki_config_is_ok]
}
Измаил
Ответ получен5 сентября 2024 г.

Ваш ответ

Загрузить файл.