11package provisioner
22
33import (
4+ "maps"
5+
46 appsv1 "k8s.io/api/apps/v1"
57 corev1 "k8s.io/api/core/v1"
68 rbacv1 "k8s.io/api/rbac/v1"
9+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
710 "sigs.k8s.io/controller-runtime/pkg/client"
811 "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
912)
@@ -12,54 +15,103 @@ import (
1215func objectSpecSetter (object client.Object ) controllerutil.MutateFn {
1316 switch obj := object .(type ) {
1417 case * appsv1.Deployment :
15- return deploymentSpecSetter (obj , obj .Spec )
18+ return deploymentSpecSetter (obj , obj .Spec , obj . ObjectMeta )
1619 case * corev1.Service :
17- return serviceSpecSetter (obj , obj .Spec )
20+ return serviceSpecSetter (obj , obj .Spec , obj . ObjectMeta )
1821 case * corev1.ServiceAccount :
19- return func () error { return nil }
22+ return serviceAccountSpecSetter ( obj , obj . ObjectMeta )
2023 case * corev1.ConfigMap :
21- return configMapSpecSetter (obj , obj .Data )
24+ return configMapSpecSetter (obj , obj .Data , obj . ObjectMeta )
2225 case * corev1.Secret :
23- return secretSpecSetter (obj , obj .Data )
26+ return secretSpecSetter (obj , obj .Data , obj . ObjectMeta )
2427 case * rbacv1.Role :
25- return roleSpecSetter (obj , obj .Rules )
28+ return roleSpecSetter (obj , obj .Rules , obj . ObjectMeta )
2629 case * rbacv1.RoleBinding :
27- return roleBindingSpecSetter (obj , obj .RoleRef , obj .Subjects )
30+ return roleBindingSpecSetter (obj , obj .RoleRef , obj .Subjects , obj . ObjectMeta )
2831 }
2932
3033 return nil
3134}
3235
33- func deploymentSpecSetter (deployment * appsv1.Deployment , spec appsv1.DeploymentSpec ) controllerutil.MutateFn {
36+ func deploymentSpecSetter (
37+ deployment * appsv1.Deployment ,
38+ spec appsv1.DeploymentSpec ,
39+ objectMeta metav1.ObjectMeta ,
40+ ) controllerutil.MutateFn {
3441 return func () error {
42+ deployment .Labels = objectMeta .Labels
43+ deployment .Annotations = objectMeta .Annotations
3544 deployment .Spec = spec
3645 return nil
3746 }
3847}
3948
40- func serviceSpecSetter (service * corev1.Service , spec corev1.ServiceSpec ) controllerutil.MutateFn {
49+ func serviceSpecSetter (
50+ service * corev1.Service ,
51+ spec corev1.ServiceSpec ,
52+ objectMeta metav1.ObjectMeta ,
53+ ) controllerutil.MutateFn {
4154 return func () error {
55+ service .Labels = objectMeta .Labels
56+ service .Annotations = objectMeta .Annotations
4257 service .Spec = spec
4358 return nil
4459 }
4560}
4661
47- func configMapSpecSetter (configMap * corev1.ConfigMap , data map [string ]string ) controllerutil.MutateFn {
62+ func serviceAccountSpecSetter (
63+ serviceAccount * corev1.ServiceAccount ,
64+ objectMeta metav1.ObjectMeta ,
65+ ) controllerutil.MutateFn {
4866 return func () error {
67+ serviceAccount .Labels = objectMeta .Labels
68+ serviceAccount .Annotations = objectMeta .Annotations
69+ return nil
70+ }
71+ }
72+
73+ func configMapSpecSetter (
74+ configMap * corev1.ConfigMap ,
75+ data map [string ]string ,
76+ objectMeta metav1.ObjectMeta ,
77+ ) controllerutil.MutateFn {
78+ return func () error {
79+ // this check ensures we don't trigger an unnecessary update to the agent ConfigMap
80+ // and trigger a Deployment restart
81+ if maps .Equal (configMap .Labels , objectMeta .Labels ) &&
82+ maps .Equal (configMap .Annotations , objectMeta .Annotations ) &&
83+ maps .Equal (configMap .Data , data ) {
84+ return nil
85+ }
86+
87+ configMap .Labels = objectMeta .Labels
88+ configMap .Annotations = objectMeta .Annotations
4989 configMap .Data = data
5090 return nil
5191 }
5292}
5393
54- func secretSpecSetter (secret * corev1.Secret , data map [string ][]byte ) controllerutil.MutateFn {
94+ func secretSpecSetter (
95+ secret * corev1.Secret ,
96+ data map [string ][]byte ,
97+ objectMeta metav1.ObjectMeta ,
98+ ) controllerutil.MutateFn {
5599 return func () error {
100+ secret .Labels = objectMeta .Labels
101+ secret .Annotations = objectMeta .Annotations
56102 secret .Data = data
57103 return nil
58104 }
59105}
60106
61- func roleSpecSetter (role * rbacv1.Role , rules []rbacv1.PolicyRule ) controllerutil.MutateFn {
107+ func roleSpecSetter (
108+ role * rbacv1.Role ,
109+ rules []rbacv1.PolicyRule ,
110+ objectMeta metav1.ObjectMeta ,
111+ ) controllerutil.MutateFn {
62112 return func () error {
113+ role .Labels = objectMeta .Labels
114+ role .Annotations = objectMeta .Annotations
63115 role .Rules = rules
64116 return nil
65117 }
@@ -69,8 +121,11 @@ func roleBindingSpecSetter(
69121 roleBinding * rbacv1.RoleBinding ,
70122 roleRef rbacv1.RoleRef ,
71123 subjects []rbacv1.Subject ,
124+ objectMeta metav1.ObjectMeta ,
72125) controllerutil.MutateFn {
73126 return func () error {
127+ roleBinding .Labels = objectMeta .Labels
128+ roleBinding .Annotations = objectMeta .Annotations
74129 roleBinding .RoleRef = roleRef
75130 roleBinding .Subjects = subjects
76131 return nil
0 commit comments