diff --git a/pkg/validation-webhook/snapshot.go b/pkg/validation-webhook/snapshot.go index a067d7d5..cd4eaa18 100644 --- a/pkg/validation-webhook/snapshot.go +++ b/pkg/validation-webhook/snapshot.go @@ -265,8 +265,8 @@ func decideSnapshotClassV1(snapClass, oldSnapClass *volumesnapshotv1.VolumeSnaps return reviewResponse } - // If Old snapshot class has this, then we can assume that it was validated - if oldSnapClass.Annotations[utils.IsDefaultSnapshotClassAnnotation] == "true" { + // If Old snapshot class has this, then we can assume that it was validated if driver is the same. + if oldSnapClass.Annotations[utils.IsDefaultSnapshotClassAnnotation] == "true" && oldSnapClass.Driver == snapClass.Driver { return reviewResponse } diff --git a/pkg/validation-webhook/snapshot_test.go b/pkg/validation-webhook/snapshot_test.go index e724fee4..796a067f 100644 --- a/pkg/validation-webhook/snapshot_test.go +++ b/pkg/validation-webhook/snapshot_test.go @@ -904,6 +904,52 @@ func TestAdmitVolumeSnapshotClassV1(t *testing.T) { }, }}, }, + { + name: "update snapshot class to new driver with existing default classes", + volumeSnapshotClass: &volumesnapshotv1.VolumeSnapshotClass{ + TypeMeta: metav1.TypeMeta{}, + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + utils.IsDefaultSnapshotClassAnnotation: "true", + }, + }, + Driver: "driver.test.csi.io", + }, + oldVolumeSnapshotClass: &volumesnapshotv1.VolumeSnapshotClass{ + TypeMeta: metav1.TypeMeta{}, + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + utils.IsDefaultSnapshotClassAnnotation: "true", + }, + }, + Driver: "test.csi.io", + }, + shouldAdmit: false, + msg: "default snapshot class: driver-test-default already exits for driver: driver.test.csi.io", + operation: v1.Update, + lister: &fakeSnapshotLister{values: []*volumesnapshotv1.VolumeSnapshotClass{ + { + TypeMeta: metav1.TypeMeta{}, + ObjectMeta: metav1.ObjectMeta{ + Name: "driver-is-default", + Annotations: map[string]string{ + utils.IsDefaultSnapshotClassAnnotation: "true", + }, + }, + Driver: "test.csi.io", + }, + { + TypeMeta: metav1.TypeMeta{}, + ObjectMeta: metav1.ObjectMeta{ + Name: "driver-test-default", + Annotations: map[string]string{ + utils.IsDefaultSnapshotClassAnnotation: "true", + }, + }, + Driver: "driver.test.csi.io", + }, + }}, + }, } for _, tc := range testCases {