Skip to content

Commit 00ba0ac

Browse files
committed
feat: add --image-selector flag to sync command
1 parent c35648b commit 00ba0ac

File tree

4 files changed

+23
-13
lines changed

4 files changed

+23
-13
lines changed

cmd/sync.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ type SyncCmd struct {
2929
*flags.GlobalFlags
3030

3131
LabelSelector string
32+
ImageSelector string
3233
Container string
3334
Pod string
3435
Pick bool
@@ -82,6 +83,7 @@ devspace sync --container-path=/my-path
8283
syncCmd.Flags().StringVarP(&cmd.Container, "container", "c", "", "Container name within pod where to sync to")
8384
syncCmd.Flags().StringVar(&cmd.Pod, "pod", "", "Pod to sync to")
8485
syncCmd.Flags().StringVarP(&cmd.LabelSelector, "label-selector", "l", "", "Comma separated key=value selector list (e.g. release=test)")
86+
syncCmd.Flags().StringVar(&cmd.ImageSelector, "image-selector", "", "The image to search a pod for (e.g. nginx, nginx:latest, ${runtime.images.app}, nginx:${runtime.images.app.tag})")
8587
syncCmd.Flags().BoolVar(&cmd.Pick, "pick", true, "Select a pod")
8688

8789
syncCmd.Flags().StringSliceVarP(&cmd.Exclude, "exclude", "e", []string{}, "Exclude directory from sync")
@@ -176,6 +178,14 @@ func (cmd *SyncCmd) Run(f factory.Factory) error {
176178

177179
// Build params
178180
options := targetselector.NewOptionsFromFlags(cmd.Container, cmd.LabelSelector, cmd.Namespace, cmd.Pod, cmd.Pick)
181+
// get image selector if specified
182+
imageSelector, err := getImageSelector(client, configLoader, configOptions, "", cmd.ImageSelector, logger)
183+
if err != nil {
184+
return err
185+
}
186+
187+
// set image selector
188+
options.ImageSelector = imageSelector
179189
options.Wait = ptr.Bool(false)
180190
if cmd.DownloadOnly && cmd.UploadOnly {
181191
return errors.New("--upload-only cannot be used together with --download-only")
@@ -266,7 +276,7 @@ func (cmd *SyncCmd) applyFlagsToSyncConfig(syncConfig *latest.SyncConfig) error
266276
if cmd.Container != "" {
267277
syncConfig.ContainerName = ""
268278
}
269-
if cmd.LabelSelector != "" || cmd.Pod != "" {
279+
if cmd.LabelSelector != "" || cmd.Pod != "" || cmd.ImageSelector != "" {
270280
syncConfig.LabelSelector = nil
271281
syncConfig.ImageSelector = ""
272282
}

e2e/tests/sync/sync.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,8 @@ var _ = DevSpaceDescribe("sync", func() {
7272
ImageSelector: "node:13.14-alpine",
7373
ContainerPath: "/app",
7474
UploadOnly: true,
75-
Polling: true,
76-
Exclude: []string{"file2.txt"},
77-
Interrupt: interrupt,
75+
// Polling: true,
76+
Interrupt: interrupt,
7877
}
7978

8079
// start the command
@@ -89,8 +88,7 @@ var _ = DevSpaceDescribe("sync", func() {
8988
}()
9089

9190
// wait until files were synced
92-
framework.ExpectRemoteFileContents("node:13.14-alpine", ns, "/app/file1.txt", "Hello World")
93-
framework.ExpectRemoteFileNotFound("node:13.14-alpine", ns, "/app/file2.txt")
91+
framework.ExpectRemoteFileContents("node:13.14-alpine", ns, "/app/file1.txt", "Hello World\n")
9492

9593
// stop sync
9694
stop()

e2e/tests/sync/testdata/no-config/file2.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

pkg/devspace/services/synccontroller/controller.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,19 @@ import (
44
"bytes"
55
"context"
66
"fmt"
7-
runtimevar "github.com/loft-sh/devspace/pkg/devspace/config/loader/variable/runtime"
8-
"github.com/loft-sh/devspace/pkg/devspace/imageselector"
9-
"github.com/loft-sh/devspace/pkg/devspace/kubectl/selector"
107
"io"
11-
kerrors "k8s.io/apimachinery/pkg/api/errors"
12-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
138
"os"
149
"path/filepath"
1510
"runtime"
1611
"strconv"
1712
"time"
1813

14+
runtimevar "github.com/loft-sh/devspace/pkg/devspace/config/loader/variable/runtime"
15+
"github.com/loft-sh/devspace/pkg/devspace/imageselector"
16+
"github.com/loft-sh/devspace/pkg/devspace/kubectl/selector"
17+
kerrors "k8s.io/apimachinery/pkg/api/errors"
18+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
19+
1920
"github.com/loft-sh/devspace/pkg/devspace/config"
2021
"github.com/loft-sh/devspace/pkg/devspace/config/versions/latest"
2122
"github.com/loft-sh/devspace/pkg/devspace/dependency/types"
@@ -279,7 +280,9 @@ func (c *controller) startSync(options *Options, onInitUploadDone chan struct{},
279280
}
280281
}
281282

282-
options.TargetOptions.ImageSelector = []imageselector.ImageSelector{}
283+
if len(options.TargetOptions.ImageSelector) == 0 {
284+
options.TargetOptions.ImageSelector = []imageselector.ImageSelector{}
285+
}
283286
if syncConfig.ImageSelector != "" {
284287
imageSelector, err := runtimevar.NewRuntimeResolver(true).FillRuntimeVariablesAsImageSelector(syncConfig.ImageSelector, c.config, c.dependencies)
285288
if err != nil {

0 commit comments

Comments
 (0)