Назад | Перейти на главную страницу

terraform с поставщиком руля игнорирует изменения изображения

Я использую terraform с поставщиком helm для развертывания диаграммы helm, все работает с terraform, проблема в том, что приложение уже запущено, и я изменил тег изображения из конвейера gitlab.

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

Я пробовал использовать жизненный цикл, это мой код терраформы:

resource "helm_release" "app1" {
  name      = "app1"
  namespace = "money"
  chart     = "stable/perl"

  set {
    name  = "image.repository"
    value = "docker.registry.local/app1-api"
  }

  set {
    name  = "replicaCount"
    value = "2"
  }
  set {
    name  = "image.tag"
    value = "1.0.1"
  }

  set {
    name  = "image.pullPolicy"
    value = "Always"
  }

  set {
    name  = "service.type"
    value = "ClusterIP"
  }

  lifecycle {
    ignore_changes = [for s in set : s.name if s.name == "image.tag"]
  }
}

terraform применить:

A static list expression is required.

В частности, для ресурса Helm вы можете обманом заставить Terraform игнорировать все объекты одного «типа», то есть вы можете использовать один из трех объектов (set, set_sensitive, set_string) внутри lifecycle и игнорируйте их все.

Это идеально? Конечно, нет, но работает. Основная причина невозможности адресации объектов: Вот.

В вашем примере это будет примерно так:

resource "helm_release" "app1" {
  set_string {
    name  = "image.tag"
    value = "1.0.1"
  }

  lifecycle {
    ignore_changes = [set_string]
  }
}

Редактировать: Обратите внимание, что ignore_changes вполне буквально, так как любое обновление приведет к старый значение для замены того, что в настоящее время настроено в Helm.

Пример: Terraform настроил начальный тег и начальный replicaCount == 2. Затем система CI / CD делает свое дело и обновляет тег. Теперь, если бы вы использовали Terraform для изменения replicaCount начальный тег будет применен повторно, так как это тот, о котором знает Terraform ...