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

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

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

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

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 apply:

A static list expression is required.
0
задан 21 February 2020 в 12:20
1 ответ

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

Это идеально? Конечно нет, но это работает. Основная причина того, почему объекты не адресуются, находится здесь.

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

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 знает о нем...

0
ответ дан 16 June 2020 в 16:53

Теги

Похожие вопросы