From 4f1804d5f0f1cee521638e28944b3e650370d3ed Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 16 Dec 2024 16:29:55 +0200 Subject: [PATCH] Preserve HTTPRoute annotations injected by AWS Gateway API Signed-off-by: Stefan Prodan --- pkg/router/gateway_api_v1beta1.go | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/pkg/router/gateway_api_v1beta1.go b/pkg/router/gateway_api_v1beta1.go index b9d8e40e1..da65e359c 100644 --- a/pkg/router/gateway_api_v1beta1.go +++ b/pkg/router/gateway_api_v1beta1.go @@ -23,10 +23,6 @@ import ( "slices" "strings" - flaggerv1 "github.com/fluxcd/flagger/pkg/apis/flagger/v1beta1" - "github.com/fluxcd/flagger/pkg/apis/gatewayapi/v1beta1" - istiov1beta1 "github.com/fluxcd/flagger/pkg/apis/istio/v1beta1" - clientset "github.com/fluxcd/flagger/pkg/client/clientset/versioned" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "go.uber.org/zap" @@ -34,6 +30,11 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/kubernetes" + + flaggerv1 "github.com/fluxcd/flagger/pkg/apis/flagger/v1beta1" + "github.com/fluxcd/flagger/pkg/apis/gatewayapi/v1beta1" + istiov1beta1 "github.com/fluxcd/flagger/pkg/apis/istio/v1beta1" + clientset "github.com/fluxcd/flagger/pkg/client/clientset/versioned" ) var ( @@ -200,16 +201,26 @@ func (gwr *GatewayAPIV1Beta1Router) Reconcile(canary *flaggerv1.Canary) error { } if httpRoute != nil { + // Preserve the existing annotations added by other controllers such as AWS Gateway API Controller. + mergedAnnotations := newMetadata.Annotations + for key, val := range httpRoute.Annotations { + if _, ok := mergedAnnotations[key]; !ok { + mergedAnnotations[key] = val + } + } + + // Compare the existing HTTPRoute spec and metadata with the desired state. + // If there are differences, update the HTTPRoute object. specDiff := cmp.Diff( httpRoute.Spec, httpRouteSpec, ignoreCmpOptions..., ) labelsDiff := cmp.Diff(newMetadata.Labels, httpRoute.Labels, cmpopts.EquateEmpty()) - annotationsDiff := cmp.Diff(newMetadata.Annotations, httpRoute.Annotations, cmpopts.EquateEmpty()) + annotationsDiff := cmp.Diff(mergedAnnotations, httpRoute.Annotations, cmpopts.EquateEmpty()) if (specDiff != "" && httpRoute.Name != "") || labelsDiff != "" || annotationsDiff != "" { hrClone := httpRoute.DeepCopy() hrClone.Spec = httpRouteSpec - hrClone.ObjectMeta.Annotations = newMetadata.Annotations + hrClone.ObjectMeta.Annotations = mergedAnnotations hrClone.ObjectMeta.Labels = newMetadata.Labels _, err := gwr.gatewayAPIClient.GatewayapiV1beta1().HTTPRoutes(hrNamespace). Update(context.TODO(), hrClone, metav1.UpdateOptions{})