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