From fdf9e07617e69beff340750d5ca2275bd00ead18 Mon Sep 17 00:00:00 2001 From: Deepak Kinni Date: Wed, 3 Nov 2021 10:43:10 -0700 Subject: [PATCH] external-provisioner changes to support PV Deletion protection finalizer Signed-off-by: Deepak Kinni --- README.md | 1 + cmd/csi-provisioner/csi-provisioner.go | 7 +- go.mod | 2 +- go.sum | 4 +- pkg/capacity/provision.go | 2 +- pkg/controller/clone_controller.go | 2 +- pkg/controller/controller.go | 4 +- pkg/controller/controller_test.go | 2 +- pkg/features/features.go | 11 +- vendor/modules.txt | 8 +- .../{v7 => v8}/LICENSE | 0 .../{v7 => v8}/controller/controller.go | 115 +++++++++++++++--- .../{v7 => v8}/controller/doc.go | 2 +- .../{v7 => v8}/controller/metrics/doc.go | 2 +- .../{v7 => v8}/controller/metrics/metrics.go | 0 .../{v7 => v8}/controller/volume.go | 0 .../{v7 => v8}/controller/volume_store.go | 0 .../{v7 => v8}/util/doc.go | 2 +- .../{v7 => v8}/util/util.go | 0 19 files changed, 131 insertions(+), 33 deletions(-) rename vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/{v7 => v8}/LICENSE (100%) rename vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/{v7 => v8}/controller/controller.go (93%) rename vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/{v7 => v8}/controller/doc.go (95%) rename vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/{v7 => v8}/controller/metrics/doc.go (94%) rename vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/{v7 => v8}/controller/metrics/metrics.go (100%) rename vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/{v7 => v8}/controller/volume.go (100%) rename vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/{v7 => v8}/controller/volume_store.go (100%) rename vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/{v7 => v8}/util/doc.go (97%) rename vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/{v7 => v8}/util/util.go (100%) diff --git a/README.md b/README.md index b676864d4f..03ef371261 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ Following table reflects the head of this branch. | CSIMigration | Beta | On | [Migrating in-tree volume plugins to CSI](https://kubernetes.io/docs/concepts/storage/volumes/#csi-migration). | No | | CSIStorageCapacity | Beta | On | Publish [capacity information](https://kubernetes.io/docs/concepts/storage/volumes/#storage-capacity) for the Kubernetes scheduler. | No | | ReadWriteOncePod | Alpha | Off | [Single pod access mode for PersistentVolumes](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes). | No | +| HonorPVReclaimPolicy| Alpha |Off | [Honor the PV reclaim policy](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/2644-honor-pv-reclaim-policy) | No All other external-provisioner features and the external-provisioner itself is considered GA and fully supported. diff --git a/cmd/csi-provisioner/csi-provisioner.go b/cmd/csi-provisioner/csi-provisioner.go index 41dc142807..9ae14d45c8 100644 --- a/cmd/csi-provisioner/csi-provisioner.go +++ b/cmd/csi-provisioner/csi-provisioner.go @@ -20,6 +20,7 @@ import ( "context" goflag "flag" "fmt" + "github.com/kubernetes-csi/external-provisioner/pkg/features" "math/rand" "net/http" "os" @@ -50,7 +51,7 @@ import ( _ "k8s.io/component-base/metrics/prometheus/workqueue" // register work queues in the default legacy registry csitrans "k8s.io/csi-translation-lib" "k8s.io/klog/v2" - "sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller" + "sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller" "github.com/kubernetes-csi/csi-lib-utils/leaderelection" "github.com/kubernetes-csi/csi-lib-utils/metrics" @@ -359,6 +360,10 @@ func main() { controller.NodesLister(nodeLister), } + if utilfeature.DefaultFeatureGate.Enabled(features.HonorPVReclaimPolicy) { + provisionerOptions = append(provisionerOptions, controller.AddFinalizer(true)) + } + if supportsMigrationFromInTreePluginName != "" { provisionerOptions = append(provisionerOptions, controller.AdditionalProvisionerNames([]string{supportsMigrationFromInTreePluginName})) } diff --git a/go.mod b/go.mod index 7e594989a2..7fc20a7916 100644 --- a/go.mod +++ b/go.mod @@ -30,5 +30,5 @@ require ( k8s.io/csi-translation-lib v0.22.0 k8s.io/klog/v2 v2.9.0 sigs.k8s.io/controller-runtime v0.8.3 - sigs.k8s.io/sig-storage-lib-external-provisioner/v7 v7.0.1 + sigs.k8s.io/sig-storage-lib-external-provisioner/v8 v8.0.0 ) diff --git a/go.sum b/go.sum index 7f25a2fe32..bbdbd9dfa8 100644 --- a/go.sum +++ b/go.sum @@ -982,8 +982,8 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyz sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/controller-runtime v0.8.3 h1:GMHvzjTmaWHQB8HadW+dIvBoJuLvZObYJ5YoZruPRao= sigs.k8s.io/controller-runtime v0.8.3/go.mod h1:U/l+DUopBc1ecfRZ5aviA9JDmGFQKvLf5YkZNx2e0sU= -sigs.k8s.io/sig-storage-lib-external-provisioner/v7 v7.0.1 h1:V7VpIENtPECffT1exDwS4IvxnsaZGpXByzJwIwA6wRM= -sigs.k8s.io/sig-storage-lib-external-provisioner/v7 v7.0.1/go.mod h1:kWYdKvf1O/T6AunX35p5KulJQd3tLpCXpBGevfNpoV8= +sigs.k8s.io/sig-storage-lib-external-provisioner/v8 v8.0.0 h1:vQUoaDxbberC3UwvE+zauyOMkpWlleaVgc75LoDOyy4= +sigs.k8s.io/sig-storage-lib-external-provisioner/v8 v8.0.0/go.mod h1:ejoxC3K6lnUtjUanKStWadRVnwIuyRPNJGQ4dkExDao= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno= diff --git a/pkg/capacity/provision.go b/pkg/capacity/provision.go index 82544e9720..971870f8da 100644 --- a/pkg/capacity/provision.go +++ b/pkg/capacity/provision.go @@ -20,7 +20,7 @@ import ( "context" v1 "k8s.io/api/core/v1" - "sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller" + "sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller" ) type provisionWrapper struct { diff --git a/pkg/controller/clone_controller.go b/pkg/controller/clone_controller.go index 5640302a1b..6de1de3f29 100644 --- a/pkg/controller/clone_controller.go +++ b/pkg/controller/clone_controller.go @@ -18,7 +18,7 @@ import ( "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" "k8s.io/klog/v2" - "sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller" + "sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller" ) // diff --git a/pkg/controller/controller.go b/pkg/controller/controller.go index e4ae27e936..94cb2d1dde 100644 --- a/pkg/controller/controller.go +++ b/pkg/controller/controller.go @@ -49,8 +49,8 @@ import ( "k8s.io/client-go/tools/record" "k8s.io/client-go/util/workqueue" "k8s.io/klog/v2" - "sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller" - "sigs.k8s.io/sig-storage-lib-external-provisioner/v7/util" + "sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller" + "sigs.k8s.io/sig-storage-lib-external-provisioner/v8/util" "github.com/kubernetes-csi/csi-lib-utils/connection" "github.com/kubernetes-csi/csi-lib-utils/metrics" diff --git a/pkg/controller/controller_test.go b/pkg/controller/controller_test.go index c14658c835..f242974861 100644 --- a/pkg/controller/controller_test.go +++ b/pkg/controller/controller_test.go @@ -46,7 +46,7 @@ import ( utilfeaturetesting "k8s.io/component-base/featuregate/testing" csitrans "k8s.io/csi-translation-lib" "k8s.io/klog/v2" - "sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller" + "sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller" "github.com/kubernetes-csi/csi-lib-utils/connection" "github.com/kubernetes-csi/csi-lib-utils/metrics" diff --git a/pkg/features/features.go b/pkg/features/features.go index 54f9a9db42..1b392bbd2e 100644 --- a/pkg/features/features.go +++ b/pkg/features/features.go @@ -26,6 +26,14 @@ const ( // alpha: v0.4 // beta: v1.2 Topology featuregate.Feature = "Topology" + + // owner: @deepakkinni @xing-yang + // kep: http://kep.k8s.io/2680 + // alpha: v1.23 + // + // Honor Persistent Volume Reclaim Policy when it is "Delete" irrespective of PV-PVC + // deletion ordering. + HonorPVReclaimPolicy featuregate.Feature = "HonorPVReclaimPolicy" ) func init() { @@ -35,5 +43,6 @@ func init() { // defaultKubernetesFeatureGates consists of all known feature keys specific to external-provisioner. // To add a new feature, define a key for it above and add it here. var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{ - Topology: {Default: false, PreRelease: featuregate.GA}, + Topology: {Default: false, PreRelease: featuregate.GA}, + HonorPVReclaimPolicy: {Default: false, PreRelease: featuregate.Alpha}, } diff --git a/vendor/modules.txt b/vendor/modules.txt index ce14414143..49c5aa8fec 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -650,11 +650,11 @@ sigs.k8s.io/controller-runtime/pkg/client sigs.k8s.io/controller-runtime/pkg/client/apiutil sigs.k8s.io/controller-runtime/pkg/client/fake sigs.k8s.io/controller-runtime/pkg/internal/objectutil -# sigs.k8s.io/sig-storage-lib-external-provisioner/v7 v7.0.1 +# sigs.k8s.io/sig-storage-lib-external-provisioner/v8 v8.0.0 ## explicit -sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller -sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/metrics -sigs.k8s.io/sig-storage-lib-external-provisioner/v7/util +sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller +sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/metrics +sigs.k8s.io/sig-storage-lib-external-provisioner/v8/util # sigs.k8s.io/structured-merge-diff/v4 v4.1.2 sigs.k8s.io/structured-merge-diff/v4/fieldpath sigs.k8s.io/structured-merge-diff/v4/schema diff --git a/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/LICENSE b/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/LICENSE similarity index 100% rename from vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/LICENSE rename to vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/LICENSE diff --git a/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/controller.go b/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/controller.go similarity index 93% rename from vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/controller.go rename to vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/controller.go index 877d1de2d0..83f19b3677 100644 --- a/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/controller.go +++ b/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/controller.go @@ -52,8 +52,8 @@ import ( ref "k8s.io/client-go/tools/reference" "k8s.io/client-go/util/workqueue" klog "k8s.io/klog/v2" - "sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/metrics" - "sigs.k8s.io/sig-storage-lib-external-provisioner/v7/util" + "sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/metrics" + "sigs.k8s.io/sig-storage-lib-external-provisioner/v8/util" ) // This annotation is added to a PV that has been dynamically provisioned by @@ -69,7 +69,8 @@ const annDynamicallyProvisioned = "pv.kubernetes.io/provisioned-by" // Deletion. const annMigratedTo = "pv.kubernetes.io/migrated-to" -const annStorageProvisioner = "volume.beta.kubernetes.io/storage-provisioner" +const annBetaStorageProvisioner = "volume.beta.kubernetes.io/storage-provisioner" +const annStorageProvisioner = "volume.kubernetes.io/storage-provisioner" // This annotation is added to a PVC that has been triggered by scheduler to // be dynamically provisioned. Its value is the name of the selected node. @@ -1098,15 +1099,46 @@ func (ctrl *ProvisionController) syncVolume(ctx context.Context, obj interface{} return fmt.Errorf("expected volume but got %+v", obj) } + volume, err := ctrl.handleProtectionFinalizer(ctx, volume) + if err != nil { + return err + } + if ctrl.shouldDelete(ctx, volume) { startTime := time.Now() - err := ctrl.deleteVolumeOperation(ctx, volume) + err = ctrl.deleteVolumeOperation(ctx, volume) ctrl.updateDeleteStats(volume, err, startTime) return err } return nil } +func (ctrl *ProvisionController) handleProtectionFinalizer(ctx context.Context, volume *v1.PersistentVolume) (*v1.PersistentVolume, error) { + var modifiedFinalizers []string + var modified bool + reclaimPolicy := volume.Spec.PersistentVolumeReclaimPolicy + // Check if the `addFinalizer` config option is disabled, i.e, rollback scenario, or the reclaim policy is changed + // to `Retain` or `Recycle` + if !ctrl.addFinalizer || reclaimPolicy == v1.PersistentVolumeReclaimRetain || reclaimPolicy == v1.PersistentVolumeReclaimRecycle { + modifiedFinalizers, modified = removeFinalizer(volume.ObjectMeta.Finalizers, finalizerPV) + } + // Add the finalizer only if `addFinalizer` config option is enabled, finalizer doesn't exist and PV is not already + // under deletion. + if ctrl.addFinalizer && reclaimPolicy == v1.PersistentVolumeReclaimDelete && volume.DeletionTimestamp == nil { + modifiedFinalizers, modified = addFinalizer(volume.ObjectMeta.Finalizers, finalizerPV) + } + + if modified { + volume.ObjectMeta.Finalizers = modifiedFinalizers + newVolume, err := ctrl.updatePersistentVolume(ctx, volume) + if err != nil { + return volume, fmt.Errorf("failed to modify finalizers to %+v on volume %s err: %+v", modifiedFinalizers, volume.Name, err) + } + volume = newVolume + } + return volume, nil +} + // knownProvisioner checks if provisioner name has been // configured to provision volumes for func (ctrl *ProvisionController) knownProvisioner(provisioner string) bool { @@ -1134,7 +1166,12 @@ func (ctrl *ProvisionController) shouldProvision(ctx context.Context, claim *v1. } } - if provisioner, found := claim.Annotations[annStorageProvisioner]; found { + provisioner, found := claim.Annotations[annStorageProvisioner] + if !found { + provisioner, found = claim.Annotations[annBetaStorageProvisioner] + } + + if found { if ctrl.knownProvisioner(provisioner) { claimClass := util.GetPersistentVolumeClaimClass(claim) class, err := ctrl.getStorageClass(claimClass) @@ -1168,10 +1205,15 @@ func (ctrl *ProvisionController) shouldDelete(ctx context.Context, volume *v1.Pe } } - if ctrl.addFinalizer && !ctrl.checkFinalizer(volume, finalizerPV) && volume.ObjectMeta.DeletionTimestamp != nil { - return false - } else if volume.ObjectMeta.DeletionTimestamp != nil { - return false + if ctrl.addFinalizer { + if !ctrl.checkFinalizer(volume, finalizerPV) && volume.ObjectMeta.DeletionTimestamp != nil { + // The finalizer was removed, i.e. the volume has been already deleted. + return false + } + } else { + if volume.ObjectMeta.DeletionTimestamp != nil { + return false + } } if volume.Status.Phase != v1.VolumeReleased { @@ -1237,6 +1279,22 @@ func (ctrl *ProvisionController) updateDeleteStats(volume *v1.PersistentVolume, } } +func (ctrl *ProvisionController) updatePersistentVolume(ctx context.Context, volume *v1.PersistentVolume) (*v1.PersistentVolume, error) { + if !metav1.HasAnnotation(volume.ObjectMeta, annDynamicallyProvisioned) { + return volume, nil + } + provisionedBy := volume.Annotations[annDynamicallyProvisioned] + migratedTo := volume.Annotations[annMigratedTo] + if provisionedBy != ctrl.provisionerName && migratedTo != ctrl.provisionerName { + return volume, nil + } + newVolume, err := ctrl.client.CoreV1().PersistentVolumes().Update(ctx, volume, metav1.UpdateOptions{}) + if err != nil { + return volume, err + } + return newVolume, nil +} + // rescheduleProvisioning signal back to the scheduler to retry dynamic provisioning // by removing the annSelectedNode annotation func (ctrl *ProvisionController) rescheduleProvisioning(ctx context.Context, claim *v1.PersistentVolumeClaim) error { @@ -1453,15 +1511,10 @@ func (ctrl *ProvisionController) deleteVolumeOperation(ctx context.Context, volu if !ok { return fmt.Errorf("expected volume but got %+v", volumeObj) } - finalizers := make([]string, 0) - for _, finalizer := range newVolume.ObjectMeta.Finalizers { - if finalizer != finalizerPV { - finalizers = append(finalizers, finalizer) - } - } + finalizers, modified := removeFinalizer(newVolume.ObjectMeta.Finalizers, finalizerPV) // Only update the finalizers if we actually removed something - if len(finalizers) != len(newVolume.ObjectMeta.Finalizers) { + if modified { newVolume.ObjectMeta.Finalizers = finalizers if _, err = ctrl.client.CoreV1().PersistentVolumes().Update(ctx, newVolume, metav1.UpdateOptions{}); err != nil { if !apierrs.IsNotFound(err) { @@ -1484,6 +1537,36 @@ func (ctrl *ProvisionController) deleteVolumeOperation(ctx context.Context, volu return nil } +func removeFinalizer(finalizers []string, finalizerToRemove string) ([]string, bool) { + modified := false + modifiedFinalizers := make([]string, 0) + for _, finalizer := range finalizers { + if finalizer != finalizerToRemove { + modifiedFinalizers = append(modifiedFinalizers, finalizer) + } + } + if len(modifiedFinalizers) == 0 { + modifiedFinalizers = nil + } + if len(modifiedFinalizers) != len(finalizers) { + modified = true + } + return modifiedFinalizers, modified +} + +func addFinalizer(finalizers []string, finalizerToAdd string) ([]string, bool) { + modifiedFinalizers := make([]string, 0) + for _, finalizer := range finalizers { + if finalizer == finalizerToAdd { + // finalizer already exists + return finalizers, false + } + } + modifiedFinalizers = append(modifiedFinalizers, finalizers...) + modifiedFinalizers = append(modifiedFinalizers, finalizerToAdd) + return modifiedFinalizers, true +} + func logOperation(operation, format string, a ...interface{}) string { return fmt.Sprintf(fmt.Sprintf("%s: %s", operation, format), a...) } diff --git a/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/doc.go b/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/doc.go similarity index 95% rename from vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/doc.go rename to vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/doc.go index d2ff8cbbbd..51455be6db 100644 --- a/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/doc.go +++ b/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/doc.go @@ -14,4 +14,4 @@ See the License for the specific language governing permissions and limitations under the License. */ -package controller // import "sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller" +package controller // import "sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller" diff --git a/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/metrics/doc.go b/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/metrics/doc.go similarity index 94% rename from vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/metrics/doc.go rename to vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/metrics/doc.go index 9efd871939..9e559c9fb5 100644 --- a/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/metrics/doc.go +++ b/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/metrics/doc.go @@ -14,4 +14,4 @@ See the License for the specific language governing permissions and limitations under the License. */ -package metrics // import "sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/metrics" +package metrics // import "sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/metrics" diff --git a/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/metrics/metrics.go b/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/metrics/metrics.go similarity index 100% rename from vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/metrics/metrics.go rename to vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/metrics/metrics.go diff --git a/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/volume.go b/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/volume.go similarity index 100% rename from vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/volume.go rename to vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/volume.go diff --git a/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/volume_store.go b/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/volume_store.go similarity index 100% rename from vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller/volume_store.go rename to vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller/volume_store.go diff --git a/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/util/doc.go b/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/util/doc.go similarity index 97% rename from vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/util/doc.go rename to vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/util/doc.go index c8774f26a4..e21e5077de 100644 --- a/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/util/doc.go +++ b/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/util/doc.go @@ -14,4 +14,4 @@ See the License for the specific language governing permissions and limitations under the License. */ -package util // import "sigs.k8s.io/sig-storage-lib-external-provisioner/v7/util" +package util // import "sigs.k8s.io/sig-storage-lib-external-provisioner/v8/util" diff --git a/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/util/util.go b/vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/util/util.go similarity index 100% rename from vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v7/util/util.go rename to vendor/sigs.k8s.io/sig-storage-lib-external-provisioner/v8/util/util.go