Skip to content

Commit 645d505

Browse files
committed
Move AddAdditionalVolumesToSpecifiedContainers to a shared package
1 parent f49f235 commit 645d505

File tree

10 files changed

+331
-356
lines changed

10 files changed

+331
-356
lines changed

internal/controller/postgrescluster/instance.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
"github.com/crunchydata/postgres-operator/internal/pki"
3737
"github.com/crunchydata/postgres-operator/internal/postgres"
3838
"github.com/crunchydata/postgres-operator/internal/tracing"
39+
"github.com/crunchydata/postgres-operator/internal/util"
3940
"github.com/crunchydata/postgres-operator/pkg/apis/postgres-operator.crunchydata.com/v1beta1"
4041
)
4142

@@ -1213,7 +1214,7 @@ func (r *Reconciler) reconcileInstance(
12131214

12141215
// mount additional volumes to the Postgres instance containers
12151216
if err == nil && spec.Volumes != nil && len(spec.Volumes.Additional) > 0 {
1216-
missingContainers := AddAdditionalVolumesToSpecifiedContainers(&instance.Spec.Template, spec.Volumes.Additional)
1217+
missingContainers := util.AddAdditionalVolumesAndMounts(&instance.Spec.Template, spec.Volumes.Additional)
12171218

12181219
if len(missingContainers) > 0 {
12191220
r.Recorder.Eventf(cluster, corev1.EventTypeWarning, "SpecifiedContainerNotFound",

internal/controller/postgrescluster/pgbackrest.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,7 @@ func (r *Reconciler) generateRepoHostIntent(ctx context.Context, postgresCluster
721721

722722
// mount additional volumes to the repo host containers
723723
if repoHost != nil && repoHost.Volumes != nil && len(repoHost.Volumes.Additional) > 0 {
724-
missingContainers := AddAdditionalVolumesToSpecifiedContainers(&repo.Spec.Template, repoHost.Volumes.Additional)
724+
missingContainers := util.AddAdditionalVolumesAndMounts(&repo.Spec.Template, repoHost.Volumes.Additional)
725725

726726
if len(missingContainers) > 0 {
727727
r.Recorder.Eventf(postgresCluster, corev1.EventTypeWarning, "SpecifiedContainerNotFound",
@@ -908,7 +908,7 @@ func (r *Reconciler) generateBackupJobSpecIntent(ctx context.Context, postgresCl
908908

909909
// mount additional volumes to the job containers
910910
if jobs != nil && jobs.Volumes != nil && len(jobs.Volumes.Additional) > 0 {
911-
missingContainers := AddAdditionalVolumesToSpecifiedContainers(&jobSpec.Template, jobs.Volumes.Additional)
911+
missingContainers := util.AddAdditionalVolumesAndMounts(&jobSpec.Template, jobs.Volumes.Additional)
912912

913913
if len(missingContainers) > 0 {
914914
r.Recorder.Eventf(postgresCluster, corev1.EventTypeWarning, "SpecifiedContainerNotFound",
@@ -1408,7 +1408,7 @@ func (r *Reconciler) generateRestoreJobIntent(cluster *v1beta1.PostgresCluster,
14081408
job.Spec.Template.Spec.PriorityClassName = initialize.FromPointer(dataSource.PriorityClassName)
14091409

14101410
if dataSource.Volumes != nil && len(dataSource.Volumes.Additional) > 0 {
1411-
missingContainers := AddAdditionalVolumesToSpecifiedContainers(&job.Spec.Template, dataSource.Volumes.Additional)
1411+
missingContainers := util.AddAdditionalVolumesAndMounts(&job.Spec.Template, dataSource.Volumes.Additional)
14121412

14131413
if len(missingContainers) > 0 {
14141414
r.Recorder.Eventf(cluster, corev1.EventTypeWarning, "SpecifiedContainerNotFound",

internal/controller/postgrescluster/pgbouncer.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"github.com/crunchydata/postgres-operator/internal/pgbouncer"
2626
"github.com/crunchydata/postgres-operator/internal/pki"
2727
"github.com/crunchydata/postgres-operator/internal/postgres"
28+
"github.com/crunchydata/postgres-operator/internal/util"
2829
"github.com/crunchydata/postgres-operator/pkg/apis/postgres-operator.crunchydata.com/v1beta1"
2930
)
3031

@@ -476,8 +477,8 @@ func (r *Reconciler) generatePGBouncerDeployment(
476477
AddTMPEmptyDir(&deploy.Spec.Template)
477478

478479
// mount additional volumes to the pgbouncer containers
479-
if err == nil && cluster.Spec.Proxy.PGBouncer.Volumes != nil && len(cluster.Spec.Proxy.PGBouncer.Volumes.Additional) > 0 {
480-
missingContainers := AddAdditionalVolumesToSpecifiedContainers(&deploy.Spec.Template, cluster.Spec.Proxy.PGBouncer.Volumes.Additional)
480+
if volumes := cluster.Spec.Proxy.PGBouncer.Volumes; err == nil && volumes != nil && len(volumes.Additional) > 0 {
481+
missingContainers := util.AddAdditionalVolumesAndMounts(&deploy.Spec.Template, volumes.Additional)
481482

482483
if len(missingContainers) > 0 {
483484
r.Recorder.Eventf(cluster, corev1.EventTypeWarning, "SpecifiedContainerNotFound",

internal/controller/postgrescluster/util.go

Lines changed: 0 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,9 @@ import (
1313
corev1 "k8s.io/api/core/v1"
1414
"k8s.io/apimachinery/pkg/api/resource"
1515
"k8s.io/apimachinery/pkg/util/rand"
16-
"k8s.io/apimachinery/pkg/util/sets"
1716

1817
"github.com/crunchydata/postgres-operator/internal/initialize"
1918
"github.com/crunchydata/postgres-operator/internal/naming"
20-
"github.com/crunchydata/postgres-operator/pkg/apis/postgres-operator.crunchydata.com/v1beta1"
2119
)
2220

2321
var tmpDirSizeLimit = resource.MustParse("16Mi")
@@ -287,81 +285,3 @@ func safeHash32(content func(w io.Writer) error) (string, error) {
287285
}
288286
return rand.SafeEncodeString(fmt.Sprint(hash.Sum32())), nil
289287
}
290-
291-
// AdditionalVolumeMount returns the name and mount path of the additional volume.
292-
func AdditionalVolumeMount(name string, readOnly bool) corev1.VolumeMount {
293-
return corev1.VolumeMount{
294-
Name: fmt.Sprintf("volumes-%s", name),
295-
MountPath: "/volumes/" + name,
296-
ReadOnly: readOnly,
297-
}
298-
}
299-
300-
// AddAdditionalVolumesToSpecifiedContainers adds additional volumes to the specified
301-
// containers in the specified pod
302-
// AddAdditionalVolumesToSpecifiedContainers adds the volumes to the pod
303-
// as `volumes-<additionalVolumeRequest.Name>`
304-
// and adds the directory to the path `/volumes/<additionalVolumeRequest.Name>`
305-
func AddAdditionalVolumesToSpecifiedContainers(template *corev1.PodTemplateSpec,
306-
additionalVolumes []v1beta1.AdditionalVolume) []string {
307-
308-
missingContainers := []string{}
309-
for _, additionalVolumeRequest := range additionalVolumes {
310-
311-
additionalVolumeMount := AdditionalVolumeMount(
312-
additionalVolumeRequest.Name,
313-
additionalVolumeRequest.ReadOnly,
314-
)
315-
316-
additionalVolume := corev1.Volume{
317-
Name: additionalVolumeMount.Name,
318-
VolumeSource: corev1.VolumeSource{
319-
PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{
320-
ClaimName: additionalVolumeRequest.ClaimName,
321-
ReadOnly: additionalVolumeMount.ReadOnly,
322-
},
323-
},
324-
}
325-
326-
// Create a set of all the requested containers,
327-
// then in the loops below when we attach the volume to a container,
328-
// we can safely remove that container name from the set.
329-
// This gives us a way to track the containers that are requested but not found.
330-
// This relies on `containers` and `initContainers` together being unique.
331-
// - https://github.com/kubernetes/api/blob/b40c1cacbb902b21a7e0c7bf0967321860c1a632/core/v1/types.go#L3895C27-L3896C33
332-
names := sets.New(additionalVolumeRequest.Containers...)
333-
allContainers := false
334-
// If the containers list is omitted, we add the volume to all containers
335-
if additionalVolumeRequest.Containers == nil {
336-
allContainers = true
337-
}
338-
339-
for i := range template.Spec.Containers {
340-
if allContainers || names.Has(template.Spec.Containers[i].Name) {
341-
template.Spec.Containers[i].VolumeMounts = append(
342-
template.Spec.Containers[i].VolumeMounts,
343-
additionalVolumeMount)
344-
345-
names.Delete(template.Spec.Containers[i].Name)
346-
}
347-
}
348-
349-
for i := range template.Spec.InitContainers {
350-
if allContainers || names.Has(template.Spec.InitContainers[i].Name) {
351-
template.Spec.InitContainers[i].VolumeMounts = append(
352-
template.Spec.InitContainers[i].VolumeMounts,
353-
additionalVolumeMount)
354-
355-
names.Delete(template.Spec.InitContainers[i].Name)
356-
357-
}
358-
}
359-
360-
missingContainers = append(missingContainers, names.UnsortedList()...)
361-
362-
template.Spec.Volumes = append(
363-
template.Spec.Volumes,
364-
additionalVolume)
365-
}
366-
return missingContainers
367-
}

0 commit comments

Comments
 (0)