Search code examples
terraformkubernetes-helm

Terraform/Helm release - metadata block appears as drift


I'm currently using Terraform to deploy a Velero helm chart on my Kubernetes Cluster.

Issue here is that the "metadata" block always appears as drift whereas nothing has been changed in the resource configuration.

  • Terraform CLI version : 1.6.3
  • azurerm provider version : 3.92.0
  • helm provider version : 2.12.1

Terraform code :

  velero_params = {
    name        = "velero"
    chart       = "velero"
    repository  = "https://vmware-tanzu.github.io/helm-charts"
    namespace   = "velero"
    version     = "5.3"
    velero_default_values = {
      "restoreOnlyMode"                                           = "false"
... lot of lines ...
      "image.tag"                                                 = "v1.13.0"
      "image.pullPolicy"                                          = "IfNotPresent"
      "features"                                                  = "EnableCSI"
    }
resource "helm_release" "velero" {
  name       = var.env_params.velero_params.name
  chart      = var.env_params.velero_params.chart
  repository = var.env_params.velero_params.repository
  namespace  = var.env_params.velero_params.namespace
  version    = var.env_params.velero_params.version

  dynamic "set" {
    for_each = var.env_params.velero_params.velero_default_values
    iterator = setting
    content {
      name  = setting.key
      value = setting.value
    }
  }

}

Terraform plan output :

Terraform will perform the following actions:

  # helm_release.velero will be updated in-place
  ~ resource "helm_release" "velero" {
        id                         = "velero"
      ~ metadata                   = [
          - {
              - app_version = "1.13.0"
              - chart       = "velero"
              - name        = "velero"
              - namespace   = "velero"
              - revision    = 3
              - values      = jsonencode(
                    {
                      - configuration            = {
... lot of lines ...
                      - snapshotsEnabled         = false
                    }
                )
              - version     = "5.3.0"
            },
        ] -> (known after apply)
        name                       = "velero"
        # (26 unchanged attributes hidden)

        # (30 unchanged blocks hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.

Any idea how I could get rid of this "unreal" drift ?

Thanks for help.


Solution

  • You can try adding the ignore_changes lifecycle meta-argument:

    resource "helm_release" "velero" {
      name       = var.env_params.velero_params.name
      [...]
    
      lifecycle {
        ignore_changes = [
          metadata
        ]
      }
    }
    

    Reference: https://developer.hashicorp.com/terraform/language/meta-arguments/lifecycle#ignore_changes