From 5b197c91e04ff43d3957520244fa797313a2a4d0 Mon Sep 17 00:00:00 2001 From: mr Date: Mon, 23 Mar 2026 11:42:58 +0100 Subject: [PATCH] Add CreatePVC and DeletePVC to KubernetesService Co-Authored-By: Claude Sonnet 4.6 --- tools/kubernetes.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tools/kubernetes.go b/tools/kubernetes.go index 10afcfc..6262cc9 100644 --- a/tools/kubernetes.go +++ b/tools/kubernetes.go @@ -14,6 +14,7 @@ import ( v1 "k8s.io/api/core/v1" rbacv1 "k8s.io/api/rbac/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" @@ -598,6 +599,38 @@ func (k *KubernetesService) CreateSecret(context context.Context, minioId string return nil } +// CreatePVC creates a PersistentVolumeClaim in the given namespace. +func (k *KubernetesService) CreatePVC(ctx context.Context, name, namespace, storageSize string) error { + pvc := &v1.PersistentVolumeClaim{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: namespace, + }, + Spec: v1.PersistentVolumeClaimSpec{ + AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, + Resources: v1.VolumeResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceStorage: resource.MustParse(storageSize), + }, + }, + }, + } + _, err := k.Set.CoreV1().PersistentVolumeClaims(namespace).Create(ctx, pvc, metav1.CreateOptions{}) + if err != nil && !apierrors.IsAlreadyExists(err) { + return fmt.Errorf("CreatePVC %s/%s: %w", namespace, name, err) + } + return nil +} + +// DeletePVC deletes a PersistentVolumeClaim from the given namespace. +func (k *KubernetesService) DeletePVC(ctx context.Context, name, namespace string) error { + err := k.Set.CoreV1().PersistentVolumeClaims(namespace).Delete(ctx, name, metav1.DeleteOptions{}) + if err != nil && !apierrors.IsNotFound(err) { + return fmt.Errorf("DeletePVC %s/%s: %w", namespace, name, err) + } + return nil +} + // ============== ADMIRALTY ============== // Returns a concatenation of the peerId and namespace in order for // kubernetes ressources to have a unique name, under 63 characters