-
Notifications
You must be signed in to change notification settings - Fork 804
/
labels.go
69 lines (59 loc) · 1.56 KB
/
labels.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package generate
import (
"fmt"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"sigs.k8s.io/controller-runtime/pkg/log"
)
func manageLabels(unstr *unstructured.Unstructured, triggerResource unstructured.Unstructured) {
// add managedBY label if not defined
labels := unstr.GetLabels()
if labels == nil {
labels = map[string]string{}
}
// handle managedBy label
managedBy(labels)
// handle generatedBy label
generatedBy(labels, triggerResource)
// update the labels
unstr.SetLabels(labels)
}
func managedBy(labels map[string]string) {
// ManagedBy label
key := "app.kubernetes.io/managed-by"
value := "kyverno"
val, ok := labels[key]
if ok {
if val != value {
log.Log.Info(fmt.Sprintf("resource managed by %s, kyverno wont over-ride the label", val))
return
}
}
if !ok {
// add label
labels[key] = value
}
}
func generatedBy(labels map[string]string, triggerResource unstructured.Unstructured) {
keyKind := "kyverno.io/generated-by-kind"
keyNamespace := "kyverno.io/generated-by-namespace"
keyName := "kyverno.io/generated-by-name"
checkGeneratedBy(labels, keyKind, triggerResource.GetKind())
checkGeneratedBy(labels, keyNamespace, triggerResource.GetNamespace())
checkGeneratedBy(labels, keyName, triggerResource.GetName())
}
func checkGeneratedBy(labels map[string]string, key, value string) {
if len(value) > 63 {
value = value[0:63]
}
val, ok := labels[key]
if ok {
if val != value {
log.Log.Info(fmt.Sprintf("kyverno wont over-ride the label %s", key))
return
}
}
if !ok {
// add label
labels[key] = value
}
}