diff --git a/pkg/controller/volume/persistentvolume/pv_controller.go b/pkg/controller/volume/persistentvolume/pv_controller.go index 0e747afc5da..c3514af2de7 100644 --- a/pkg/controller/volume/persistentvolume/pv_controller.go +++ b/pkg/controller/volume/persistentvolume/pv_controller.go @@ -937,7 +937,7 @@ func (ctrl *PersistentVolumeController) updateVolumePhaseWithEvent(volume *v1.Pe // Ignores claims that already have a storage class. // TODO: if resync is ever changed to a larger period, we might need to change how we set the default class on existing unbound claims func (ctrl *PersistentVolumeController) assignDefaultStorageClass(claim *v1.PersistentVolumeClaim) (bool, error) { - if claim.Spec.StorageClassName != nil { + if storagehelpers.GetPersistentVolumeClaimClass(claim) != "" { return false, nil } diff --git a/pkg/controller/volume/persistentvolume/pv_controller_test.go b/pkg/controller/volume/persistentvolume/pv_controller_test.go index a40921a51ba..5d3716ed40b 100644 --- a/pkg/controller/volume/persistentvolume/pv_controller_test.go +++ b/pkg/controller/volume/persistentvolume/pv_controller_test.go @@ -862,6 +862,24 @@ func TestRetroactiveStorageClassAssignment(t *testing.T) { }, }, }, + { + storageClasses: []*storagev1.StorageClass{ + makeDefaultStorageClass(classGold, &modeImmediate), + makeStorageClass(classCopper, &modeImmediate), + }, + tests: []controllerTest{ + { + name: "15-7 - pvc storage class is not changed if claim is not bound but already set annotation \"volume.beta.kubernetes.io/storage-class\"", + initialVolumes: novolumes, + expectedVolumes: novolumes, + initialClaims: newClaimArray("claim15-7", "uid15-7", "1Gi", "", v1.ClaimPending, nil, v1.BetaStorageClassAnnotation), + expectedClaims: newClaimArray("claim15-7", "uid15-7", "1Gi", "", v1.ClaimPending, nil, v1.BetaStorageClassAnnotation), + expectedEvents: noevents, + errors: noerrors, + test: testSyncClaim, + }, + }, + }, } for _, test := range tests { runSyncTests(t, test.tests, test.storageClasses, nil)