From 2858911c1c53a0fbc870bcd56d9cde60db074019 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Tue, 23 Feb 2021 14:03:15 +0100 Subject: [PATCH 1/2] add --timeout option to compose up Signed-off-by: Nicolas De Loof --- cli/cmd/compose/up.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cli/cmd/compose/up.go b/cli/cmd/compose/up.go index a52ffb09b..d6057b8ca 100644 --- a/cli/cmd/compose/up.go +++ b/cli/cmd/compose/up.go @@ -25,6 +25,7 @@ import ( "strconv" "strings" "syscall" + "time" "github.com/docker/compose-cli/api/client" "github.com/docker/compose-cli/api/compose" @@ -60,6 +61,8 @@ type upOptions struct { scale []string noColor bool noPrefix bool + timeChanged bool + timeout int } func (o upOptions) recreateStrategy() string { @@ -82,6 +85,7 @@ func upCommand(p *projectOptions, contextType string) *cobra.Command { Use: "up [SERVICE...]", Short: "Create and start containers", RunE: func(cmd *cobra.Command, args []string) error { + opts.timeChanged = cmd.Flags().Changed("timeout") switch contextType { case store.LocalContextType, store.DefaultContextType, store.EcsLocalSimulationContextType: if opts.exitCodeFrom != "" { @@ -117,6 +121,7 @@ func upCommand(p *projectOptions, contextType string) *cobra.Command { flags.BoolVar(&opts.noStart, "no-start", false, "Don't start the services after creating them.") flags.BoolVar(&opts.cascadeStop, "abort-on-container-exit", false, "Stops all containers if any container was stopped. Incompatible with -d") flags.StringVar(&opts.exitCodeFrom, "exit-code-from", "", "Return the exit code of the selected service container. Implies --abort-on-container-exit") + flags.IntVarP(&opts.timeout, "timeout", "t", 10, "Use this timeout in seconds for container shutdown when attached or when containers are already running.") } return upCmd @@ -159,6 +164,14 @@ func runCreateStart(ctx context.Context, opts upOptions, services []string) erro } } + 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{ RemoveOrphans: opts.removeOrphans, From 04edb78ab6ffd019aa485620009a312b3d976765 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Tue, 23 Feb 2021 14:27:24 +0100 Subject: [PATCH 2/2] up --no-deps option Signed-off-by: Nicolas De Loof --- cli/cmd/compose/run.go | 11 +++++++++++ cli/cmd/compose/up.go | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/cli/cmd/compose/run.go b/cli/cmd/compose/run.go index ea27368ad..e3a7af70e 100644 --- a/cli/cmd/compose/run.go +++ b/cli/cmd/compose/run.go @@ -45,6 +45,7 @@ type runOptions struct { entrypoint string labels []string name string + noDeps bool } func runCommand(p *projectOptions) *cobra.Command { @@ -75,6 +76,7 @@ func runCommand(p *projectOptions) *cobra.Command { flags.StringVarP(&opts.user, "user", "u", "", "Run as specified username or uid") flags.StringVarP(&opts.workdir, "workdir", "w", "", "Working directory inside the container") flags.StringVar(&opts.entrypoint, "entrypoint", "", "Override the entrypoint of the image") + flags.BoolVar(&opts.noDeps, "no-deps", false, "Don't start linked services.") flags.SetInterspersed(false) return cmd @@ -86,6 +88,15 @@ func runRun(ctx context.Context, opts runOptions) error { return err } + if opts.noDeps { + enabled, err := project.GetService(opts.Service) + if err != nil { + return err + } + project.DisabledServices = append(project.DisabledServices, project.Services...) + project.Services = types.Services{enabled} + } + _, err = progress.Run(ctx, func(ctx context.Context) (string, error) { return "", startDependencies(ctx, c, *project, opts.Service) }) diff --git a/cli/cmd/compose/up.go b/cli/cmd/compose/up.go index d6057b8ca..01736b05a 100644 --- a/cli/cmd/compose/up.go +++ b/cli/cmd/compose/up.go @@ -63,6 +63,7 @@ type upOptions struct { noPrefix bool timeChanged bool timeout int + noDeps bool } func (o upOptions) recreateStrategy() string { @@ -122,6 +123,7 @@ func upCommand(p *projectOptions, contextType string) *cobra.Command { flags.BoolVar(&opts.cascadeStop, "abort-on-container-exit", false, "Stops all containers if any container was stopped. Incompatible with -d") flags.StringVar(&opts.exitCodeFrom, "exit-code-from", "", "Return the exit code of the selected service container. Implies --abort-on-container-exit") flags.IntVarP(&opts.timeout, "timeout", "t", 10, "Use this timeout in seconds for container shutdown when attached or when containers are already running.") + flags.BoolVar(&opts.noDeps, "no-deps", false, "Don't start linked services.") } return upCmd @@ -152,6 +154,15 @@ 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) if err != nil { return err