diff --git a/internal/controller/pgupgrade/jobs.go b/internal/controller/pgupgrade/jobs.go index 3d74379d1..93b2bad34 100644 --- a/internal/controller/pgupgrade/jobs.go +++ b/internal/controller/pgupgrade/jobs.go @@ -189,8 +189,22 @@ func (r *PGUpgradeReconciler) generateUpgradeJob( // Replace all containers with one that does the upgrade. job.Spec.Template.Spec.EphemeralContainers = nil - // K8SPG-254: Major upgrade support - job.Spec.Template.Spec.InitContainers = upgrade.Spec.InitContainers + // K8SPG-894: Ensure database init container is included for required scripts + var initContainers []corev1.Container + + dbInitContainerName := ContainerDatabase + "-init" + for _, container := range startup.Spec.Template.Spec.InitContainers { + if container.Name == dbInitContainerName { + initContainers = append(initContainers, container) + break + } + } + + if len(upgrade.Spec.InitContainers) > 0 { + initContainers = append(initContainers, upgrade.Spec.InitContainers...) + } + + job.Spec.Template.Spec.InitContainers = initContainers volumeMounts := database.VolumeMounts volumeMounts = append(volumeMounts, upgrade.Spec.VolumeMounts...) diff --git a/internal/controller/pgupgrade/jobs_test.go b/internal/controller/pgupgrade/jobs_test.go index 992503b7f..7f1e5a32b 100644 --- a/internal/controller/pgupgrade/jobs_test.go +++ b/internal/controller/pgupgrade/jobs_test.go @@ -110,9 +110,19 @@ func TestGenerateUpgradeJob(t *testing.T) { upgrade.Spec.Resources.Requests = corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("3.14"), } + upgrade.Spec.InitContainers = []corev1.Container{ + { + Name: "upgrade-init-container", + }, + } startup := &appsv1.StatefulSet{} startup.Spec.Template.Spec = corev1.PodSpec{ + InitContainers: []corev1.Container{ + { + Name: ContainerDatabase + "-init", + }, + }, Containers: []corev1.Container{{ Name: ContainerDatabase, @@ -218,6 +228,11 @@ spec: volumeMounts: - mountPath: /mnt/some/such name: vm1 + initContainers: + - name: database-init + resources: {} + - name: upgrade-init-container + resources: {} restartPolicy: Never volumes: - hostPath: