diff --git a/pkg/library/overrides/pods.go b/pkg/library/overrides/pods.go index cef49791d..cd0f45aa7 100644 --- a/pkg/library/overrides/pods.go +++ b/pkg/library/overrides/pods.go @@ -76,24 +76,27 @@ func ApplyPodOverrides(workspace *common.DevWorkspaceWithConfig, deployment *app return patched, nil } -func GetPodVolumeOverrides(workspace *dw.DevWorkspaceTemplateSpec) (*[]corev1.Volume, error) { - var volumeOverrides []corev1.Volume +func GetVolumesFromOverrides(workspace *dw.DevWorkspaceTemplateSpec) (map[string]bool, error) { + overrideVolumes := map[string]bool{} + overrides, err := getPodOverrides(workspace) if err != nil { - return &volumeOverrides, err + return nil, err } for _, override := range overrides { podSpecTemplate := corev1.PodTemplateSpec{} if err := json.Unmarshal(override.Raw, &podSpecTemplate); err != nil { - return &volumeOverrides, fmt.Errorf("error unmarshalling: %w", err) + return nil, fmt.Errorf("error unmarshalling: %w", err) } if podSpecTemplate.Spec.Volumes != nil { - volumeOverrides = append(volumeOverrides, podSpecTemplate.Spec.Volumes...) + for _, volume := range podSpecTemplate.Spec.Volumes { + overrideVolumes[volume.Name] = true + } } } - return &volumeOverrides, nil + return overrideVolumes, nil } // getPodOverrides returns PodTemplateSpecOverrides for every instance of the pod overrides attribute diff --git a/pkg/library/overrides/testdata/container-overrides/overrides-can-add-volumemount.yaml b/pkg/library/overrides/testdata/container-overrides/overrides-can-add-volumemount.yaml new file mode 100644 index 000000000..c80469276 --- /dev/null +++ b/pkg/library/overrides/testdata/container-overrides/overrides-can-add-volumemount.yaml @@ -0,0 +1,28 @@ +name: "Container overrides can add volumeMounts" + +input: + component: + name: test-component + attributes: + container-overrides: + volumeMounts: + - name: test-volume + mountPath: /test-volume/path + container: + image: test-image + container: + name: test-component + image: test-image + volumeMounts: + - name: my-volume + mountPath: /my-volume/path + +output: + container: + name: test-component + image: test-image + volumeMounts: + - name: test-volume + mountPath: /test-volume/path + - name: my-volume + mountPath: /my-volume/path diff --git a/pkg/library/overrides/testdata/container-overrides/container-defines-overrides-volumemount.yaml b/pkg/library/overrides/testdata/container-overrides/overrides-can-define-volumemount.yaml similarity index 85% rename from pkg/library/overrides/testdata/container-overrides/container-defines-overrides-volumemount.yaml rename to pkg/library/overrides/testdata/container-overrides/overrides-can-define-volumemount.yaml index 1c90e65ff..9e6111dbd 100644 --- a/pkg/library/overrides/testdata/container-overrides/container-defines-overrides-volumemount.yaml +++ b/pkg/library/overrides/testdata/container-overrides/overrides-can-define-volumemount.yaml @@ -1,4 +1,4 @@ -name: "Applies volumeMount overrides from container-overrides attribute" +name: "Container overrides can add define volumeMounts" input: component: diff --git a/pkg/library/overrides/testdata/container-overrides/overrides-can-override-volumemount.yaml b/pkg/library/overrides/testdata/container-overrides/overrides-can-override-volumemount.yaml new file mode 100644 index 000000000..9c6b3081a --- /dev/null +++ b/pkg/library/overrides/testdata/container-overrides/overrides-can-override-volumemount.yaml @@ -0,0 +1,28 @@ +name: "Container overrides can override existing volumeMounts" + +input: + component: + name: test-component + attributes: + container-overrides: + volumeMounts: + # patchMergeKey is mountPath + - mountPath: /my-volume/path + subPath: test-subpath + container: + image: test-image + container: + name: test-component + image: test-image + volumeMounts: + - name: my-volume + mountPath: /my-volume/path + +output: + container: + name: test-component + image: test-image + volumeMounts: + - name: my-volume + mountPath: /my-volume/path + subPath: test-subpath diff --git a/pkg/provision/storage/commonStorage.go b/pkg/provision/storage/commonStorage.go index c2d7cdaf6..7482111d3 100644 --- a/pkg/provision/storage/commonStorage.go +++ b/pkg/provision/storage/commonStorage.go @@ -146,12 +146,12 @@ func (p *CommonStorageProvisioner) rewriteContainerVolumeMounts(workspaceId, pvc } // Containers in podAdditions may reference volumes defined in pod overrides, and this is not an error - overridesVolumes, err := overrides.GetPodVolumeOverrides(workspace) + overridesVolumes, err := overrides.GetVolumesFromOverrides(workspace) if err != nil { return err } - for _, overridesVolume := range *overridesVolumes { - additionalVolumes[overridesVolume.Name] = true + for key, value := range overridesVolumes { + additionalVolumes[key] = value } // Add implicit projects volume to support mountSources, if needed diff --git a/pkg/provision/storage/perWorkspaceStorage.go b/pkg/provision/storage/perWorkspaceStorage.go index 9a097bdab..795386d03 100644 --- a/pkg/provision/storage/perWorkspaceStorage.go +++ b/pkg/provision/storage/perWorkspaceStorage.go @@ -111,12 +111,12 @@ func (p *PerWorkspaceStorageProvisioner) rewriteContainerVolumeMounts(workspaceI } // Containers in podAdditions may reference volumes defined in pod overrides, and this is not an error - overridesVolumes, err := overrides.GetPodVolumeOverrides(workspace) + overridesVolumes, err := overrides.GetVolumesFromOverrides(workspace) if err != nil { return err } - for _, overridesVolume := range *overridesVolumes { - additionalVolumes[overridesVolume.Name] = true + for key, value := range overridesVolumes { + additionalVolumes[key] = value } // Add implicit projects volume to support mountSources, if needed