...
1
16
17 package util
18
19 import (
20 "sort"
21
22 storagev1 "k8s.io/api/storage/v1"
23 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24 "k8s.io/apimachinery/pkg/labels"
25 storagev1listers "k8s.io/client-go/listers/storage/v1"
26 "k8s.io/klog/v2"
27 )
28
29 const (
30
31
32 IsDefaultStorageClassAnnotation = "storageclass.kubernetes.io/is-default-class"
33
34
35
36 BetaIsDefaultStorageClassAnnotation = "storageclass.beta.kubernetes.io/is-default-class"
37 )
38
39
40 func GetDefaultClass(lister storagev1listers.StorageClassLister) (*storagev1.StorageClass, error) {
41 list, err := lister.List(labels.Everything())
42 if err != nil {
43 return nil, err
44 }
45
46 defaultClasses := []*storagev1.StorageClass{}
47 for _, class := range list {
48 if IsDefaultAnnotation(class.ObjectMeta) {
49 defaultClasses = append(defaultClasses, class)
50 klog.V(4).Infof("GetDefaultClass added: %s", class.Name)
51 }
52 }
53
54 if len(defaultClasses) == 0 {
55 return nil, nil
56 }
57
58
59
60 sort.Slice(defaultClasses, func(i, j int) bool {
61 if defaultClasses[i].CreationTimestamp.UnixNano() == defaultClasses[j].CreationTimestamp.UnixNano() {
62 return defaultClasses[i].Name < defaultClasses[j].Name
63 }
64 return defaultClasses[i].CreationTimestamp.UnixNano() > defaultClasses[j].CreationTimestamp.UnixNano()
65 })
66 if len(defaultClasses) > 1 {
67 klog.V(4).Infof("%d default StorageClasses were found, choosing: %s", len(defaultClasses), defaultClasses[0].Name)
68 }
69
70 return defaultClasses[0], nil
71 }
72
73
74
75
76 func IsDefaultAnnotation(obj metav1.ObjectMeta) bool {
77 if obj.Annotations[IsDefaultStorageClassAnnotation] == "true" {
78 return true
79 }
80 if obj.Annotations[BetaIsDefaultStorageClassAnnotation] == "true" {
81 return true
82 }
83
84 return false
85 }
86
View as plain text