From c217b1aa398e6176f080304784f66e6dc238a345 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Thu, 16 Jan 2020 12:17:32 -0800 Subject: [PATCH] lib/resourcemerge/core: Clear livenessProbe and readinessProbe if nil in required We claimed: if we have no required, then we don't care what someone else has set since this code landed in d9f6718de0 (lib: add lib for applying objects, 2018-08-14, #7). But we do care in situations like [1], where a 4.3 -> 4.2 downgrade leaves 4.3 readiness probes in place for a 4.2 operator which has no /readyz. With this commit we still have a few other types where we claim to not care: $ git grep -hB1 'someone else has set' | grep func func ensureSecurityContextPtr(modified *bool, existing **corev1.SecurityContext, required *corev1.SecurityContext) { func ensureCapabilitiesPtr(modified *bool, existing **corev1.Capabilities, required *corev1.Capabilities) { func ensureAffinityPtr(modified *bool, existing **corev1.Affinity, required *corev1.Affinity) { func ensurePodSecurityContextPtr(modified *bool, existing **corev1.PodSecurityContext, required *corev1.PodSecurityContext) { func ensureSELinuxOptionsPtr(modified *bool, existing **corev1.SELinuxOptions, required *corev1.SELinuxOptions) { func setBoolPtr(modified *bool, existing **bool, required *bool) { func setInt64Ptr(modified *bool, existing **int64, required *int64) { but I'm leaving them alone until we have a clearer picture about whether we care about those specific properties or not. [1]: https://bugzilla.redhat.com/show_bug.cgi?id=1791863#c1 --- lib/resourcemerge/core.go | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/lib/resourcemerge/core.go b/lib/resourcemerge/core.go index 9299429c3e..3e63bb23ec 100644 --- a/lib/resourcemerge/core.go +++ b/lib/resourcemerge/core.go @@ -136,12 +136,8 @@ func ensureContainer(modified *bool, existing *corev1.Container, required corev1 ensureVolumeMount(modified, existingCurr, required) } - if required.LivenessProbe != nil { - ensureProbePtr(modified, &existing.LivenessProbe, required.LivenessProbe) - } - if required.ReadinessProbe != nil { - ensureProbePtr(modified, &existing.ReadinessProbe, required.ReadinessProbe) - } + ensureProbePtr(modified, &existing.LivenessProbe, required.LivenessProbe) + ensureProbePtr(modified, &existing.ReadinessProbe, required.ReadinessProbe) // our security context should always win ensureSecurityContextPtr(modified, &existing.SecurityContext, required.SecurityContext) @@ -168,11 +164,10 @@ func ensureEnvFromSource(modified *bool, existing *[]corev1.EnvFromSource, requi } func ensureProbePtr(modified *bool, existing **corev1.Probe, required *corev1.Probe) { - // if we have no required, then we don't care what someone else has set - if required == nil { + if *existing == nil && required == nil { return } - if *existing == nil { + if *existing == nil || required == nil { *modified = true *existing = required return