@@ -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