Skip to content

Commit 8f4ac6d

Browse files
committed
Fix: Ensure proper handling of annotations in deployments
1 parent dc28f62 commit 8f4ac6d

6 files changed

Lines changed: 69 additions & 5 deletions

File tree

bundle/manifests/k8s-overcommit.clusterserviceversion.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ metadata:
3030
}
3131
]
3232
capabilities: Basic Install
33-
createdAt: "2025-07-03T11:39:06Z"
33+
createdAt: "2025-07-03T14:50:58Z"
3434
operators.operatorframework.io/builder: operator-sdk-v1.40.0
3535
operators.operatorframework.io/project_layout: go.kubebuilder.io/v4
3636
name: k8s-overcommit.v1.0.2

deploy/olm/1.0.2/k8s-overcommit.clusterserviceversion.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ metadata:
3030
}
3131
]
3232
capabilities: Basic Install
33-
createdAt: "2025-07-03T11:39:06Z"
33+
createdAt: "2025-07-03T14:50:58Z"
3434
operators.operatorframework.io/builder: operator-sdk-v1.40.0
3535
operators.operatorframework.io/project_layout: go.kubebuilder.io/v4
3636
name: k8s-overcommit.v1.0.2

internal/controller/overcommit/overcommit_controller.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ func (r *OvercommitReconciler) Reconcile(ctx context.Context, req ctrl.Request)
309309
occontroller.Spec = updatedDeployment.Spec
310310
occontroller.ObjectMeta.Labels = updatedDeployment.ObjectMeta.Labels
311311
occontroller.ObjectMeta.Annotations = updatedDeployment.ObjectMeta.Annotations
312+
logger.Info("Creating new OvercommitClass Controller deployment")
312313
return ctrl.SetControllerReference(overcommit, occontroller, r.Scheme)
313314
} else {
314315
// Existing deployment, only update specific fields if needed
@@ -322,6 +323,16 @@ func (r *OvercommitReconciler) Reconcile(ctx context.Context, req ctrl.Request)
322323
occontroller.Spec.Template.Spec.Containers[0].Env = updatedDeployment.Spec.Template.Spec.Containers[0].Env
323324
updated = true
324325
}
326+
// Update template annotations if they changed
327+
if !annotationsEqual(updatedDeployment.Spec.Template.Annotations, occontroller.Spec.Template.Annotations) {
328+
occontroller.Spec.Template.Annotations = updatedDeployment.Spec.Template.Annotations
329+
updated = true
330+
}
331+
// Update template labels if they changed
332+
if !labelsEqual(updatedDeployment.Spec.Template.Labels, occontroller.Spec.Template.Labels) {
333+
occontroller.Spec.Template.Labels = updatedDeployment.Spec.Template.Labels
334+
updated = true
335+
}
325336
// Only set controller reference if we actually updated something
326337
if updated {
327338
return ctrl.SetControllerReference(overcommit, occontroller, r.Scheme)

internal/controller/overcommit/utils.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,3 +290,49 @@ func envVarsEqual(a, b []corev1.EnvVar) bool {
290290

291291
return true
292292
}
293+
294+
// annotationsEqual compares two annotation maps to see if they're equal
295+
func annotationsEqual(a, b map[string]string) bool {
296+
// Handle nil cases
297+
if a == nil && b == nil {
298+
return true
299+
}
300+
if a == nil || b == nil {
301+
return false
302+
}
303+
304+
if len(a) != len(b) {
305+
return false
306+
}
307+
308+
for key, valueA := range a {
309+
if valueB, exists := b[key]; !exists || valueA != valueB {
310+
return false
311+
}
312+
}
313+
314+
return true
315+
}
316+
317+
// labelsEqual compares two label maps to see if they're equal
318+
func labelsEqual(a, b map[string]string) bool {
319+
// Handle nil cases
320+
if a == nil && b == nil {
321+
return true
322+
}
323+
if a == nil || b == nil {
324+
return false
325+
}
326+
327+
if len(a) != len(b) {
328+
return false
329+
}
330+
331+
for key, valueA := range a {
332+
if valueB, exists := b[key]; !exists || valueA != valueB {
333+
return false
334+
}
335+
}
336+
337+
return true
338+
}

internal/resources/generate_resources_overcommit_class_controller_controller.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@ func GenerateOvercommitClassControllerDeployment(overcommitObject overcommit.Ove
2121
labels = make(map[string]string)
2222
}
2323
labels["app"] = "overcommit-controller"
24+
25+
// Ensure annotations are properly handled
26+
annotations := overcommitObject.Spec.Annotations
27+
if annotations == nil {
28+
annotations = make(map[string]string)
29+
}
30+
2431
return &appsv1.Deployment{
2532
ObjectMeta: metav1.ObjectMeta{
2633
Name: "k8s-overcommit-overcommitclass-controller",
@@ -36,7 +43,7 @@ func GenerateOvercommitClassControllerDeployment(overcommitObject overcommit.Ove
3643
Template: corev1.PodTemplateSpec{
3744
ObjectMeta: metav1.ObjectMeta{
3845
Labels: labels,
39-
Annotations: overcommitObject.Annotations,
46+
Annotations: annotations,
4047
},
4148
Spec: corev1.PodSpec{
4249
ServiceAccountName: os.Getenv("SERVICE_ACCOUNT_NAME"),

internal/resources/generate_resources_validating_webhooks.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func GeneratePodValidatingDeployment(overcommitObject overcommit.Overcommit) *ap
6666
Template: corev1.PodTemplateSpec{
6767
ObjectMeta: metav1.ObjectMeta{
6868
Labels: labels,
69-
Annotations: overcommitObject.Annotations,
69+
Annotations: overcommitObject.Spec.Annotations,
7070
},
7171
Spec: corev1.PodSpec{
7272
ServiceAccountName: os.Getenv("SERVICE_ACCOUNT_NAME"),
@@ -241,7 +241,7 @@ func GenerateOvercommitClassValidatingDeployment(overcommitObject overcommit.Ove
241241
Template: corev1.PodTemplateSpec{
242242
ObjectMeta: metav1.ObjectMeta{
243243
Labels: labels,
244-
Annotations: overcommitObject.Annotations,
244+
Annotations: overcommitObject.Spec.Annotations,
245245
},
246246
Spec: corev1.PodSpec{
247247
ServiceAccountName: os.Getenv("SERVICE_ACCOUNT_NAME"),

0 commit comments

Comments
 (0)