Skip to content

Commit 743da94

Browse files
authored
fix: auto-mount path collisions (#1378)
* fix: auto-mount path collisions Signed-off-by: Oleksii Kurinnyi <[email protected]> * fixup! fix: auto-mount path collisions Signed-off-by: Oleksii Kurinnyi <[email protected]> * fix: merge projected volumes Signed-off-by: Oleksii Kurinnyi <[email protected]> * fixup! fix: merge projected volumes Signed-off-by: Oleksii Kurinnyi <[email protected]> --------- Signed-off-by: Oleksii Kurinnyi <[email protected]>
1 parent eecf5c2 commit 743da94

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

pkg/provision/automount/projected.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"strings"
2020

2121
"github.com/devfile/devworkspace-operator/pkg/common"
22+
"github.com/devfile/devworkspace-operator/pkg/dwerrors"
2223
corev1 "k8s.io/api/core/v1"
2324
"k8s.io/utils/pointer"
2425
)
@@ -53,6 +54,9 @@ func mergeProjectedVolumes(resources *Resources) (*Resources, error) {
5354
volumeNameToVolume[volume.Name] = volume
5455
}
5556

57+
// Map of merged volume names -> bool, for not merging the same volume twice
58+
// This can happen due to different subpath volume mounts, where the mount path is the same. In this case, there should be only one volume.
59+
mergedVolumeNames := map[string]bool{}
5660
for _, mountPath := range mountPathOrder {
5761
volumeMounts := mountPathToVolumeMounts[mountPath]
5862
switch len(volumeMounts) {
@@ -62,7 +66,12 @@ func mergeProjectedVolumes(resources *Resources) (*Resources, error) {
6266
// No projected volume necessary
6367
mergedResources.VolumeMounts = append(mergedResources.VolumeMounts, volumeMounts[0])
6468
volume := volumeNameToVolume[volumeMounts[0].Name]
65-
mergedResources.Volumes = append(mergedResources.Volumes, volume)
69+
70+
_, isMerged := mergedVolumeNames[volume.Name]
71+
if !isMerged {
72+
mergedResources.Volumes = append(mergedResources.Volumes, volume)
73+
mergedVolumeNames[volume.Name] = true
74+
}
6675
default:
6776
vm, vol, err := generateProjectedVolume(mountPath, volumeMounts, volumeNameToVolume)
6877
if err != nil {
@@ -164,7 +173,9 @@ func checkCanUseProjectedVolumes(volumeMounts []corev1.VolumeMount, volumeNameTo
164173
for _, vm := range volumeMounts {
165174
problemNames = append(problemNames, formatVolumeDescription(volumeNameToVolume[vm.Name]))
166175
}
167-
return fmt.Errorf("auto-mounted volumes from (%s) have the same mount path", strings.Join(problemNames, ", "))
176+
return &dwerrors.FailError{
177+
Message: fmt.Sprintf("auto-mounted volumes from (%s) have the same mount path", strings.Join(problemNames, ", ")),
178+
}
168179
}
169180
return nil
170181
}

0 commit comments

Comments
 (0)