From fada87ca19da4748318275a9fc719a800ca5a856 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Tue, 2 Mar 2021 09:30:26 +0100 Subject: [PATCH] don't put enabled services in the disabled slice Signed-off-by: Nicolas De Loof --- cli/cmd/compose/pull.go | 6 ++- cli/cmd/compose/run.go | 6 ++- cli/cmd/compose/up.go | 108 +++++++++++++++++++------------------ cli/cmd/compose/up_test.go | 3 +- 4 files changed, 68 insertions(+), 55 deletions(-) diff --git a/cli/cmd/compose/pull.go b/cli/cmd/compose/pull.go index e09e179a4..0bbd6e418 100644 --- a/cli/cmd/compose/pull.go +++ b/cli/cmd/compose/pull.go @@ -64,7 +64,11 @@ func runPull(ctx context.Context, opts pullOptions, services []string) error { if err != nil { return err } - project.DisabledServices = append(project.DisabledServices, project.Services...) + for _, s := range project.Services { + if !contains(services, s.Name) { + project.DisabledServices = append(project.DisabledServices, s) + } + } project.Services = enabled } diff --git a/cli/cmd/compose/run.go b/cli/cmd/compose/run.go index e3a7af70e..4eacd0708 100644 --- a/cli/cmd/compose/run.go +++ b/cli/cmd/compose/run.go @@ -93,7 +93,11 @@ func runRun(ctx context.Context, opts runOptions) error { if err != nil { return err } - project.DisabledServices = append(project.DisabledServices, project.Services...) + for _, s := range project.Services { + if s.Name != opts.Service { + project.DisabledServices = append(project.DisabledServices, s) + } + } project.Services = types.Services{enabled} } diff --git a/cli/cmd/compose/up.go b/cli/cmd/compose/up.go index 4416f91b4..8d397d46f 100644 --- a/cli/cmd/compose/up.go +++ b/cli/cmd/compose/up.go @@ -19,6 +19,12 @@ package compose import ( "context" "fmt" + "github.com/docker/compose-cli/api/client" + "github.com/docker/compose-cli/api/compose" + "github.com/docker/compose-cli/api/context/store" + "github.com/docker/compose-cli/api/progress" + "github.com/docker/compose-cli/cli/cmd" + "github.com/docker/compose-cli/cli/formatter" "os" "os/signal" "path/filepath" @@ -27,13 +33,6 @@ import ( "syscall" "time" - "github.com/docker/compose-cli/api/client" - "github.com/docker/compose-cli/api/compose" - "github.com/docker/compose-cli/api/context/store" - "github.com/docker/compose-cli/api/progress" - "github.com/docker/compose-cli/cli/cmd" - "github.com/docker/compose-cli/cli/formatter" - "github.com/compose-spec/compose-go/types" "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -89,6 +88,54 @@ func (o upOptions) dependenciesRecreateStrategy() string { return compose.RecreateDiverged } +func (opts upOptions) apply(project *types.Project, services []string) error { + if opts.noDeps { + enabled, err := project.GetServices(services...) + if err != nil { + return err + } + for _, s := range project.Services { + if !contains(services, s.Name) { + project.DisabledServices = append(project.DisabledServices, s) + } + } + project.Services = enabled + } + + if opts.exitCodeFrom != "" { + _, err := project.GetService(opts.exitCodeFrom) + if err != nil { + return err + } + } + + if opts.timeChanged { + timeoutValue := types.Duration(time.Duration(opts.timeout) * time.Second) + for i, s := range project.Services { + s.StopGracePeriod = &timeoutValue + project.Services[i] = s + } + } + + for _, scale := range opts.scale { + split := strings.Split(scale, "=") + if len(split) != 2 { + return fmt.Errorf("invalid --scale option %q. Should be SERVICE=NUM", scale) + } + name := split[0] + replicas, err := strconv.Atoi(split[1]) + if err != nil { + return err + } + err = setServiceScale(project, name, replicas) + if err != nil { + return err + } + } + + return nil +} + func upCommand(p *projectOptions, contextType string) *cobra.Command { opts := upOptions{ composeOptions: &composeOptions{ @@ -157,7 +204,7 @@ func runUp(ctx context.Context, opts upOptions, services []string) error { return err } - err = applyScaleOpt(opts.scale, project) + err = opts.apply(project, services) if err != nil { return err } @@ -176,35 +223,11 @@ func runCreateStart(ctx context.Context, opts upOptions, services []string) erro return err } - if opts.noDeps { - enabled, err := project.GetServices(services...) - if err != nil { - return err - } - project.DisabledServices = append(project.DisabledServices, project.Services...) - project.Services = enabled - } - - err = applyScaleOpt(opts.scale, project) + err = opts.apply(project, services) if err != nil { return err } - if opts.exitCodeFrom != "" { - _, err := project.GetService(opts.exitCodeFrom) - if err != nil { - return err - } - } - - if opts.timeChanged { - timeoutValue := types.Duration(time.Duration(opts.timeout) * time.Second) - for i, s := range project.Services { - s.StopGracePeriod = &timeoutValue - project.Services[i] = s - } - } - _, err = progress.Run(ctx, func(ctx context.Context) (string, error) { err := c.ComposeService().Create(ctx, project, compose.CreateOptions{ Services: services, @@ -282,25 +305,6 @@ func runCreateStart(ctx context.Context, opts upOptions, services []string) erro return err } -func applyScaleOpt(opts []string, project *types.Project) error { - for _, scale := range opts { - split := strings.Split(scale, "=") - if len(split) != 2 { - return fmt.Errorf("invalid --scale option %q. Should be SERVICE=NUM", scale) - } - name := split[0] - replicas, err := strconv.Atoi(split[1]) - if err != nil { - return err - } - err = setServiceScale(project, name, replicas) - if err != nil { - return err - } - } - return nil -} - func setServiceScale(project *types.Project, name string, replicas int) error { for i, s := range project.Services { if s.Name == name { diff --git a/cli/cmd/compose/up_test.go b/cli/cmd/compose/up_test.go index 03dac57e0..566a68476 100644 --- a/cli/cmd/compose/up_test.go +++ b/cli/cmd/compose/up_test.go @@ -34,7 +34,8 @@ func TestApplyScaleOpt(t *testing.T) { }, }, } - err := applyScaleOpt([]string{"foo=2"}, &p) + opt := upOptions{scale: []string{"foo=2"}} + err := opt.apply(&p, nil) assert.NilError(t, err) foo, err := p.GetService("foo") assert.NilError(t, err)