Skip to content

Commit

Permalink
Preserve HTTPRoute annotations injected by AWS Gateway API
Browse files Browse the repository at this point in the history
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
  • Loading branch information
stefanprodan committed Dec 16, 2024
1 parent a85887d commit 4f1804d
Showing 1 changed file with 17 additions and 6 deletions.
23 changes: 17 additions & 6 deletions pkg/router/gateway_api_v1beta1.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,18 @@ 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"
"k8s.io/apimachinery/pkg/api/errors"
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 (
Expand Down Expand Up @@ -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{})
Expand Down

0 comments on commit 4f1804d

Please sign in to comment.