Skip to content

Commit e878215

Browse files
author
Joshua Sierles
committed
Allow specifying sidecars and env vars for the repo host
1 parent bbbcd2b commit e878215

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed

internal/controller/postgrescluster/pgbackrest.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,25 @@ func (r *Reconciler) generateRepoHostIntent(ctx context.Context, postgresCluster
732732
}
733733
sizeLimit := getTMPSizeLimit(repo.Labels[naming.LabelVersion], resources)
734734

735+
// Apply custom environment variables to the pgBackRest repo host container if specified
736+
if repoHost := postgresCluster.Spec.Backups.PGBackRest.RepoHost; repoHost != nil && len(repoHost.Env) > 0 {
737+
for i, container := range repo.Spec.Template.Spec.Containers {
738+
if container.Name == naming.PGBackRestRepoContainerName {
739+
repo.Spec.Template.Spec.Containers[i].Env = append(
740+
repo.Spec.Template.Spec.Containers[i].Env,
741+
repoHost.Env...)
742+
break
743+
}
744+
}
745+
}
746+
747+
// Add any custom sidecar containers to the repo host pod if specified
748+
if repoHost := postgresCluster.Spec.Backups.PGBackRest.RepoHost; repoHost != nil && len(repoHost.Containers) > 0 {
749+
repo.Spec.Template.Spec.Containers = append(
750+
repo.Spec.Template.Spec.Containers,
751+
repoHost.Containers...)
752+
}
753+
735754
addTMPEmptyDir(&repo.Spec.Template, sizeLimit)
736755

737756
// set ownership references

internal/controller/postgrescluster/pgbackrest_test.go

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2739,6 +2739,84 @@ func TestGenerateRepoHostIntent(t *testing.T) {
27392739
assert.NilError(t, err)
27402740
assert.Equal(t, *sts.Spec.Replicas, int32(0))
27412741
})
2742+
2743+
t.Run("With custom environment variables", func(t *testing.T) {
2744+
cluster := &v1beta1.PostgresCluster{
2745+
ObjectMeta: metav1.ObjectMeta{
2746+
Name: "testcluster",
2747+
Labels: map[string]string{
2748+
naming.LabelVersion: "2.4.0",
2749+
},
2750+
},
2751+
Spec: v1beta1.PostgresClusterSpec{
2752+
Backups: v1beta1.Backups{
2753+
PGBackRest: v1beta1.PGBackRestArchive{
2754+
RepoHost: &v1beta1.PGBackRestRepoHost{
2755+
Env: []corev1.EnvVar{
2756+
{
2757+
Name: "TEST_ENV_VAR",
2758+
Value: "test-value",
2759+
},
2760+
},
2761+
},
2762+
},
2763+
},
2764+
},
2765+
}
2766+
sts, err := r.generateRepoHostIntent(ctx, cluster, "", &RepoResources{}, &observedInstances{})
2767+
assert.NilError(t, err)
2768+
2769+
// Find pgbackrest container and check for env var
2770+
var found bool
2771+
for _, container := range sts.Spec.Template.Spec.Containers {
2772+
if container.Name == naming.PGBackRestRepoContainerName {
2773+
for _, env := range container.Env {
2774+
if env.Name == "TEST_ENV_VAR" && env.Value == "test-value" {
2775+
found = true
2776+
break
2777+
}
2778+
}
2779+
}
2780+
}
2781+
assert.Assert(t, found, "expected environment variable TEST_ENV_VAR not found")
2782+
})
2783+
2784+
t.Run("With custom sidecar containers", func(t *testing.T) {
2785+
cluster := &v1beta1.PostgresCluster{
2786+
ObjectMeta: metav1.ObjectMeta{
2787+
Name: "testcluster",
2788+
Labels: map[string]string{
2789+
naming.LabelVersion: "2.4.0",
2790+
},
2791+
},
2792+
Spec: v1beta1.PostgresClusterSpec{
2793+
Backups: v1beta1.Backups{
2794+
PGBackRest: v1beta1.PGBackRestArchive{
2795+
RepoHost: &v1beta1.PGBackRestRepoHost{
2796+
Containers: []corev1.Container{
2797+
{
2798+
Name: "sidecar-test",
2799+
Image: "test-image:latest",
2800+
},
2801+
},
2802+
},
2803+
},
2804+
},
2805+
},
2806+
}
2807+
sts, err := r.generateRepoHostIntent(ctx, cluster, "", &RepoResources{}, &observedInstances{})
2808+
assert.NilError(t, err)
2809+
2810+
// Check sidecar container is added
2811+
var found bool
2812+
for _, container := range sts.Spec.Template.Spec.Containers {
2813+
if container.Name == "sidecar-test" {
2814+
found = true
2815+
break
2816+
}
2817+
}
2818+
assert.Assert(t, found, "expected sidecar container 'sidecar-test' not found")
2819+
})
27422820
}
27432821

27442822
func TestGenerateRestoreJobIntent(t *testing.T) {

pkg/apis/postgres-operator.crunchydata.com/v1beta1/pgbackrest_types.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,15 @@ type PGBackRestRepoHost struct {
231231
// +optional
232232
TopologySpreadConstraints []corev1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"`
233233

234+
// Custom sidecar containers for the pgBackRest repo host pod. Changing this
235+
// value causes the repo host to restart.
236+
// +optional
237+
Containers []corev1.Container `json:"containers,omitempty"`
238+
239+
// Environment variables to be set in the pgBackRest repo host container.
240+
// +optional
241+
Env []corev1.EnvVar `json:"env,omitempty"`
242+
234243
// ConfigMap containing custom SSH configuration.
235244
// Deprecated: Repository hosts use mTLS for encryption, authentication, and authorization.
236245
// +optional

0 commit comments

Comments
 (0)