Skip to content

Commit 91dc9a1

Browse files
author
Per Goncalves da Silva
committed
Ensure volumes with volume mounts referencing protected cert paths get replaced
Signed-off-by: Per Goncalves da Silva <[email protected]>
1 parent ca311f1 commit 91dc9a1

File tree

2 files changed

+41
-16
lines changed

2 files changed

+41
-16
lines changed

internal/operator-controller/rukpak/render/registryv1/generators/generators.go

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,9 @@ const (
3131
tlsKeyPath = "tls.key"
3232
)
3333

34-
var certVolumeMounts = map[string]corev1.VolumeMount{
35-
"webhook-cert": {
36-
Name: "webhook-cert",
37-
MountPath: "/tmp/k8s-webhook-server/serving-certs",
38-
},
34+
// volume mount name -> mount path
35+
var certVolumeMounts = map[string]string{
36+
"webhook-cert": "/tmp/k8s-webhook-server/serving-certs",
3937
}
4038

4139
// BundleCSVDeploymentGenerator generates all deployments defined in rv1's cluster service version (CSV). The generated
@@ -481,11 +479,20 @@ func getWebhookServicePort(wh v1alpha1.WebhookDescription) corev1.ServicePort {
481479
}
482480

483481
func addCertVolumesToDeployment(dep *appsv1.Deployment, certSecretInfo render.CertSecretInfo) {
482+
volumeMountsToReplace := sets.New(slices.Collect(maps.Keys(certVolumeMounts))...)
483+
certVolumeMountPaths := sets.New(slices.Collect(maps.Values(certVolumeMounts))...)
484+
for _, c := range dep.Spec.Template.Spec.Containers {
485+
for _, containerVolumeMount := range c.VolumeMounts {
486+
if certVolumeMountPaths.Has(containerVolumeMount.MountPath) {
487+
volumeMountsToReplace.Insert(containerVolumeMount.Name)
488+
}
489+
}
490+
}
491+
484492
// update pod volumes
485493
dep.Spec.Template.Spec.Volumes = slices.Concat(
486494
slices.DeleteFunc(dep.Spec.Template.Spec.Volumes, func(v corev1.Volume) bool {
487-
_, ok := certVolumeMounts[v.Name]
488-
return ok
495+
return volumeMountsToReplace.Has(v.Name)
489496
}),
490497
[]corev1.Volume{
491498
{
@@ -513,15 +520,18 @@ func addCertVolumesToDeployment(dep *appsv1.Deployment, certSecretInfo render.Ce
513520
for i := range dep.Spec.Template.Spec.Containers {
514521
dep.Spec.Template.Spec.Containers[i].VolumeMounts = slices.Concat(
515522
slices.DeleteFunc(dep.Spec.Template.Spec.Containers[i].VolumeMounts, func(v corev1.VolumeMount) bool {
516-
_, ok := certVolumeMounts[v.Name]
517-
return ok
523+
return volumeMountsToReplace.Has(v.Name)
518524
}),
519-
slices.SortedFunc(
520-
maps.Values(certVolumeMounts),
521-
func(a corev1.VolumeMount, b corev1.VolumeMount) int {
522-
return cmp.Compare(a.Name, b.Name)
523-
},
524-
),
525+
func() []corev1.VolumeMount {
526+
volumeMounts := make([]corev1.VolumeMount, 0, len(certVolumeMounts))
527+
for _, name := range slices.Sorted(maps.Keys(certVolumeMounts)) {
528+
volumeMounts = append(volumeMounts, corev1.VolumeMount{
529+
Name: name,
530+
MountPath: certVolumeMounts[name],
531+
})
532+
}
533+
return volumeMounts
534+
}(),
525535
)
526536
}
527537
}

internal/operator-controller/rukpak/render/registryv1/generators/generators_test.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,19 +194,34 @@ func Test_BundleCSVDeploymentGenerator_WithCertWithCertProvider_Succeeds(t *test
194194
EmptyDir: &corev1.EmptyDirVolumeSource{},
195195
},
196196
},
197-
// expect webhook-cert volume to be injected
197+
// this volume should be replaced by the webhook-cert volume
198+
// because it has a volume mount targeting the protected path
199+
// /tmp/k8s-webhook-server/serving-certs
200+
{
201+
Name: "some-webhook-cert-mount",
202+
VolumeSource: corev1.VolumeSource{
203+
EmptyDir: &corev1.EmptyDirVolumeSource{},
204+
},
205+
},
198206
},
199207
Containers: []corev1.Container{
200208
{
201209
Name: "container-1",
202210
VolumeMounts: []corev1.VolumeMount{
211+
// the mount path for this volume mount will be replaced with
212+
// /tmp/k8s-webhook-server/serving-certs
203213
{
204214
Name: "webhook-cert",
205215
MountPath: "/webhook-cert-path",
206216
}, {
207217
Name: "some-other-mount",
208218
MountPath: "/some/other/mount/path",
209219
},
220+
// this volume mount will be removed
221+
{
222+
Name: "some-webhook-cert-mount",
223+
MountPath: "/tmp/k8s-webhook-server/serving-certs",
224+
},
210225
},
211226
},
212227
{

0 commit comments

Comments
 (0)