Skip to content

Commit 282f2b3

Browse files
committed
Preserve HTTPRoute annotations injected by AWS Gateway API
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
1 parent a85887d commit 282f2b3

File tree

2 files changed

+35
-13
lines changed

2 files changed

+35
-13
lines changed

pkg/router/gateway_api.go

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,19 @@ import (
2323
"slices"
2424
"strings"
2525

26-
flaggerv1 "github.com/fluxcd/flagger/pkg/apis/flagger/v1beta1"
27-
v1 "github.com/fluxcd/flagger/pkg/apis/gatewayapi/v1"
28-
"github.com/fluxcd/flagger/pkg/apis/gatewayapi/v1beta1"
29-
istiov1beta1 "github.com/fluxcd/flagger/pkg/apis/istio/v1beta1"
30-
clientset "github.com/fluxcd/flagger/pkg/client/clientset/versioned"
3126
"github.com/google/go-cmp/cmp"
3227
"github.com/google/go-cmp/cmp/cmpopts"
3328
"go.uber.org/zap"
3429
"k8s.io/apimachinery/pkg/api/errors"
3530
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3631
"k8s.io/apimachinery/pkg/runtime/schema"
3732
"k8s.io/client-go/kubernetes"
33+
34+
flaggerv1 "github.com/fluxcd/flagger/pkg/apis/flagger/v1beta1"
35+
v1 "github.com/fluxcd/flagger/pkg/apis/gatewayapi/v1"
36+
"github.com/fluxcd/flagger/pkg/apis/gatewayapi/v1beta1"
37+
istiov1beta1 "github.com/fluxcd/flagger/pkg/apis/istio/v1beta1"
38+
clientset "github.com/fluxcd/flagger/pkg/client/clientset/versioned"
3839
)
3940

4041
var (
@@ -218,16 +219,26 @@ func (gwr *GatewayAPIRouter) Reconcile(canary *flaggerv1.Canary) error {
218219
}
219220

220221
if httpRoute != nil {
222+
// Preserve the existing annotations added by other controllers such as AWS Gateway API Controller.
223+
mergedAnnotations := newMetadata.Annotations
224+
for key, val := range httpRoute.Annotations {
225+
if _, ok := mergedAnnotations[key]; !ok {
226+
mergedAnnotations[key] = val
227+
}
228+
}
229+
230+
// Compare the existing HTTPRoute spec and metadata with the desired state.
231+
// If there are differences, update the HTTPRoute object.
221232
specDiff := cmp.Diff(
222233
httpRoute.Spec, httpRouteSpec,
223234
ignoreCmpOptions...,
224235
)
225236
labelsDiff := cmp.Diff(newMetadata.Labels, httpRoute.Labels, cmpopts.EquateEmpty())
226-
annotationsDiff := cmp.Diff(newMetadata.Annotations, httpRoute.Annotations, cmpopts.EquateEmpty())
237+
annotationsDiff := cmp.Diff(mergedAnnotations, httpRoute.Annotations, cmpopts.EquateEmpty())
227238
if (specDiff != "" && httpRoute.Name != "") || labelsDiff != "" || annotationsDiff != "" {
228239
hrClone := httpRoute.DeepCopy()
229240
hrClone.Spec = httpRouteSpec
230-
hrClone.ObjectMeta.Annotations = newMetadata.Annotations
241+
hrClone.ObjectMeta.Annotations = mergedAnnotations
231242
hrClone.ObjectMeta.Labels = newMetadata.Labels
232243
_, err := gwr.gatewayAPIClient.GatewayapiV1().HTTPRoutes(hrNamespace).
233244
Update(context.TODO(), hrClone, metav1.UpdateOptions{})

pkg/router/gateway_api_v1beta1.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,18 @@ import (
2323
"slices"
2424
"strings"
2525

26-
flaggerv1 "github.com/fluxcd/flagger/pkg/apis/flagger/v1beta1"
27-
"github.com/fluxcd/flagger/pkg/apis/gatewayapi/v1beta1"
28-
istiov1beta1 "github.com/fluxcd/flagger/pkg/apis/istio/v1beta1"
29-
clientset "github.com/fluxcd/flagger/pkg/client/clientset/versioned"
3026
"github.com/google/go-cmp/cmp"
3127
"github.com/google/go-cmp/cmp/cmpopts"
3228
"go.uber.org/zap"
3329
"k8s.io/apimachinery/pkg/api/errors"
3430
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3531
"k8s.io/apimachinery/pkg/runtime/schema"
3632
"k8s.io/client-go/kubernetes"
33+
34+
flaggerv1 "github.com/fluxcd/flagger/pkg/apis/flagger/v1beta1"
35+
"github.com/fluxcd/flagger/pkg/apis/gatewayapi/v1beta1"
36+
istiov1beta1 "github.com/fluxcd/flagger/pkg/apis/istio/v1beta1"
37+
clientset "github.com/fluxcd/flagger/pkg/client/clientset/versioned"
3738
)
3839

3940
var (
@@ -200,16 +201,26 @@ func (gwr *GatewayAPIV1Beta1Router) Reconcile(canary *flaggerv1.Canary) error {
200201
}
201202

202203
if httpRoute != nil {
204+
// Preserve the existing annotations added by other controllers such as AWS Gateway API Controller.
205+
mergedAnnotations := newMetadata.Annotations
206+
for key, val := range httpRoute.Annotations {
207+
if _, ok := mergedAnnotations[key]; !ok {
208+
mergedAnnotations[key] = val
209+
}
210+
}
211+
212+
// Compare the existing HTTPRoute spec and metadata with the desired state.
213+
// If there are differences, update the HTTPRoute object.
203214
specDiff := cmp.Diff(
204215
httpRoute.Spec, httpRouteSpec,
205216
ignoreCmpOptions...,
206217
)
207218
labelsDiff := cmp.Diff(newMetadata.Labels, httpRoute.Labels, cmpopts.EquateEmpty())
208-
annotationsDiff := cmp.Diff(newMetadata.Annotations, httpRoute.Annotations, cmpopts.EquateEmpty())
219+
annotationsDiff := cmp.Diff(mergedAnnotations, httpRoute.Annotations, cmpopts.EquateEmpty())
209220
if (specDiff != "" && httpRoute.Name != "") || labelsDiff != "" || annotationsDiff != "" {
210221
hrClone := httpRoute.DeepCopy()
211222
hrClone.Spec = httpRouteSpec
212-
hrClone.ObjectMeta.Annotations = newMetadata.Annotations
223+
hrClone.ObjectMeta.Annotations = mergedAnnotations
213224
hrClone.ObjectMeta.Labels = newMetadata.Labels
214225
_, err := gwr.gatewayAPIClient.GatewayapiV1beta1().HTTPRoutes(hrNamespace).
215226
Update(context.TODO(), hrClone, metav1.UpdateOptions{})

0 commit comments

Comments
 (0)