From c3232b6db0940d49c84759842e59f23be37cbb17 Mon Sep 17 00:00:00 2001 From: Simon Pasquier Date: Thu, 1 Feb 2024 14:33:22 +0100 Subject: [PATCH 1/2] chore: add e2e test detecting the issue Signed-off-by: Simon Pasquier --- test/e2e/alertmanager_test.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/test/e2e/alertmanager_test.go b/test/e2e/alertmanager_test.go index cb0cf8cd6..56185ebdb 100644 --- a/test/e2e/alertmanager_test.go +++ b/test/e2e/alertmanager_test.go @@ -937,6 +937,7 @@ func testAlertmanagerConfigVersions(t *testing.T) { Spec: monitoringv1alpha1.AlertmanagerConfigSpec{ Route: &monitoringv1alpha1.Route{ Receiver: "webhook", + Continue: true, Matchers: []monitoringv1alpha1.Matcher{{ Name: "job", Value: "webapp.+", @@ -963,6 +964,8 @@ func testAlertmanagerConfigVersions(t *testing.T) { t.Fatalf("expected %#v matcher, got %#v", expected, amcfgV1beta1Converted.Spec.Route.Matchers) } + require.True(t, amcfgV1beta1Converted.Spec.Route.Continue) + amcfgV1beta1 := &monitoringv1beta1.AlertmanagerConfig{ ObjectMeta: metav1.ObjectMeta{ Name: "amcfg-v1beta1", @@ -970,6 +973,7 @@ func testAlertmanagerConfigVersions(t *testing.T) { Spec: monitoringv1beta1.AlertmanagerConfigSpec{ Route: &monitoringv1beta1.Route{ Receiver: "webhook", + Continue: true, Matchers: []monitoringv1beta1.Matcher{{ Name: "job", Value: "webapp.+", @@ -982,13 +986,19 @@ func testAlertmanagerConfigVersions(t *testing.T) { }, } - if _, err := framework.MonClientV1beta1.AlertmanagerConfigs(alertmanager.Namespace).Create(context.Background(), amcfgV1beta1, metav1.CreateOptions{}); err != nil { + amcfgV1beta1, err = framework.MonClientV1beta1.AlertmanagerConfigs(alertmanager.Namespace).Create(context.Background(), amcfgV1beta1, metav1.CreateOptions{}) + if err != nil { t.Fatalf("failed to create v1beta1 AlertmanagerConfig object: %v", err) } - if _, err := framework.MonClientV1alpha1.AlertmanagerConfigs(alertmanager.Namespace).Get(context.Background(), amcfgV1beta1.Name, metav1.GetOptions{}); err != nil { + require.True(t, amcfgV1beta1.Spec.Route.Continue) + + amcfgV1alpha1, err = framework.MonClientV1alpha1.AlertmanagerConfigs(alertmanager.Namespace).Get(context.Background(), amcfgV1beta1.Name, metav1.GetOptions{}) + if err != nil { t.Fatalf("failed to get v1alpha1 AlertmanagerConfig object: %v", err) } + + require.True(t, amcfgV1alpha1.Spec.Route.Continue) } // e2e test to validate that all possible fields in an AlertmanagerConfig CR are From 960bbecddb2e2e32a91c53f74946491afae767cc Mon Sep 17 00:00:00 2001 From: Simon Pasquier Date: Thu, 1 Feb 2024 17:08:50 +0100 Subject: [PATCH 2/2] fix: convert `continue` field between v1beta1 and v1alpha1 This change converts the `continue` field between v1alpha1 and v1beta1 AlertmanagerConfig versions. When a v1beta1 AlertmanagerConfig object was created with `continue: true`, the `continue` field was always converted to `false` when stored as v1alpha1. Signed-off-by: Simon Pasquier --- pkg/apis/monitoring/v1beta1/conversion_from.go | 1 + pkg/apis/monitoring/v1beta1/conversion_to.go | 1 + 2 files changed, 2 insertions(+) diff --git a/pkg/apis/monitoring/v1beta1/conversion_from.go b/pkg/apis/monitoring/v1beta1/conversion_from.go index e529feac0..e2b6aa49c 100644 --- a/pkg/apis/monitoring/v1beta1/conversion_from.go +++ b/pkg/apis/monitoring/v1beta1/conversion_from.go @@ -32,6 +32,7 @@ func convertRouteFrom(in *v1alpha1.Route) (*Route, error) { out := &Route{ Receiver: in.Receiver, + Continue: in.Continue, GroupBy: in.GroupBy, GroupWait: in.GroupWait, GroupInterval: in.GroupInterval, diff --git a/pkg/apis/monitoring/v1beta1/conversion_to.go b/pkg/apis/monitoring/v1beta1/conversion_to.go index 5904f8d20..c991d84c2 100644 --- a/pkg/apis/monitoring/v1beta1/conversion_to.go +++ b/pkg/apis/monitoring/v1beta1/conversion_to.go @@ -32,6 +32,7 @@ func convertRouteTo(in *Route) (*v1alpha1.Route, error) { out := &v1alpha1.Route{ Receiver: in.Receiver, + Continue: in.Continue, GroupBy: in.GroupBy, GroupWait: in.GroupWait, GroupInterval: in.GroupInterval,