From c5b3cc9c3aeedab392b1eb098c8cc56c1e782130 Mon Sep 17 00:00:00 2001 From: Pavel Zaytsev Date: Wed, 12 Nov 2025 14:53:33 -0800 Subject: [PATCH] Allow user env vars to override operator-generated ones This change modifies appendEnvVars() to allow environment variables defined in the PostgreSQL CRD spec.env to override operator-generated environment variables (like SPILO_CONFIGURATION) instead of being silently ignored. Previously, if an env var already existed in the list, user-provided values were skipped. Now, user values take precedence and replace the operator-generated ones. This enables users to customize SPILO_CONFIGURATION and other operator-managed env vars through the CRD, which is useful for adding custom Patroni DCS configuration like ignore_slots. --- pkg/cluster/k8sres.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pkg/cluster/k8sres.go b/pkg/cluster/k8sres.go index e05a54553..0c316aead 100644 --- a/pkg/cluster/k8sres.go +++ b/pkg/cluster/k8sres.go @@ -1088,7 +1088,20 @@ func (c *Cluster) generateSpiloPodEnvVars( func appendEnvVars(envs []v1.EnvVar, appEnv ...v1.EnvVar) []v1.EnvVar { collectedEnvs := envs for _, env := range appEnv { - if !isEnvVarPresent(collectedEnvs, env.Name) { + // Check if env var already exists + existingIdx := -1 + for i, existing := range collectedEnvs { + if strings.EqualFold(existing.Name, env.Name) { + existingIdx = i + break + } + } + + if existingIdx >= 0 { + // Replace existing env var (user override takes precedence) + collectedEnvs[existingIdx] = env + } else { + // Add new env var collectedEnvs = append(collectedEnvs, env) } }