Skip to content

Commit 1f13709

Browse files
author
Max Jonas Werner
committed
chore: get rid of k8s.io/kubernetes dep
This dependency is problematic because of the many replaces it brings with it. This makes it hard to import external-snapshotter in 3rd party projects without having a lot of `replace` directives in those projects as well. The only usage of that import was to get two very simple utility functions so I copied them over to this repo.
1 parent 9623453 commit 1f13709

File tree

10 files changed

+53
-798
lines changed

10 files changed

+53
-798
lines changed

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ require (
2020
k8s.io/code-generator v0.18.0
2121
k8s.io/component-base v0.18.0
2222
k8s.io/klog v1.0.0
23-
k8s.io/kubernetes v1.18.0
2423
)
2524

2625
replace k8s.io/api => k8s.io/api v0.18.0

go.sum

Lines changed: 0 additions & 464 deletions
Large diffs are not rendered by default.

pkg/common-controller/framework_test.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ import (
5353
"k8s.io/client-go/tools/cache"
5454
"k8s.io/client-go/tools/record"
5555
"k8s.io/klog"
56-
"k8s.io/kubernetes/pkg/util/slice"
5756
)
5857

5958
// This is a unit test framework for snapshot controller.
@@ -1321,7 +1320,7 @@ func evaluateFinalizerTests(ctrl *csiSnapshotCommonController, reactor *snapshot
13211320
if funcName == "testAddPVCFinalizer" {
13221321
for _, pvc := range reactor.claims {
13231322
if test.initialClaims[0].Name == pvc.Name {
1324-
if !slice.ContainsString(test.initialClaims[0].ObjectMeta.Finalizers, utils.PVCFinalizer, nil) && slice.ContainsString(pvc.ObjectMeta.Finalizers, utils.PVCFinalizer, nil) {
1323+
if !utils.ContainsString(test.initialClaims[0].ObjectMeta.Finalizers, utils.PVCFinalizer, nil) && utils.ContainsString(pvc.ObjectMeta.Finalizers, utils.PVCFinalizer, nil) {
13251324
klog.V(4).Infof("test %q succeeded. PVCFinalizer is added to PVC %s", test.name, pvc.Name)
13261325
bHasPVCFinalizer = true
13271326
}
@@ -1336,7 +1335,7 @@ func evaluateFinalizerTests(ctrl *csiSnapshotCommonController, reactor *snapshot
13361335
if funcName == "testRemovePVCFinalizer" {
13371336
for _, pvc := range reactor.claims {
13381337
if test.initialClaims[0].Name == pvc.Name {
1339-
if slice.ContainsString(test.initialClaims[0].ObjectMeta.Finalizers, utils.PVCFinalizer, nil) && !slice.ContainsString(pvc.ObjectMeta.Finalizers, utils.PVCFinalizer, nil) {
1338+
if utils.ContainsString(test.initialClaims[0].ObjectMeta.Finalizers, utils.PVCFinalizer, nil) && !utils.ContainsString(pvc.ObjectMeta.Finalizers, utils.PVCFinalizer, nil) {
13401339
klog.V(4).Infof("test %q succeeded. PVCFinalizer is removed from PVC %s", test.name, pvc.Name)
13411340
bHasPVCFinalizer = false
13421341
}
@@ -1351,8 +1350,8 @@ func evaluateFinalizerTests(ctrl *csiSnapshotCommonController, reactor *snapshot
13511350
if funcName == "testAddSnapshotFinalizer" {
13521351
for _, snapshot := range reactor.snapshots {
13531352
if test.initialSnapshots[0].Name == snapshot.Name {
1354-
if !slice.ContainsString(test.initialSnapshots[0].ObjectMeta.Finalizers, utils.VolumeSnapshotBoundFinalizer, nil) && slice.ContainsString(snapshot.ObjectMeta.Finalizers, utils.VolumeSnapshotBoundFinalizer, nil) &&
1355-
!slice.ContainsString(test.initialSnapshots[0].ObjectMeta.Finalizers, utils.VolumeSnapshotAsSourceFinalizer, nil) && slice.ContainsString(snapshot.ObjectMeta.Finalizers, utils.VolumeSnapshotAsSourceFinalizer, nil) {
1353+
if !utils.ContainsString(test.initialSnapshots[0].ObjectMeta.Finalizers, utils.VolumeSnapshotBoundFinalizer, nil) && utils.ContainsString(snapshot.ObjectMeta.Finalizers, utils.VolumeSnapshotBoundFinalizer, nil) &&
1354+
!utils.ContainsString(test.initialSnapshots[0].ObjectMeta.Finalizers, utils.VolumeSnapshotAsSourceFinalizer, nil) && utils.ContainsString(snapshot.ObjectMeta.Finalizers, utils.VolumeSnapshotAsSourceFinalizer, nil) {
13561355
klog.V(4).Infof("test %q succeeded. Finalizers are added to snapshot %s", test.name, snapshot.Name)
13571356
bHasSnapshotFinalizer = true
13581357
}
@@ -1367,8 +1366,8 @@ func evaluateFinalizerTests(ctrl *csiSnapshotCommonController, reactor *snapshot
13671366
if funcName == "testRemoveSnapshotFinalizer" {
13681367
for _, snapshot := range reactor.snapshots {
13691368
if test.initialSnapshots[0].Name == snapshot.Name {
1370-
if slice.ContainsString(test.initialSnapshots[0].ObjectMeta.Finalizers, utils.VolumeSnapshotBoundFinalizer, nil) && !slice.ContainsString(snapshot.ObjectMeta.Finalizers, utils.VolumeSnapshotBoundFinalizer, nil) &&
1371-
slice.ContainsString(test.initialSnapshots[0].ObjectMeta.Finalizers, utils.VolumeSnapshotAsSourceFinalizer, nil) && !slice.ContainsString(snapshot.ObjectMeta.Finalizers, utils.VolumeSnapshotAsSourceFinalizer, nil) {
1369+
if utils.ContainsString(test.initialSnapshots[0].ObjectMeta.Finalizers, utils.VolumeSnapshotBoundFinalizer, nil) && !utils.ContainsString(snapshot.ObjectMeta.Finalizers, utils.VolumeSnapshotBoundFinalizer, nil) &&
1370+
utils.ContainsString(test.initialSnapshots[0].ObjectMeta.Finalizers, utils.VolumeSnapshotAsSourceFinalizer, nil) && !utils.ContainsString(snapshot.ObjectMeta.Finalizers, utils.VolumeSnapshotAsSourceFinalizer, nil) {
13721371
klog.V(4).Infof("test %q succeeded. SnapshotFinalizer is removed from Snapshot %s", test.name, snapshot.Name)
13731372
bHasSnapshotFinalizer = false
13741373
}

pkg/common-controller/snapshot_controller.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import (
3131
"k8s.io/client-go/kubernetes/scheme"
3232
ref "k8s.io/client-go/tools/reference"
3333
"k8s.io/klog"
34-
"k8s.io/kubernetes/pkg/util/slice"
3534

3635
crdv1 "github.com/kubernetes-csi/external-snapshotter/v2/pkg/apis/volumesnapshot/v1beta1"
3736
"github.com/kubernetes-csi/external-snapshotter/v2/pkg/utils"
@@ -223,7 +222,7 @@ func (ctrl *csiSnapshotCommonController) isPVCwithFinalizerInUseByCurrentSnapsho
223222
}
224223

225224
// Check if there is a Finalizer on PVC. If not, return false
226-
if !slice.ContainsString(pvc.ObjectMeta.Finalizers, utils.PVCFinalizer, nil) {
225+
if !utils.ContainsString(pvc.ObjectMeta.Finalizers, utils.PVCFinalizer, nil) {
227226
return false
228227
}
229228

@@ -821,7 +820,7 @@ func (ctrl *csiSnapshotCommonController) ensurePVCFinalizer(snapshot *crdv1.Volu
821820
}
822821

823822
// If PVC is not being deleted and PVCFinalizer is not added yet, the PVCFinalizer should be added.
824-
if pvc.ObjectMeta.DeletionTimestamp == nil && !slice.ContainsString(pvc.ObjectMeta.Finalizers, utils.PVCFinalizer, nil) {
823+
if pvc.ObjectMeta.DeletionTimestamp == nil && !utils.ContainsString(pvc.ObjectMeta.Finalizers, utils.PVCFinalizer, nil) {
825824
// Add the finalizer
826825
pvcClone := pvc.DeepCopy()
827826
pvcClone.ObjectMeta.Finalizers = append(pvcClone.ObjectMeta.Finalizers, utils.PVCFinalizer)
@@ -842,7 +841,7 @@ func (ctrl *csiSnapshotCommonController) removePVCFinalizer(pvc *v1.PersistentVo
842841
// TODO(xyang): We get PVC from informer but it may be outdated
843842
// Should get it from API server directly before removing finalizer
844843
pvcClone := pvc.DeepCopy()
845-
pvcClone.ObjectMeta.Finalizers = slice.RemoveString(pvcClone.ObjectMeta.Finalizers, utils.PVCFinalizer, nil)
844+
pvcClone.ObjectMeta.Finalizers = utils.RemoveString(pvcClone.ObjectMeta.Finalizers, utils.PVCFinalizer, nil)
846845

847846
_, err := ctrl.client.CoreV1().PersistentVolumeClaims(pvcClone.Namespace).Update(context.TODO(), pvcClone, metav1.UpdateOptions{})
848847
if err != nil {
@@ -898,7 +897,7 @@ func (ctrl *csiSnapshotCommonController) checkandRemovePVCFinalizer(snapshot *cr
898897
klog.V(5).Infof("checkandRemovePVCFinalizer for snapshot [%s]: snapshot status [%#v]", snapshot.Name, snapshot.Status)
899898

900899
// Check if there is a Finalizer on PVC to be removed
901-
if slice.ContainsString(pvc.ObjectMeta.Finalizers, utils.PVCFinalizer, nil) {
900+
if utils.ContainsString(pvc.ObjectMeta.Finalizers, utils.PVCFinalizer, nil) {
902901
// There is a Finalizer on PVC. Check if PVC is used
903902
// and remove finalizer if it's not used.
904903
inUse := ctrl.isPVCBeingUsed(pvc, snapshot)
@@ -1295,10 +1294,10 @@ func (ctrl *csiSnapshotCommonController) removeSnapshotFinalizer(snapshot *crdv1
12951294

12961295
snapshotClone := snapshot.DeepCopy()
12971296
if removeSourceFinalizer {
1298-
snapshotClone.ObjectMeta.Finalizers = slice.RemoveString(snapshotClone.ObjectMeta.Finalizers, utils.VolumeSnapshotAsSourceFinalizer, nil)
1297+
snapshotClone.ObjectMeta.Finalizers = utils.RemoveString(snapshotClone.ObjectMeta.Finalizers, utils.VolumeSnapshotAsSourceFinalizer, nil)
12991298
}
13001299
if removeBoundFinalizer {
1301-
snapshotClone.ObjectMeta.Finalizers = slice.RemoveString(snapshotClone.ObjectMeta.Finalizers, utils.VolumeSnapshotBoundFinalizer, nil)
1300+
snapshotClone.ObjectMeta.Finalizers = utils.RemoveString(snapshotClone.ObjectMeta.Finalizers, utils.VolumeSnapshotBoundFinalizer, nil)
13021301
}
13031302
_, err := ctrl.clientset.SnapshotV1beta1().VolumeSnapshots(snapshotClone.Namespace).Update(context.TODO(), snapshotClone, metav1.UpdateOptions{})
13041303
if err != nil {

pkg/sidecar-controller/snapshot_controller.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import (
3030
"k8s.io/apimachinery/pkg/api/errors"
3131
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3232
"k8s.io/klog"
33-
"k8s.io/kubernetes/pkg/util/slice"
3433
)
3534

3635
// Design:
@@ -506,12 +505,12 @@ func (ctrl *csiSnapshotSideCarController) GetCredentialsFromAnnotation(content *
506505
// removeContentFinalizer removes the VolumeSnapshotContentFinalizer from a
507506
// content if there exists one.
508507
func (ctrl csiSnapshotSideCarController) removeContentFinalizer(content *crdv1.VolumeSnapshotContent) error {
509-
if !slice.ContainsString(content.ObjectMeta.Finalizers, utils.VolumeSnapshotContentFinalizer, nil) {
508+
if !utils.ContainsString(content.ObjectMeta.Finalizers, utils.VolumeSnapshotContentFinalizer, nil) {
510509
// the finalizer does not exit, return directly
511510
return nil
512511
}
513512
contentClone := content.DeepCopy()
514-
contentClone.ObjectMeta.Finalizers = slice.RemoveString(contentClone.ObjectMeta.Finalizers, utils.VolumeSnapshotContentFinalizer, nil)
513+
contentClone.ObjectMeta.Finalizers = utils.RemoveString(contentClone.ObjectMeta.Finalizers, utils.VolumeSnapshotContentFinalizer, nil)
515514

516515
_, err := ctrl.clientset.SnapshotV1beta1().VolumeSnapshotContents().Update(context.TODO(), contentClone, metav1.UpdateOptions{})
517516
if err != nil {

pkg/utils/util.go

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import (
3333
"k8s.io/client-go/kubernetes"
3434
"k8s.io/client-go/tools/cache"
3535
"k8s.io/klog"
36-
"k8s.io/kubernetes/pkg/util/slice"
3736
)
3837

3938
var (
@@ -109,6 +108,41 @@ var SnapshotterListSecretParams = secretParamsMap{
109108
secretNamespaceKey: PrefixedSnapshotterListSecretNamespaceKey,
110109
}
111110

111+
// ContainsString checks if a given slice of strings contains the provided string.
112+
// If a modifier func is provided, it is called with the slice item before the comparation.
113+
func ContainsString(slice []string, s string, modifier func(s string) string) bool {
114+
for _, item := range slice {
115+
if item == s {
116+
return true
117+
}
118+
if modifier != nil && modifier(item) == s {
119+
return true
120+
}
121+
}
122+
return false
123+
}
124+
125+
// RemoveString returns a newly created []string that contains all items from slice that
126+
// are not equal to s and modifier(s) in case modifier func is provided.
127+
func RemoveString(slice []string, s string, modifier func(s string) string) []string {
128+
newSlice := make([]string, 0)
129+
for _, item := range slice {
130+
if item == s {
131+
continue
132+
}
133+
if modifier != nil && modifier(item) == s {
134+
continue
135+
}
136+
newSlice = append(newSlice, item)
137+
}
138+
if len(newSlice) == 0 {
139+
// Sanitize for unit tests so we don't need to distinguish empty array
140+
// and nil.
141+
newSlice = nil
142+
}
143+
return newSlice
144+
}
145+
112146
func SnapshotKey(vs *crdv1.VolumeSnapshot) string {
113147
return fmt.Sprintf("%s/%s", vs.Namespace, vs.Name)
114148
}
@@ -337,23 +371,23 @@ func NoResyncPeriodFunc() time.Duration {
337371

338372
// NeedToAddContentFinalizer checks if a Finalizer needs to be added for the volume snapshot content.
339373
func NeedToAddContentFinalizer(content *crdv1.VolumeSnapshotContent) bool {
340-
return content.ObjectMeta.DeletionTimestamp == nil && !slice.ContainsString(content.ObjectMeta.Finalizers, VolumeSnapshotContentFinalizer, nil)
374+
return content.ObjectMeta.DeletionTimestamp == nil && !ContainsString(content.ObjectMeta.Finalizers, VolumeSnapshotContentFinalizer, nil)
341375
}
342376

343377
// IsSnapshotDeletionCandidate checks if a volume snapshot deletionTimestamp
344378
// is set and any finalizer is on the snapshot.
345379
func IsSnapshotDeletionCandidate(snapshot *crdv1.VolumeSnapshot) bool {
346-
return snapshot.ObjectMeta.DeletionTimestamp != nil && (slice.ContainsString(snapshot.ObjectMeta.Finalizers, VolumeSnapshotAsSourceFinalizer, nil) || slice.ContainsString(snapshot.ObjectMeta.Finalizers, VolumeSnapshotBoundFinalizer, nil))
380+
return snapshot.ObjectMeta.DeletionTimestamp != nil && (ContainsString(snapshot.ObjectMeta.Finalizers, VolumeSnapshotAsSourceFinalizer, nil) || ContainsString(snapshot.ObjectMeta.Finalizers, VolumeSnapshotBoundFinalizer, nil))
347381
}
348382

349383
// NeedToAddSnapshotAsSourceFinalizer checks if a Finalizer needs to be added for the volume snapshot as a source for PVC.
350384
func NeedToAddSnapshotAsSourceFinalizer(snapshot *crdv1.VolumeSnapshot) bool {
351-
return snapshot.ObjectMeta.DeletionTimestamp == nil && !slice.ContainsString(snapshot.ObjectMeta.Finalizers, VolumeSnapshotAsSourceFinalizer, nil)
385+
return snapshot.ObjectMeta.DeletionTimestamp == nil && !ContainsString(snapshot.ObjectMeta.Finalizers, VolumeSnapshotAsSourceFinalizer, nil)
352386
}
353387

354388
// NeedToAddSnapshotBoundFinalizer checks if a Finalizer needs to be added for the bound volume snapshot.
355389
func NeedToAddSnapshotBoundFinalizer(snapshot *crdv1.VolumeSnapshot) bool {
356-
return snapshot.ObjectMeta.DeletionTimestamp == nil && !slice.ContainsString(snapshot.ObjectMeta.Finalizers, VolumeSnapshotBoundFinalizer, nil) && IsBoundVolumeSnapshotContentNameSet(snapshot)
390+
return snapshot.ObjectMeta.DeletionTimestamp == nil && !ContainsString(snapshot.ObjectMeta.Finalizers, VolumeSnapshotBoundFinalizer, nil) && IsBoundVolumeSnapshotContentNameSet(snapshot)
357391
}
358392

359393
func deprecationWarning(deprecatedParam, newParam, removalVersion string) string {

0 commit comments

Comments
 (0)