From 71539c222cecf5dd18c9335beb4a229de2402adf Mon Sep 17 00:00:00 2001 From: hontarau Date: Fri, 29 Mar 2024 16:37:57 +0100 Subject: [PATCH] Make merge default probe pure --- internal/controller/factory/statefulset.go | 20 +++++----- .../controller/factory/statefulset_test.go | 37 +++++++++++++++++++ 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/internal/controller/factory/statefulset.go b/internal/controller/factory/statefulset.go index da110c04..8321f5a0 100644 --- a/internal/controller/factory/statefulset.go +++ b/internal/controller/factory/statefulset.go @@ -196,7 +196,7 @@ func generateEtcdCommand(cluster *etcdaenixiov1alpha1.EtcdCluster) []string { } func getStartupProbe(probe *corev1.Probe) *corev1.Probe { - defaultProbe := &corev1.Probe{ + defaultProbe := corev1.Probe{ ProbeHandler: corev1.ProbeHandler{ HTTPGet: &corev1.HTTPGetAction{ Path: "/readyz?serializable=false", @@ -210,7 +210,7 @@ func getStartupProbe(probe *corev1.Probe) *corev1.Probe { } func getReadinessProbe(probe *corev1.Probe) *corev1.Probe { - defaultProbe := &corev1.Probe{ + defaultProbe := corev1.Probe{ ProbeHandler: corev1.ProbeHandler{ HTTPGet: &corev1.HTTPGetAction{ Path: "/readyz", @@ -224,7 +224,7 @@ func getReadinessProbe(probe *corev1.Probe) *corev1.Probe { } func getLivenessProbe(probe *corev1.Probe) *corev1.Probe { - defaultProbe := &corev1.Probe{ + defaultProbe := corev1.Probe{ ProbeHandler: corev1.ProbeHandler{ HTTPGet: &corev1.HTTPGetAction{ Path: "/livez", @@ -237,24 +237,26 @@ func getLivenessProbe(probe *corev1.Probe) *corev1.Probe { return mergeWithDefaultProbe(probe, defaultProbe) } -func mergeWithDefaultProbe(probe *corev1.Probe, defaultProbe *corev1.Probe) *corev1.Probe { +func mergeWithDefaultProbe(probe *corev1.Probe, defaultProbe corev1.Probe) *corev1.Probe { + res := defaultProbe.DeepCopy() + if probe == nil { - return defaultProbe + return res } if probe.InitialDelaySeconds != 0 { - defaultProbe.InitialDelaySeconds = probe.InitialDelaySeconds + res.InitialDelaySeconds = probe.InitialDelaySeconds } if probe.PeriodSeconds != 0 { - defaultProbe.PeriodSeconds = probe.PeriodSeconds + res.PeriodSeconds = probe.PeriodSeconds } if hasProbeHandlerAction(*probe) { - defaultProbe.ProbeHandler = probe.ProbeHandler + res.ProbeHandler = probe.ProbeHandler } - return defaultProbe + return res } func hasProbeHandlerAction(probe corev1.Probe) bool { diff --git a/internal/controller/factory/statefulset_test.go b/internal/controller/factory/statefulset_test.go index 992b9172..42a23695 100644 --- a/internal/controller/factory/statefulset_test.go +++ b/internal/controller/factory/statefulset_test.go @@ -487,4 +487,41 @@ var _ = Describe("CreateOrUpdateStatefulSet handler", func() { })) }) }) + Context("When merge with default probe", func() { + It("should correctly merge probe with default", func() { + defaultProbe := v1.Probe{ + ProbeHandler: v1.ProbeHandler{ + HTTPGet: &v1.HTTPGetAction{ + Path: "/livez", + Port: intstr.FromInt32(2379), + }, + }, + InitialDelaySeconds: 5, + PeriodSeconds: 5, + } + defaultProbeCopy := defaultProbe.DeepCopy() + + probe := &v1.Probe{ + ProbeHandler: v1.ProbeHandler{ + Exec: &v1.ExecAction{ + Command: []string{"test"}, + }, + }, + InitialDelaySeconds: 11, + } + result := mergeWithDefaultProbe(probe, defaultProbe) + Expect(result).To(Equal(&v1.Probe{ + ProbeHandler: v1.ProbeHandler{ + Exec: &v1.ExecAction{ + Command: []string{"test"}, + }, + }, + InitialDelaySeconds: 11, + PeriodSeconds: 5, + })) + By("Shouldn't mutate default probe", func() { + Expect(defaultProbe).To(Equal(*defaultProbeCopy)) + }) + }) + }) })