diff --git a/charts/longhorn/templates/backup-storageclass.yaml b/charts/longhorn/templates/backup-storageclass.yaml index 9b45342..2f71cce 100644 --- a/charts/longhorn/templates/backup-storageclass.yaml +++ b/charts/longhorn/templates/backup-storageclass.yaml @@ -16,6 +16,12 @@ parameters: numberOfReplicas: {{ $.Values.numberOfReplicas | quote }} staleReplicaTimeout: "30" fromBackup: "" + {{- if $.Values.recurringJobSelector }} + recurringJobSelector: + {{- with $.Values.recurringJobSelector }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- end }} recurringJobs: '[ {{- if $.Values.backups.config.snapshot_enabled }} { diff --git a/charts/longhorn/templates/recurring-job-filesystem-trim.yaml b/charts/longhorn/templates/recurring-job-filesystem-trim.yaml new file mode 100644 index 0000000..0a14eab --- /dev/null +++ b/charts/longhorn/templates/recurring-job-filesystem-trim.yaml @@ -0,0 +1,24 @@ +{{- if $.Values.automaticFilesystemTrim.enabled -}} + +--- +apiVersion: longhorn.io/v1beta2 +kind: RecurringJob +metadata: + name: {{ $.Release.Name }}-filesystem-trim + labels: + name: {{ $.Release.Name }}-filesystem-trim +spec: + concurrency: 1 + cron: {{ $.Values.automaticFilesystemTrim.cron | quote }} + {{- if and ($.Values.automaticFilesystemTrim.jobGroup) (ne $.Values.automaticFilesystemTrim.jobGroup "") }} + groups: + - {{ $.Values.automaticFilesystemTrim.jobGroup | quote }} + {{- else }} + groups: [] + {{- end }} + labels: {} + name: fs-trim + retain: 0 + task: filesystem-trim + +{{- end -}} \ No newline at end of file diff --git a/charts/longhorn/values.yaml b/charts/longhorn/values.yaml index ed97d53..1d126d6 100644 --- a/charts/longhorn/values.yaml +++ b/charts/longhorn/values.yaml @@ -1 +1,5 @@ --- +automaticFilesystemTrim: + enabled: false + cron: 0 6 * * * +recurringJobSelector: "" diff --git a/locals.tf b/locals.tf index e894d14..e90984e 100644 --- a/locals.tf +++ b/locals.tf @@ -20,6 +20,10 @@ locals { persistence = { defaultClass = var.enable_pv_backups && var.set_default_storage_class ? "false" : "true" defaultClassReplicaCount = var.replica_count + recurringJobSelector = { + enable = var.automatic_filesystem_trim.enabled && !var.set_default_storage_class ? "true" : "false" + jobList = var.automatic_filesystem_trim.enabled && !var.set_default_storage_class ? var.recurring_job_selectors : null + } } longhornManager = { tolerations = var.tolerations @@ -63,6 +67,12 @@ locals { servicemonitor = { enabled = var.enable_service_monitor } + automaticFilesystemTrim = { + enabled = var.automatic_filesystem_trim.enabled + cron = var.automatic_filesystem_trim.cron + job_group = var.automatic_filesystem_trim.job_group + } + recurringJobSelector = var.automatic_filesystem_trim.enabled && var.enable_pv_backups && var.set_default_storage_class ? var.recurring_job_selectors : null }] } diff --git a/variables.tf b/variables.tf index cc8dd0c..39f1351 100644 --- a/variables.tf +++ b/variables.tf @@ -174,6 +174,26 @@ variable "oidc" { default = null } +variable "automatic_filesystem_trim" { + description = "Settings to enable and configure automatic filesystem trim of volumes managed by Longhorn." + type = object({ + enabled = bool + cron = string + job_group = string + }) + default = { + enabled = false + cron = "0 6 * * *" + job_group = "" + } +} + +variable "recurring_job_selectors" { + description = "Define a group list to add to recurring job selector for the default storageclass (the custom backup one if `set_default_storage_class` is set or else the Longhorn default one)" + type = string + default = "" +} + variable "replica_count" { description = "Amount of replicas created by Longhorn for each volume." type = number