...
1
16
17 package aggregator
18
19 import (
20 "sort"
21
22 apiregistrationv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
23 )
24
25
26 type byPriority struct {
27 apiServices []*apiregistrationv1.APIService
28 groupPriorities map[string]int32
29 }
30
31 func (a byPriority) Len() int { return len(a.apiServices) }
32 func (a byPriority) Swap(i, j int) {
33 a.apiServices[i], a.apiServices[j] = a.apiServices[j], a.apiServices[i]
34 }
35 func (a byPriority) Less(i, j int) bool {
36
37 if a.apiServices[i].Spec.Service == nil && a.apiServices[j].Spec.Service != nil {
38 return true
39 }
40 if a.apiServices[i].Spec.Service != nil && a.apiServices[j].Spec.Service == nil {
41 return false
42 }
43
44 if a.apiServices[i].Spec.Service == nil {
45
46 return a.apiServices[i].Name < a.apiServices[j].Name
47 }
48 var iPriority, jPriority int32
49 if a.apiServices[i].Spec.Group == a.apiServices[j].Spec.Group {
50 iPriority = a.apiServices[i].Spec.VersionPriority
51 jPriority = a.apiServices[i].Spec.VersionPriority
52 } else {
53 iPriority = a.groupPriorities[a.apiServices[i].Spec.Group]
54 jPriority = a.groupPriorities[a.apiServices[j].Spec.Group]
55 }
56 if iPriority != jPriority {
57
58 return iPriority > jPriority
59 }
60
61 return a.apiServices[i].Name < a.apiServices[j].Name
62 }
63
64 func sortByPriority(apiServices []*apiregistrationv1.APIService) {
65 b := byPriority{
66 apiServices: apiServices,
67 groupPriorities: map[string]int32{},
68 }
69 for _, apiService := range apiServices {
70 if apiService.Spec.Service == nil {
71 continue
72 }
73 if pr, found := b.groupPriorities[apiService.Spec.Group]; !found || apiService.Spec.GroupPriorityMinimum > pr {
74 b.groupPriorities[apiService.Spec.Group] = apiService.Spec.GroupPriorityMinimum
75 }
76 }
77 sort.Sort(b)
78 }
79
View as plain text