...
1
16
17 package util
18
19 import (
20 "sort"
21
22 storagev1alpha1 "k8s.io/api/storage/v1alpha1"
23 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24 "k8s.io/apimachinery/pkg/labels"
25 storagev1alpha1listers "k8s.io/client-go/listers/storage/v1alpha1"
26 "k8s.io/klog/v2"
27 )
28
29 const (
30
31 AlphaIsDefaultVolumeAttributesClassAnnotation = "volumeattributesclass.alpha.kubernetes.io/is-default-class"
32 )
33
34
35 func GetDefaultVolumeAttributesClass(lister storagev1alpha1listers.VolumeAttributesClassLister, driverName string) (*storagev1alpha1.VolumeAttributesClass, error) {
36 list, err := lister.List(labels.Everything())
37 if err != nil {
38 return nil, err
39 }
40
41 defaultClasses := []*storagev1alpha1.VolumeAttributesClass{}
42 for _, class := range list {
43 if IsDefaultVolumeAttributesClassAnnotation(class.ObjectMeta) && class.DriverName == driverName {
44 defaultClasses = append(defaultClasses, class)
45 klog.V(4).Infof("GetDefaultVolumeAttributesClass added: %s", class.Name)
46 }
47 }
48
49 if len(defaultClasses) == 0 {
50 return nil, nil
51 }
52
53
54
55 sort.Slice(defaultClasses, func(i, j int) bool {
56 if defaultClasses[i].CreationTimestamp.UnixNano() == defaultClasses[j].CreationTimestamp.UnixNano() {
57 return defaultClasses[i].Name < defaultClasses[j].Name
58 }
59 return defaultClasses[i].CreationTimestamp.UnixNano() > defaultClasses[j].CreationTimestamp.UnixNano()
60 })
61 if len(defaultClasses) > 1 {
62 klog.V(4).Infof("%d default VolumeAttributesClass were found, choosing: %s", len(defaultClasses), defaultClasses[0].Name)
63 }
64
65 return defaultClasses[0], nil
66 }
67
68
69
70 func IsDefaultVolumeAttributesClassAnnotation(obj metav1.ObjectMeta) bool {
71 return obj.Annotations[AlphaIsDefaultVolumeAttributesClassAnnotation] == "true"
72 }
73
View as plain text