From a5a086e397aa5073140927bd4d271eeb8022ef1e Mon Sep 17 00:00:00 2001 From: Patrick Spek Date: Tue, 21 Oct 2025 12:45:56 +0200 Subject: Initial commit --- claim.tf | 18 ++++++++++++++ main.tf | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ volume.tf | 42 ++++++++++++++++++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 claim.tf create mode 100644 main.tf create mode 100644 volume.tf diff --git a/claim.tf b/claim.tf new file mode 100644 index 0000000..e5ac82c --- /dev/null +++ b/claim.tf @@ -0,0 +1,18 @@ +resource "kubernetes_persistent_volume_claim_v1" "this" { + metadata { + name = var.name + namespace = var.namespace + } + + spec { + storage_class_name = var.class + volume_name = kubernetes_persistent_volume_v1.this.metadata[0].name + access_modes = var.modes + + resources { + requests = { + storage = var.size + } + } + } +} diff --git a/main.tf b/main.tf new file mode 100644 index 0000000..25371ae --- /dev/null +++ b/main.tf @@ -0,0 +1,84 @@ +terraform { + required_providers { + kubernetes = { + source = "hashicorp/kubernetes" + version = "~> 2.37.1" + } + } +} + +variable "name" { + type = string +} + +variable "namespace" { + type = string + default = "default" +} + +variable "driver" { + type = string + default = "smb.csi.k8s.io" +} + +variable "class" { + type = string + default = "" +} + +variable "server" { + type = string +} + +variable "share" { + type = string +} + +variable "credentials" { + type = map(string) + default = { + secret = "" + namespace = "default" + } +} + +variable "size" { + type = string + default = "10Gi" +} + +variable "modes" { + type = list(string) + default = [ + "ReadWriteMany", + ] +} + +variable "mount_options" { + type = list(string) + default = [] +} + +variable "uid" { + type = number + default = 1000 +} + +variable "gid" { + type = number + default = null +} + +variable "file_mode" { + type = string + default = "0777" +} + +variable "dir_mode" { + type = string + default = "0777" +} + +output "claim" { + value = kubernetes_persistent_volume_claim_v1.this.metadata[0].name +} diff --git a/volume.tf b/volume.tf new file mode 100644 index 0000000..909f841 --- /dev/null +++ b/volume.tf @@ -0,0 +1,42 @@ +resource "kubernetes_persistent_volume_v1" "this" { + metadata { + name = var.name + } + + spec { + storage_class_name = var.class + access_modes = var.modes + + capacity = { + storage = var.size + } + + persistent_volume_reclaim_policy = "Retain" + + mount_options = concat(var.mount_options, [ + "cache=strict", + "dir_mode=${var.dir_mode}", + "file_mode=${var.file_mode}", + "gid=${var.gid != null ? var.gid : var.uid}", + "mfsymlinks", + "noperm", + "noserverino", + "uid=${var.uid}", + ]) + + persistent_volume_source { + csi { + driver = var.driver + volume_handle = "${var.server}/${var.share}##" + volume_attributes = { + source = "//${var.server}/${var.share}" + } + + node_stage_secret_ref { + name = var.credentials.secret + namespace = try(var.credentials.namespace, "default") + } + } + } + } +} -- cgit v1.2.3