...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package predicate
16
17 import (
18 "reflect"
19
20 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/k8s"
21 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/util/slice"
22
23 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24 "sigs.k8s.io/controller-runtime/pkg/event"
25 "sigs.k8s.io/controller-runtime/pkg/predicate"
26 )
27
28
29
30 type UnderlyingResourceOutOfSyncPredicate struct {
31 predicate.Funcs
32 }
33
34
35
36 func (UnderlyingResourceOutOfSyncPredicate) Update(e event.UpdateEvent) bool {
37
38
39 if e.ObjectOld.GetDeletionTimestamp().IsZero() &&
40 !e.ObjectNew.GetDeletionTimestamp().IsZero() {
41 return true
42 }
43
44
45
46 if hasDeletionDefenderFinalizerBeenRemoved(e.ObjectOld, e.ObjectNew) {
47 return true
48 }
49
50
51
52
53
54 if !areContainerAnnotationsEqual(e.ObjectOld.GetAnnotations(), e.ObjectNew.GetAnnotations()) {
55 return true
56 }
57
58
59 if !reflect.DeepEqual(e.ObjectOld.GetLabels(), e.ObjectNew.GetLabels()) {
60 return true
61 }
62
63
64
65 if e.ObjectNew.GetGeneration() != e.ObjectOld.GetGeneration() {
66 return true
67 }
68
69 return false
70 }
71
72
73
74
75 func (UnderlyingResourceOutOfSyncPredicate) Delete(_ event.DeleteEvent) bool {
76 return false
77 }
78
79 func hasDeletionDefenderFinalizerBeenRemoved(ObjectOld, ObjectNew metav1.Object) bool {
80 return slice.StringSliceContains(ObjectOld.GetFinalizers(), k8s.DeletionDefenderFinalizerName) &&
81 !slice.StringSliceContains(ObjectNew.GetFinalizers(), k8s.DeletionDefenderFinalizerName)
82 }
83
84 func areContainerAnnotationsEqual(a, b map[string]string) bool {
85 for _, x := range k8s.ContainerAnnotations {
86 if a[x] != b[x] {
87 return false
88 }
89 }
90 return true
91 }
92
View as plain text