...
1
16
17 package labels
18
19 import (
20 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
21 )
22
23
24
25 func CloneAndAddLabel(labels map[string]string, labelKey, labelValue string) map[string]string {
26 if labelKey == "" {
27
28 return labels
29 }
30
31 newLabels := map[string]string{}
32 for key, value := range labels {
33 newLabels[key] = value
34 }
35 newLabels[labelKey] = labelValue
36 return newLabels
37 }
38
39
40
41 func CloneAndRemoveLabel(labels map[string]string, labelKey string) map[string]string {
42 if labelKey == "" {
43
44 return labels
45 }
46
47 newLabels := map[string]string{}
48 for key, value := range labels {
49 newLabels[key] = value
50 }
51 delete(newLabels, labelKey)
52 return newLabels
53 }
54
55
56 func AddLabel(labels map[string]string, labelKey, labelValue string) map[string]string {
57 if labelKey == "" {
58
59 return labels
60 }
61 if labels == nil {
62 labels = make(map[string]string)
63 }
64 labels[labelKey] = labelValue
65 return labels
66 }
67
68
69
70 func CloneSelectorAndAddLabel(selector *metav1.LabelSelector, labelKey, labelValue string) *metav1.LabelSelector {
71 if labelKey == "" {
72
73 return selector
74 }
75
76
77 newSelector := new(metav1.LabelSelector)
78
79
80 newSelector.MatchLabels = make(map[string]string)
81 if selector.MatchLabels != nil {
82 for key, val := range selector.MatchLabels {
83 newSelector.MatchLabels[key] = val
84 }
85 }
86 newSelector.MatchLabels[labelKey] = labelValue
87
88 if selector.MatchExpressions != nil {
89 newMExps := make([]metav1.LabelSelectorRequirement, len(selector.MatchExpressions))
90 for i, me := range selector.MatchExpressions {
91 newMExps[i].Key = me.Key
92 newMExps[i].Operator = me.Operator
93 if me.Values != nil {
94 newMExps[i].Values = make([]string, len(me.Values))
95 copy(newMExps[i].Values, me.Values)
96 } else {
97 newMExps[i].Values = nil
98 }
99 }
100 newSelector.MatchExpressions = newMExps
101 } else {
102 newSelector.MatchExpressions = nil
103 }
104
105 return newSelector
106 }
107
108
109 func AddLabelToSelector(selector *metav1.LabelSelector, labelKey, labelValue string) *metav1.LabelSelector {
110 if labelKey == "" {
111
112 return selector
113 }
114 if selector.MatchLabels == nil {
115 selector.MatchLabels = make(map[string]string)
116 }
117 selector.MatchLabels[labelKey] = labelValue
118 return selector
119 }
120
121
122 func SelectorHasLabel(selector *metav1.LabelSelector, labelKey string) bool {
123 return len(selector.MatchLabels[labelKey]) > 0
124 }
125
View as plain text