Add envFrom support to Postgresql spec (#3118)

* add envFrom support
* generate files

---------

Co-authored-by: Felix Kunde <felix-kunde@gmx.de>
This commit is contained in:
annielzy
2026-07-22 17:21:31 +02:00
committed by GitHub
co-authored by Felix Kunde
parent 1b460310a2
commit ca9513c831
8 changed files with 248 additions and 0 deletions
+57
View File
@@ -229,6 +229,63 @@ func TestStatefulSetUpdateWithEnv(t *testing.T) {
}
}
func TestStatefulSetUpdateWithEnvFrom(t *testing.T) {
oldSpec := &acidv1.PostgresSpec{
TeamID: "myapp", NumberOfInstances: 1,
Resources: &acidv1.Resources{
ResourceRequests: acidv1.ResourceDescription{CPU: k8sutil.StringToPointer("1"), Memory: k8sutil.StringToPointer("10")},
ResourceLimits: acidv1.ResourceDescription{CPU: k8sutil.StringToPointer("1"), Memory: k8sutil.StringToPointer("10")},
},
Volume: acidv1.Volume{
Size: "1G",
},
}
oldSS, err := cl.generateStatefulSet(oldSpec)
if err != nil {
t.Errorf("in %s no StatefulSet created %v", t.Name(), err)
}
newSpec := oldSpec.DeepCopy()
newSS, err := cl.generateStatefulSet(newSpec)
if err != nil {
t.Errorf("in %s no StatefulSet created %v", t.Name(), err)
}
if !reflect.DeepEqual(oldSS, newSS) {
t.Errorf("in %s StatefulSet's must be equal", t.Name())
}
newSpec.EnvFrom = []v1.EnvFromSource{
{
ConfigMapRef: &v1.ConfigMapEnvSource{
LocalObjectReference: v1.LocalObjectReference{
Name: "test-configmap",
},
},
},
{
SecretRef: &v1.SecretEnvSource{
LocalObjectReference: v1.LocalObjectReference{
Name: "test-secret",
},
},
},
}
newSS, err = cl.generateStatefulSet(newSpec)
if err != nil {
t.Errorf("in %s no StatefulSet created %v", t.Name(), err)
}
if reflect.DeepEqual(oldSS, newSS) {
t.Errorf("in %s StatefulSet's must be not equal", t.Name())
}
postgresContainer := newSS.Spec.Template.Spec.Containers[0]
if !reflect.DeepEqual(postgresContainer.EnvFrom, newSpec.EnvFrom) {
t.Errorf("expected envFrom %v, got %v", newSpec.EnvFrom, postgresContainer.EnvFrom)
}
}
func TestInitRobotUsers(t *testing.T) {
tests := []struct {
testCase string
+4
View File
@@ -697,6 +697,7 @@ func generateContainer(
dockerImage *string,
resourceRequirements *v1.ResourceRequirements,
envVars []v1.EnvVar,
envFrom []v1.EnvFromSource,
volumeMounts []v1.VolumeMount,
privilegedMode bool,
privilegeEscalationMode *bool,
@@ -723,6 +724,7 @@ func generateContainer(
},
VolumeMounts: volumeMounts,
Env: envVars,
EnvFrom: envFrom,
SecurityContext: &v1.SecurityContext{
AllowPrivilegeEscalation: privilegeEscalationMode,
Privileged: &privilegedMode,
@@ -1385,6 +1387,7 @@ func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*appsv1.Statef
&effectiveDockerImage,
resourceRequirements,
spiloEnvVars,
spec.EnvFrom,
volumeMounts,
c.OpConfig.Resources.SpiloPrivileged,
c.OpConfig.Resources.SpiloAllowPrivilegeEscalation,
@@ -2385,6 +2388,7 @@ func (c *Cluster) generateLogicalBackupJob() (*batchv1.CronJob, error) {
&c.OpConfig.LogicalBackup.LogicalBackupDockerImage,
resourceRequirements,
envVars,
nil,
[]v1.VolumeMount{},
c.OpConfig.SpiloPrivileged, // use same value as for normal DB pods
c.OpConfig.SpiloAllowPrivilegeEscalation,
+42
View File
@@ -4488,6 +4488,48 @@ func TestGenerateCapabilities(t *testing.T) {
}
}
func TestGenerateContainerWithEnvFrom(t *testing.T) {
dockerImage := "test-image"
resourceRequirements := &v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("100m"),
v1.ResourceMemory: resource.MustParse("100Mi"),
},
}
envVars := []v1.EnvVar{{Name: "TEST_VAR", Value: "test-value"}}
envFrom := []v1.EnvFromSource{
{
ConfigMapRef: &v1.ConfigMapEnvSource{
LocalObjectReference: v1.LocalObjectReference{Name: "test-configmap"},
},
},
{
SecretRef: &v1.SecretEnvSource{
LocalObjectReference: v1.LocalObjectReference{Name: "test-secret"},
},
},
}
container := generateContainer(
constants.PostgresContainerName,
&dockerImage,
resourceRequirements,
envVars,
envFrom,
[]v1.VolumeMount{},
false,
util.False(),
nil,
)
if !reflect.DeepEqual(container.Env, envVars) {
t.Errorf("expected env %v, got %v", envVars, container.Env)
}
if !reflect.DeepEqual(container.EnvFrom, envFrom) {
t.Errorf("expected envFrom %v, got %v", envFrom, container.EnvFrom)
}
}
func TestTopologySpreadConstraints(t *testing.T) {
clusterName := "acid-test-cluster"
namespace := "default"