Skip to content

Commit 551324d

Browse files
authored
Merge pull request #1892 from FabianKramm/master
fix: fixed persist paths not working in AWS
2 parents 4395bde + 34572ef commit 551324d

File tree

44 files changed

+687
-657
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+687
-657
lines changed

.github/workflows/e2e-tests.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,4 @@ jobs:
5555
- name: e2e test
5656
working-directory: ./e2e
5757
run: |
58-
go test -v -ginkgo.v
58+
go test -v -ginkgo.v -timeout 3600s

cmd/attach.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"github.com/loft-sh/devspace/pkg/devspace/plugin"
88
"github.com/loft-sh/devspace/pkg/devspace/services/targetselector"
99
"github.com/loft-sh/devspace/pkg/util/factory"
10-
"github.com/loft-sh/devspace/pkg/util/ptr"
1110
"github.com/pkg/errors"
1211

1312
"github.com/spf13/cobra"
@@ -99,18 +98,16 @@ func (cmd *AttachCmd) Run(f factory.Factory, cobraCmd *cobra.Command, args []str
9998
return err
10099
}
101100

102-
// Build params
103-
options := targetselector.NewOptionsFromFlags(cmd.Container, cmd.LabelSelector, cmd.Namespace, cmd.Pod, cmd.Pick)
104-
105101
// get image selector if specified
106102
imageSelector, err := getImageSelector(client, configLoader, configOptions, cmd.Image, cmd.ImageSelector, log)
107103
if err != nil {
108104
return err
109105
}
110106

111-
// set image selector
112-
options.ImageSelector = imageSelector
113-
options.Wait = ptr.Bool(false)
107+
// Build params
108+
options := targetselector.NewOptionsFromFlags(cmd.Container, cmd.LabelSelector, imageSelector, cmd.Namespace, cmd.Pod).
109+
WithPick(cmd.Pick).
110+
WithWait(false)
114111

115112
// Start attach
116113
return f.NewServicesClient(nil, nil, client, log).StartAttach(options, make(chan error))

cmd/dev.go

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package cmd
22

33
import (
44
"fmt"
5+
"github.com/loft-sh/devspace/pkg/devspace/kubectl/selector"
6+
"github.com/loft-sh/devspace/pkg/util/stringutil"
57
"io"
68
"os"
79
"os/exec"
@@ -10,7 +12,6 @@ import (
1012
"time"
1113

1214
runtimevar "github.com/loft-sh/devspace/pkg/devspace/config/loader/variable/runtime"
13-
"github.com/loft-sh/devspace/pkg/devspace/imageselector"
1415
"github.com/loft-sh/devspace/pkg/util/command"
1516

1617
"github.com/loft-sh/devspace/pkg/devspace/config"
@@ -624,24 +625,24 @@ func (cmd *DevCmd) startOutput(configInterface config.Config, dependencies []typ
624625
}
625626
return 0, nil
626627
} else {
627-
selectorOptions := targetselector.NewDefaultOptions().ApplyCmdParameter("", "", cmd.Namespace, "")
628+
selectorOptions := targetselector.NewEmptyOptions().
629+
WithContainerFilter(selector.FilterNonRunningContainers).
630+
WithPick(true).
631+
WithNamespace(cmd.Namespace)
628632
if config.Dev.Terminal != nil {
629-
selectorOptions = selectorOptions.ApplyConfigParameter(config.Dev.Terminal.LabelSelector, config.Dev.Terminal.Namespace, config.Dev.Terminal.ContainerName, "")
630-
}
633+
var imageSelectors []string
634+
if config.Dev.Terminal.ImageSelector != "" {
635+
imageSelector, err := runtimevar.NewRuntimeResolver(true).FillRuntimeVariablesAsImageSelector(config.Dev.Terminal.ImageSelector, configInterface, dependencies)
636+
if err != nil {
637+
return 0, err
638+
}
631639

632-
var imageSelectors []imageselector.ImageSelector
633-
if config.Dev.Terminal != nil && config.Dev.Terminal.ImageSelector != "" {
634-
imageSelector, err := runtimevar.NewRuntimeResolver(true).FillRuntimeVariablesAsImageSelector(config.Dev.Terminal.ImageSelector, configInterface, dependencies)
635-
if err != nil {
636-
return 0, err
640+
imageSelectors = []string{imageSelector.Image}
637641
}
638-
639-
imageSelectors = append(imageSelectors, *imageSelector)
642+
selectorOptions = selectorOptions.ApplyConfigParameter(config.Dev.Terminal.ContainerName, config.Dev.Terminal.LabelSelector, imageSelectors, config.Dev.Terminal.Namespace, "")
640643
}
641644

642645
cmd.log.Info("Terminal: Waiting for containers to start...")
643-
selectorOptions.ImageSelector = imageSelectors
644-
645646
code, err := servicesClient.StartTerminal(selectorOptions, args, cmd.WorkingDirectory, exitChan, true, cmd.TerminalReconnect, stdout, stderr, stdin)
646647
if services.IsUnexpectedExitCode(code) {
647648
cmd.log.Warnf("Command terminated with exit code %d", code)
@@ -758,7 +759,7 @@ func GetPaths(config *latest.Config) []string {
758759
}
759760
}
760761

761-
return removeDuplicates(paths)
762+
return stringutil.RemoveDuplicates(paths)
762763
}
763764

764765
func (cmd *DevCmd) loadConfig(configOptions *loader.ConfigOptions) (config.Config, error) {
@@ -823,25 +824,6 @@ func defaultStdStreams(stdout io.Writer, stderr io.Writer, stdin io.Reader) (io.
823824
return stdout, stderr, stdin
824825
}
825826

826-
func removeDuplicates(arr []string) []string {
827-
newArr := []string{}
828-
for _, v := range arr {
829-
if !contains(newArr, v) {
830-
newArr = append(newArr, v)
831-
}
832-
}
833-
return newArr
834-
}
835-
836-
func contains(haystack []string, needle string) bool {
837-
for _, v := range haystack {
838-
if v == needle {
839-
return true
840-
}
841-
}
842-
return false
843-
}
844-
845827
func updateLastKubeContext(configLoader loader.ConfigLoader, client kubectl.Client, generatedConfig *generated.Config) error {
846828
// Update generated if we deploy the application
847829
if generatedConfig != nil {

cmd/enter.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,17 +117,15 @@ func (cmd *EnterCmd) Run(f factory.Factory, cobraCmd *cobra.Command, args []stri
117117
return err
118118
}
119119

120-
// Build params
121-
selectorOptions := targetselector.NewOptionsFromFlags(cmd.Container, cmd.LabelSelector, cmd.Namespace, cmd.Pod, cmd.Pick)
122-
123120
// get image selector if specified
124121
imageSelector, err := getImageSelector(client, configLoader, configOptions, cmd.Image, cmd.ImageSelector, logger)
125122
if err != nil {
126123
return err
127124
}
128125

129-
// set image selector
130-
selectorOptions.ImageSelector = imageSelector
126+
// Build params
127+
selectorOptions := targetselector.NewOptionsFromFlags(cmd.Container, cmd.LabelSelector, imageSelector, cmd.Namespace, cmd.Pod).
128+
WithPick(cmd.Pick)
131129

132130
// Start terminal
133131
stdout, stderr, stdin := defaultStdStreams(cmd.Stdout, cmd.Stderr, cmd.Stdin)

cmd/logs.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -116,17 +116,15 @@ func (cmd *LogsCmd) RunLogs(f factory.Factory) error {
116116
return err
117117
}
118118

119-
// Build options
120-
options := targetselector.NewOptionsFromFlags(cmd.Container, cmd.LabelSelector, cmd.Namespace, cmd.Pod, cmd.Pick)
121-
122119
// get image selector if specified
123120
imageSelector, err := getImageSelector(client, configLoader, configOptions, cmd.Image, cmd.ImageSelector, log)
124121
if err != nil {
125122
return err
126123
}
127124

128-
// set image selector
129-
options.ImageSelector = imageSelector
125+
// Build options
126+
options := targetselector.NewOptionsFromFlags(cmd.Container, cmd.LabelSelector, imageSelector, cmd.Namespace, cmd.Pod).
127+
WithPick(cmd.Pick)
130128

131129
// Start terminal
132130
err = f.NewServicesClient(nil, nil, client, log).StartLogs(options, cmd.Follow, int64(cmd.LastAmountOfLines), cmd.Wait)
@@ -137,8 +135,8 @@ func (cmd *LogsCmd) RunLogs(f factory.Factory) error {
137135
return nil
138136
}
139137

140-
func getImageSelector(client kubectl.Client, configLoader loader.ConfigLoader, configOptions *loader.ConfigOptions, image, imageSelector string, log log.Logger) ([]imageselector.ImageSelector, error) {
141-
var imageSelectors []imageselector.ImageSelector
138+
func getImageSelector(client kubectl.Client, configLoader loader.ConfigLoader, configOptions *loader.ConfigOptions, image, imageSelector string, log log.Logger) ([]string, error) {
139+
var imageSelectors []string
142140
if imageSelector != "" {
143141
var (
144142
err error
@@ -166,7 +164,7 @@ func getImageSelector(client kubectl.Client, configLoader loader.ConfigLoader, c
166164
return nil, err
167165
}
168166

169-
imageSelectors = append(imageSelectors, *resolved)
167+
imageSelectors = append(imageSelectors, resolved.Image)
170168
} else if image != "" {
171169
log.Warnf("Flag --image is deprecated, please use --image-selector instead")
172170

@@ -193,7 +191,7 @@ func getImageSelector(client kubectl.Client, configLoader loader.ConfigLoader, c
193191
return nil, fmt.Errorf("couldn't find an image with name %s in devspace config", image)
194192
}
195193

196-
imageSelectors = append(imageSelectors, *imageSelector)
194+
imageSelectors = append(imageSelectors, imageSelector.Image)
197195
}
198196

199197
return imageSelectors, nil

cmd/restart.go

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,15 @@ package cmd
33
import (
44
"context"
55
"fmt"
6+
"github.com/loft-sh/devspace/cmd/flags"
67
runtimevar "github.com/loft-sh/devspace/pkg/devspace/config/loader/variable/runtime"
7-
"github.com/loft-sh/devspace/pkg/devspace/imageselector"
8-
98
"github.com/loft-sh/devspace/pkg/devspace/dependency"
109
"github.com/loft-sh/devspace/pkg/devspace/hook"
1110
"github.com/loft-sh/devspace/pkg/devspace/kubectl"
1211
"github.com/loft-sh/devspace/pkg/devspace/plugin"
1312
"github.com/loft-sh/devspace/pkg/devspace/services/inject"
1413
"github.com/loft-sh/devspace/pkg/devspace/services/targetselector"
1514
"github.com/loft-sh/devspace/pkg/util/factory"
16-
"github.com/loft-sh/devspace/pkg/util/ptr"
17-
18-
"github.com/loft-sh/devspace/cmd/flags"
1915
"github.com/loft-sh/devspace/pkg/util/log"
2016
"github.com/pkg/errors"
2117

@@ -85,7 +81,7 @@ func (cmd *RestartCmd) Run(f factory.Factory) error {
8581
return errors.Wrap(err, "create kube client")
8682
}
8783

88-
return restartContainer(client, targetselector.NewOptionsFromFlags(cmd.Container, cmd.LabelSelector, cmd.Namespace, cmd.Pod, cmd.Pick), cmd.log)
84+
return restartContainer(client, targetselector.NewOptionsFromFlags(cmd.Container, cmd.LabelSelector, nil, cmd.Namespace, cmd.Pod).WithPick(cmd.Pick), cmd.log)
8985
}
9086

9187
log.StartFileLogging()
@@ -149,17 +145,19 @@ func (cmd *RestartCmd) Run(f factory.Factory) error {
149145
}
150146

151147
// create target selector options
152-
options := targetselector.NewOptionsFromFlags("", "", cmd.Namespace, "", cmd.Pick).ApplyConfigParameter(syncPath.LabelSelector, syncPath.Namespace, syncPath.ContainerName, "")
153-
options.ImageSelector = []imageselector.ImageSelector{}
148+
var imageSelector []string
154149
if syncPath.ImageSelector != "" {
155-
imageSelector, err := runtimevar.NewRuntimeResolver(true).FillRuntimeVariablesAsImageSelector(syncPath.ImageSelector, configInterface, dep)
150+
imageSelectorObject, err := runtimevar.NewRuntimeResolver(true).FillRuntimeVariablesAsImageSelector(syncPath.ImageSelector, configInterface, dep)
156151
if err != nil {
157152
return err
158153
}
159154

160-
options.ImageSelector = append(options.ImageSelector, *imageSelector)
155+
imageSelector = []string{imageSelectorObject.Image}
161156
}
162157

158+
options := targetselector.NewOptionsFromFlags("", "", nil, cmd.Namespace, "").
159+
WithPick(cmd.Pick).
160+
ApplyConfigParameter(syncPath.ContainerName, syncPath.LabelSelector, imageSelector, syncPath.Namespace, "")
163161
err = restartContainer(client, options, cmd.log)
164162
if err != nil {
165163
return err
@@ -179,8 +177,8 @@ func (cmd *RestartCmd) Run(f factory.Factory) error {
179177
}
180178

181179
func restartContainer(client kubectl.Client, options targetselector.Options, log log.Logger) error {
182-
options.Wait = ptr.Bool(false)
183-
container, err := targetselector.NewTargetSelector(client).SelectSingleContainer(context.TODO(), options, log)
180+
options = options.WithWait(false)
181+
container, err := targetselector.GlobalTargetSelector.SelectSingleContainer(context.TODO(), client, options, log)
184182
if err != nil {
185183
return errors.Errorf("Error selecting pod: %v", err)
186184
}

cmd/sync.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -180,17 +180,16 @@ func (cmd *SyncCmd) Run(f factory.Factory) error {
180180
return err
181181
}
182182

183-
// Build params
184-
options := targetselector.NewOptionsFromFlags(cmd.Container, cmd.LabelSelector, cmd.Namespace, cmd.Pod, cmd.Pick)
185183
// get image selector if specified
186184
imageSelector, err := getImageSelector(client, configLoader, configOptions, "", cmd.ImageSelector, logger)
187185
if err != nil {
188186
return err
189187
}
190188

191-
// set image selector
192-
options.ImageSelector = imageSelector
193-
options.Wait = &cmd.Wait
189+
// Build params
190+
options := targetselector.NewOptionsFromFlags(cmd.Container, cmd.LabelSelector, imageSelector, cmd.Namespace, cmd.Pod).
191+
WithPick(cmd.Pick).
192+
WithWait(cmd.Wait)
194193

195194
if cmd.DownloadOnly && cmd.UploadOnly {
196195
return errors.New("--upload-only cannot be used together with --download-only")
@@ -253,9 +252,8 @@ func (cmd *SyncCmd) Run(f factory.Factory) error {
253252
return errors.Wrap(err, "apply flags to sync config")
254253
}
255254

256-
options = options.ApplyConfigParameter(syncConfig.LabelSelector, syncConfig.Namespace, syncConfig.ContainerName, "")
257-
258255
// Start sync
256+
options = options.ApplyConfigParameter(syncConfig.ContainerName, syncConfig.LabelSelector, nil, syncConfig.Namespace, "")
259257
return f.NewServicesClient(configInterface, nil, client, logger).StartSyncFromCmd(options, syncConfig, cmd.Interrupt, cmd.NoWatch, cmd.Verbose)
260258
}
261259

docs/pages/configuration/development/replace-pods.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ dev:
251251
persistPaths:
252252
- path: /app
253253
# Optional path on the persistent volume to mount
254-
# volumePath: /my-volume/app
254+
# volumePath: my-volume/app
255255
# Optional name of the container to persist this path
256256
# containerName: my-container
257257
```
@@ -292,13 +292,13 @@ dev:
292292
- imageSelector: my-image/frontend
293293
persistPaths:
294294
- path: /app
295-
volumePath: /app
295+
volumePath: app
296296
persistenceOptions:
297297
name: my-pvc
298298
- imageSelector: my-image/backend
299299
persistPaths:
300300
- path: /backend
301-
volumePath: /app
301+
volumePath: app
302302
persistenceOptions:
303303
name: my-pvc
304304
readOnly: true

docs/pages/configuration/reference.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ replacePods: # struct[] | Which pods should be repl
356356
replaceImage: "" # string | The image that should be used for the pod
357357
persistPaths: # struct[] | Paths that should get persisted in the replaced pod
358358
- path: /app # string | The container path that should get persisted
359-
volumePath: /my-volume/app # string | Optional path on the persistent volume to mount
359+
volumePath: my-volume/app # string | Optional path on the persistent volume to mount
360360
containerName: "" # string | Optional container name in the replaced pod to persist the path
361361
readOnly: false # bool | If the path should get mounted read only
362362
skipPopulate: false # bool | If true, devspace will not try to pre-populate the path

docs/versioned_docs/version-5.17/configuration/development/replace-pods.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ dev:
251251
persistPaths:
252252
- path: /app
253253
# Optional path on the persistent volume to mount
254-
# volumePath: /my-volume/app
254+
# volumePath: my-volume/app
255255
# Optional name of the container to persist this path
256256
# containerName: my-container
257257
```
@@ -281,13 +281,13 @@ dev:
281281
- imageSelector: my-image/frontend
282282
persistPaths:
283283
- path: /app
284-
volumePath: /app
284+
volumePath: app
285285
persistenceOptions:
286286
name: my-pvc
287287
- imageSelector: my-image/backend
288288
persistPaths:
289289
- path: /backend
290-
volumePath: /app
290+
volumePath: app
291291
persistenceOptions:
292292
name: my-pvc
293293
readOnly: true

0 commit comments

Comments
 (0)