From 0fd2aa08bd70d1c869e0dca136ca0c487bfcdefe Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Fri, 25 Mar 2022 21:57:12 +0300 Subject: [PATCH] fix: correctly escape '.' in volume names Volume name is derived from the mount path. Signed-off-by: Andrey Smirnov --- .../pkg/controllers/config/k8s_control_plane_test.go | 10 ++++++++++ .../config/types/v1alpha1/v1alpha1_provider.go | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/internal/app/machined/pkg/controllers/config/k8s_control_plane_test.go b/internal/app/machined/pkg/controllers/config/k8s_control_plane_test.go index cae4cd811..989334567 100644 --- a/internal/app/machined/pkg/controllers/config/k8s_control_plane_test.go +++ b/internal/app/machined/pkg/controllers/config/k8s_control_plane_test.go @@ -172,6 +172,10 @@ func (suite *K8sControlPlaneSuite) TestReconcileExtraVolumes() { VolumeHostPath: "/var/lib", VolumeMountPath: "/var/foo/", }, + { + VolumeHostPath: "/var/lib/a.foo", + VolumeMountPath: "/var/foo/b.foo", + }, }, }, }, @@ -187,6 +191,12 @@ func (suite *K8sControlPlaneSuite) TestReconcileExtraVolumes() { MountPath: "/var/foo/", ReadOnly: false, }, + { + Name: "var-foo-b-foo", + HostPath: "/var/lib/a.foo", + MountPath: "/var/foo/b.foo", + ReadOnly: false, + }, }, apiServerCfg.ExtraVolumes, ) } diff --git a/pkg/machinery/config/types/v1alpha1/v1alpha1_provider.go b/pkg/machinery/config/types/v1alpha1/v1alpha1_provider.go index 6e3b2f444..02aacaf56 100644 --- a/pkg/machinery/config/types/v1alpha1/v1alpha1_provider.go +++ b/pkg/machinery/config/types/v1alpha1/v1alpha1_provider.go @@ -1252,9 +1252,11 @@ func (v VolumeMountConfig) MountPath() string { return v.VolumeMountPath } +var volumeNameSanitizer = strings.NewReplacer("/", "-", "_", "-", ".", "-") + // Name implements the config.VolumeMount interface. func (v VolumeMountConfig) Name() string { - return strings.Trim(strings.ReplaceAll(strings.ReplaceAll(v.VolumeMountPath, "/", "-"), "_", "-"), "-") + return strings.Trim(volumeNameSanitizer.Replace(v.VolumeMountPath), "-") } // ReadOnly implements the config.VolumeMount interface.