From 025a409ab55dc5f5c91b4d40bb334dfd556d40e2 Mon Sep 17 00:00:00 2001 From: andres-portainer <91705312+andres-portainer@users.noreply.github.com> Date: Wed, 13 Nov 2024 20:24:14 -0300 Subject: [PATCH] fix(compose): avoid leftovers in Run() BE-11381 (#130) --- pkg/libstack/compose/composeplugin.go | 17 +++++++++++++++-- pkg/libstack/compose/composeplugin_test.go | 1 + 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/pkg/libstack/compose/composeplugin.go b/pkg/libstack/compose/composeplugin.go index fcb603b1d..d69bf5e14 100644 --- a/pkg/libstack/compose/composeplugin.go +++ b/pkg/libstack/compose/composeplugin.go @@ -162,14 +162,26 @@ func (c *ComposeDeployer) Deploy(ctx context.Context, filePaths []string, option }) } +// Run runs the given service just once, without considering dependencies func (c *ComposeDeployer) Run(ctx context.Context, filePaths []string, serviceName string, options libstack.RunOptions) error { return withComposeService(ctx, filePaths, options.Options, func(composeService api.Service, project *types.Project) error { addServiceLabels(project, true) - if err := composeService.Create(ctx, project, api.CreateOptions{}); err != nil { - return err + for name, service := range project.Services { + if name == serviceName { + project.DisabledServices[serviceName] = service + } } + project.Services = make(types.Services) + + if err := composeService.Create(ctx, project, api.CreateOptions{RemoveOrphans: true}); err != nil { + return fmt.Errorf("compose create operation failed: %w", err) + } + + maps.Copy(project.Services, project.DisabledServices) + project.DisabledServices = make(types.Services) + opts := api.RunOptions{ AutoRemove: options.Remove, Command: options.Args, @@ -222,6 +234,7 @@ func (c *ComposeDeployer) Validate(ctx context.Context, filePaths []string, opti }) } +// Config returns the compose file with the paths resolved func (c *ComposeDeployer) Config(ctx context.Context, filePaths []string, options libstack.Options) ([]byte, error) { var payload []byte diff --git a/pkg/libstack/compose/composeplugin_test.go b/pkg/libstack/compose/composeplugin_test.go index 2b577af01..524da987a 100644 --- a/pkg/libstack/compose/composeplugin_test.go +++ b/pkg/libstack/compose/composeplugin_test.go @@ -83,6 +83,7 @@ services: serviceName := "updater" err := w.Run(context.Background(), filePaths, serviceName, libstack.RunOptions{ + Remove: true, Options: libstack.Options{ ProjectName: "project_name", },