...
1
16
17 package v1
18
19 import (
20 "fmt"
21
22 apps "k8s.io/api/apps/v1"
23 "k8s.io/api/core/v1"
24 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
25 "k8s.io/apimachinery/pkg/labels"
26 )
27
28
29
30 type StatefulSetListerExpansion interface {
31 GetPodStatefulSets(pod *v1.Pod) ([]*apps.StatefulSet, error)
32 }
33
34
35
36 type StatefulSetNamespaceListerExpansion interface{}
37
38
39
40
41 func (s *statefulSetLister) GetPodStatefulSets(pod *v1.Pod) ([]*apps.StatefulSet, error) {
42 var selector labels.Selector
43 var ps *apps.StatefulSet
44
45 if len(pod.Labels) == 0 {
46 return nil, fmt.Errorf("no StatefulSets found for pod %v because it has no labels", pod.Name)
47 }
48
49 list, err := s.StatefulSets(pod.Namespace).List(labels.Everything())
50 if err != nil {
51 return nil, err
52 }
53
54 var psList []*apps.StatefulSet
55 for i := range list {
56 ps = list[i]
57 if ps.Namespace != pod.Namespace {
58 continue
59 }
60 selector, err = metav1.LabelSelectorAsSelector(ps.Spec.Selector)
61 if err != nil {
62
63 continue
64 }
65
66
67 if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) {
68 continue
69 }
70 psList = append(psList, ps)
71 }
72
73 if len(psList) == 0 {
74 return nil, fmt.Errorf("could not find StatefulSet for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
75 }
76
77 return psList, nil
78 }
79
View as plain text