Skip to content

Commit 22ab593

Browse files
committed
Issue event for missing containers
1 parent 6f650ea commit 22ab593

File tree

3 files changed

+59
-5
lines changed

3 files changed

+59
-5
lines changed

internal/controller/postgrescluster/instance.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1255,7 +1255,12 @@ func (r *Reconciler) reconcileInstance(
12551255

12561256
// mount additional volumes to the Postgres instance containers
12571257
if err == nil && spec.Volumes != nil && len(spec.Volumes.Additional) > 0 {
1258-
addAdditionalVolumesToSpecifiedContainers(&instance.Spec.Template, spec.Volumes.Additional)
1258+
missingContainers := addAdditionalVolumesToSpecifiedContainers(&instance.Spec.Template, spec.Volumes.Additional)
1259+
1260+
if len(missingContainers) > 0 {
1261+
r.Recorder.Eventf(cluster, corev1.EventTypeWarning, "MissingContainers",
1262+
"The following containers were specified for additional volumes but are missing: %s.", missingContainers)
1263+
}
12591264
}
12601265

12611266
if err == nil {

internal/controller/postgrescluster/util.go

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,9 @@ func AdditionalVolumeMount(name string, readOnly bool) corev1.VolumeMount {
303303
// as `volumes-<additionalVolumeRequest.Name>`
304304
// and adds the directory to the path `/volumes/<additionalVolumeRequest.Name>`
305305
func addAdditionalVolumesToSpecifiedContainers(template *corev1.PodTemplateSpec,
306-
additionalVolumes []v1beta1.AdditionalVolume) {
306+
additionalVolumes []v1beta1.AdditionalVolume) []string {
307307

308+
missingContainers := []string{}
308309
for _, additionalVolumeRequest := range additionalVolumes {
309310

310311
additionalVolumeMount := AdditionalVolumeMount(
@@ -323,25 +324,40 @@ func addAdditionalVolumesToSpecifiedContainers(template *corev1.PodTemplateSpec,
323324
}
324325

325326
names := sets.New(additionalVolumeRequest.Containers...)
327+
allContainers := false
328+
if names.Len() == 0 {
329+
allContainers = true
330+
}
326331

327332
for i := range template.Spec.Containers {
328-
if names.Len() == 0 || names.Has(template.Spec.Containers[i].Name) {
333+
if allContainers || names.Has(template.Spec.Containers[i].Name) {
329334
template.Spec.Containers[i].VolumeMounts = append(
330335
template.Spec.Containers[i].VolumeMounts,
331336
additionalVolumeMount)
337+
338+
if names.Has(template.Spec.Containers[i].Name) {
339+
names.Delete(template.Spec.Containers[i].Name)
340+
}
332341
}
333342
}
334343

335344
for i := range template.Spec.InitContainers {
336-
if names.Len() == 0 || names.Has(template.Spec.InitContainers[i].Name) {
345+
if allContainers || names.Has(template.Spec.InitContainers[i].Name) {
337346
template.Spec.InitContainers[i].VolumeMounts = append(
338347
template.Spec.InitContainers[i].VolumeMounts,
339348
additionalVolumeMount)
349+
350+
if names.Has(template.Spec.InitContainers[i].Name) {
351+
names.Delete(template.Spec.InitContainers[i].Name)
352+
}
340353
}
341354
}
342355

356+
missingContainers = append(missingContainers, names.UnsortedList()...)
357+
343358
template.Spec.Volumes = append(
344359
template.Spec.Volumes,
345360
additionalVolume)
346361
}
362+
return missingContainers
347363
}

internal/controller/postgrescluster/util_test.go

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,7 @@ func TestAddAdditionalVolumesToSpecifiedContainers(t *testing.T) {
399399
expectedContainers string
400400
expectedInitContainers string
401401
expectedVolumes string
402+
expectedMissing []string
402403
}{{
403404
tcName: "all",
404405
additionalVolumes: []v1beta1.AdditionalVolume{{
@@ -429,6 +430,7 @@ func TestAddAdditionalVolumesToSpecifiedContainers(t *testing.T) {
429430
expectedVolumes: `- name: volumes-required
430431
persistentVolumeClaim:
431432
claimName: required`,
433+
expectedMissing: []string{},
432434
}, {
433435
tcName: "multiple additional volumes",
434436
additionalVolumes: []v1beta1.AdditionalVolume{{
@@ -474,6 +476,7 @@ func TestAddAdditionalVolumesToSpecifiedContainers(t *testing.T) {
474476
- name: volumes-other
475477
persistentVolumeClaim:
476478
claimName: also`,
479+
expectedMissing: []string{},
477480
}, {
478481
tcName: "database and startup containers only",
479482
additionalVolumes: []v1beta1.AdditionalVolume{{
@@ -498,6 +501,32 @@ func TestAddAdditionalVolumesToSpecifiedContainers(t *testing.T) {
498501
expectedVolumes: `- name: volumes-required
499502
persistentVolumeClaim:
500503
claimName: required`,
504+
expectedMissing: []string{},
505+
}, {
506+
tcName: "container is missing",
507+
additionalVolumes: []v1beta1.AdditionalVolume{{
508+
Containers: []string{"database", "startup", "missing", "container"},
509+
ClaimName: "required",
510+
Name: "required",
511+
}},
512+
expectedContainers: `- name: database
513+
resources: {}
514+
volumeMounts:
515+
- mountPath: /volumes/required
516+
name: volumes-required
517+
- name: other
518+
resources: {}`,
519+
expectedInitContainers: `- name: startup
520+
resources: {}
521+
volumeMounts:
522+
- mountPath: /volumes/required
523+
name: volumes-required
524+
- name: config
525+
resources: {}`,
526+
expectedVolumes: `- name: volumes-required
527+
persistentVolumeClaim:
528+
claimName: required`,
529+
expectedMissing: []string{"missing", "container"},
501530
}, {
502531
tcName: "readonly",
503532
additionalVolumes: []v1beta1.AdditionalVolume{{
@@ -522,14 +551,15 @@ func TestAddAdditionalVolumesToSpecifiedContainers(t *testing.T) {
522551
persistentVolumeClaim:
523552
claimName: required
524553
readOnly: true`,
554+
expectedMissing: []string{},
525555
}}
526556

527557
for _, tc := range testCases {
528558
t.Run(tc.tcName, func(t *testing.T) {
529559

530560
copyPodTemplate := podTemplate.DeepCopy()
531561

532-
addAdditionalVolumesToSpecifiedContainers(
562+
missingContainers := addAdditionalVolumesToSpecifiedContainers(
533563
copyPodTemplate,
534564
tc.additionalVolumes,
535565
)
@@ -543,6 +573,9 @@ func TestAddAdditionalVolumesToSpecifiedContainers(t *testing.T) {
543573
assert.Assert(t, cmp.MarshalMatches(
544574
copyPodTemplate.Spec.Volumes,
545575
tc.expectedVolumes))
576+
assert.Assert(t, cmp.DeepEqual(
577+
missingContainers,
578+
tc.expectedMissing))
546579
})
547580
}
548581
}

0 commit comments

Comments
 (0)