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 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.
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