mirror of
https://github.com/optim-enterprises-bv/kubernetes.git
synced 2025-12-15 20:37:39 +00:00
Merge pull request #110559 from danishprakash/danish-default-storageclass
pkg/admission/storageclass: pick one storageclass conditionally if >1 present
This commit is contained in:
@@ -773,23 +773,6 @@ func TestRetroactiveStorageClassAssignment(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
storageClasses: []*storagev1.StorageClass{
|
||||
makeDefaultStorageClass(classGold, &modeImmediate),
|
||||
makeDefaultStorageClass(classSilver, &modeImmediate)},
|
||||
tests: []controllerTest{
|
||||
{
|
||||
name: "15-2 - pvc storage class is not assigned retroactively if there are multiple default storage classes",
|
||||
initialVolumes: novolumes,
|
||||
expectedVolumes: novolumes,
|
||||
initialClaims: newClaimArray("claim15-2", "uid15-2", "1Gi", "", v1.ClaimPending, nil),
|
||||
expectedClaims: newClaimArray("claim15-2", "uid15-2", "1Gi", "", v1.ClaimPending, nil),
|
||||
expectedEvents: noevents,
|
||||
errors: noerrors,
|
||||
test: testSyncClaim,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
storageClasses: []*storagev1.StorageClass{
|
||||
makeDefaultStorageClass(classGold, &modeImmediate),
|
||||
@@ -844,6 +827,23 @@ func TestRetroactiveStorageClassAssignment(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
storageClasses: []*storagev1.StorageClass{
|
||||
makeDefaultStorageClass(classGold, &modeImmediate),
|
||||
makeDefaultStorageClass(classSilver, &modeImmediate)},
|
||||
tests: []controllerTest{
|
||||
{
|
||||
name: "15-2 - pvc storage class is assigned retroactively if there are multiple default storage classes",
|
||||
initialVolumes: novolumes,
|
||||
expectedVolumes: novolumes,
|
||||
initialClaims: newClaimArray("claim15-2", "uid15-2", "1Gi", "", v1.ClaimPending, nil),
|
||||
expectedClaims: newClaimArray("claim15-2", "uid15-2", "1Gi", "", v1.ClaimPending, &classGold),
|
||||
expectedEvents: noevents,
|
||||
errors: noerrors,
|
||||
test: testSyncClaim,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
storageClasses: []*storagev1.StorageClass{
|
||||
makeDefaultStorageClass(classGold, &modeImmediate),
|
||||
|
||||
@@ -17,9 +17,9 @@ limitations under the License.
|
||||
package util
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
|
||||
storagev1 "k8s.io/api/storage/v1"
|
||||
"k8s.io/apimachinery/pkg/api/errors"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
storagev1listers "k8s.io/client-go/listers/storage/v1"
|
||||
@@ -54,10 +54,19 @@ func GetDefaultClass(lister storagev1listers.StorageClassLister) (*storagev1.Sto
|
||||
if len(defaultClasses) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// Primary sort by creation timestamp, newest first
|
||||
// Secondary sort by class name, ascending order
|
||||
sort.Slice(defaultClasses, func(i, j int) bool {
|
||||
if defaultClasses[i].CreationTimestamp.UnixNano() == defaultClasses[j].CreationTimestamp.UnixNano() {
|
||||
return defaultClasses[i].Name < defaultClasses[j].Name
|
||||
}
|
||||
return defaultClasses[i].CreationTimestamp.UnixNano() > defaultClasses[j].CreationTimestamp.UnixNano()
|
||||
})
|
||||
if len(defaultClasses) > 1 {
|
||||
klog.V(4).Infof("GetDefaultClass %d defaults found", len(defaultClasses))
|
||||
return nil, errors.NewInternalError(fmt.Errorf("%d default StorageClasses were found", len(defaultClasses)))
|
||||
klog.V(4).Infof("%d default StorageClasses were found, choosing the newest: %s", len(defaultClasses), defaultClasses[0].Name)
|
||||
}
|
||||
|
||||
return defaultClasses[0], nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user