locals { app_slug = "${var.instance}${var.component == "" ? "" : "-"}${var.component}" pvc_labels = merge(var.labels, { "app.kubernetes.io/component" = "pvc" }) pvc_annotations = { "k8up.io/backup" = var.backup "resize.kubesphere.io/storage_limit" = var.storage.max_size } # pvc_spec = merge({ # "accessModes" = [var.storage.access_mode] # "volumeMode" = var.storage.type # "resources" = { # "requests" = { # "storage" = var.storage.size # } # } # }, var.storage.class != "" ? { # "storageClassName" = var.storage.class # } : {}) } # resource "kubectl_manifest" "pvc" { # ignore_fields = [ # "spec.resources.requests.storage", # "spec.storageClassName", # ] # yaml_body = <<-EOF # apiVersion: v1 # kind: PersistentVolumeClaim # metadata: # name: ${local.app_slug} # namespace: "${var.namespace}" # annotations: # k8up.io/backup: "${var.backup}" # resize.kubesphere.io/storage_limit: "${var.storage.max_size}" # labels: ${jsonencode(local.pvc_labels)} # spec: ${jsonencode(local.pvc_spec)} # EOF # } resource "kubernetes_persistent_volume_claim_v1" "pvc" { metadata { name = local.app_slug namespace = var.namespace annotations = local.pvc_annotations labels = local.pvc_labels } spec { access_modes = [var.storage.access_mode] resources { requests = { storage = var.storage.size } } storage_class_name = var.storage.class } lifecycle { ignore_changes = [ spec[0].resources[0].requests[0], spec[0].storage_class_name, ] } }