Skip to content

Commit

Permalink
Merge pull request #6 from homirun/pv-recreate-del
Browse files Browse the repository at this point in the history
If the pv disappears, do not delete the custom resource, but recreate the pv.
  • Loading branch information
homirun committed Jan 10, 2024
2 parents 79f6bba + 85c9895 commit e4ec2be
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 11 deletions.
7 changes: 1 addition & 6 deletions internal/controller/namespacedpv_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import (
"errors"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
Expand Down Expand Up @@ -213,11 +212,7 @@ func (r *NamespacedPvReconciler) DeleteNamespacedPV(ctx context.Context, namespa
return err
}
r.Get(ctx, types.NamespacedName{Name: targetPv.Name}, targetPv)
cond := metav1.Preconditions{
UID: &targetPv.UID,
ResourceVersion: &targetPv.ResourceVersion,
}
if err := r.Delete(ctx, targetPv, &client.DeleteOptions{Preconditions: &cond}); err != nil {
if err := r.Delete(ctx, targetPv); err != nil {
logger.Error(err, "unable to delete NamespacedPv")
return err
}
Expand Down
23 changes: 18 additions & 5 deletions internal/controller/persistentvolume_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package controller

import (
"context"
"strconv"

namespacedpvv1 "github.com/homirun/namespaced-pv-controller/api/v1"
corev1 "k8s.io/api/core/v1"
Expand Down Expand Up @@ -77,14 +78,26 @@ func (r *PersistentVolumeReconciler) DeletePV(ctx context.Context, pv *corev1.Pe
logger := log.FromContext(ctx)

if !pv.GetDeletionTimestamp().IsZero() {
if !controllerutil.ContainsFinalizer(pv, finalizerName) && pv.Annotations["pv.kubernetes.io/provisioned-by"] == "namespaced-pv-controller" {
controllerutil.RemoveFinalizer(pv, "namespacedpv.homi.run/pvFinalizer")
if controllerutil.ContainsFinalizer(pv, finalizerName) && pv.Annotations["pv.kubernetes.io/provisioned-by"] == "namespaced-pv-controller" {
controllerutil.RemoveFinalizer(pv, finalizerName)
if err := r.Update(ctx, pv); err != nil {
logger.Error(err, "unable to update PersistentVolume")
return err
}

logger.Info("pv finalizer is removed")
namespacedPv := &namespacedpvv1.NamespacedPv{}
r.Get(ctx, client.ObjectKey{Namespace: pv.Labels["owner-namespace"], Name: pv.Labels["owner"]}, namespacedPv)
if err := r.Get(ctx, client.ObjectKey{Namespace: pv.Labels["owner-namespace"], Name: pv.Labels["owner"]}, namespacedPv); err != nil {
logger.Error(err, "unable to fetch NamespacedPv")
return err
}

if err := r.Delete(ctx, namespacedPv); err != nil {
logger.Error(err, "unable to update NamespacedPv")
recreateCount, _ := strconv.Atoi(namespacedPv.Annotations["namespacedpv.homi.run/recreate-pv-count"])
namespacedPvCopy := namespacedPv.DeepCopy()
namespacedPvCopy.Annotations["namespacedpv.homi.run/recreate-pv-count"] = strconv.Itoa(recreateCount + 1)
patch := client.MergeFrom(namespacedPv)
if err := r.Patch(ctx, namespacedPvCopy, patch); err != nil {
logger.Error(err, "unable to patch NamespacedPv")
return err
}
}
Expand Down

0 comments on commit e4ec2be

Please sign in to comment.