Skip to content

Commit

Permalink
compose: try all possible providers before throwing an error
Browse files Browse the repository at this point in the history
Do not error out immediately but collect all errors and report them if
no candidate succeeded.  That'll fix containers#20502 and improve the quality of
reported errors.

[NO NEW TESTS NEEDED]

Fixes: containers#20502
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
  • Loading branch information
vrothberg committed Oct 27, 2023
1 parent c3fae01 commit 3743955
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions cmd/podman/compose.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (

"github.com/containers/common/pkg/config"
"github.com/containers/podman/v4/cmd/podman/registry"
"github.com/containers/podman/v4/pkg/errorhandling"
"github.com/containers/podman/v4/pkg/machine"
"github.com/containers/podman/v4/pkg/machine/provider"
"github.com/sirupsen/logrus"
Expand Down Expand Up @@ -85,20 +86,19 @@ func composeProvider() (string, error) {
return "", errors.New("no compose provider specified, please refer to `man podman-compose` for details")
}

lookupErrors := make([]error, 0, len(candidates))
for _, candidate := range candidates {
path, err := exec.LookPath(os.ExpandEnv(candidate))
if err != nil {
if errors.Is(err, os.ErrNotExist) {
continue
}
return "", err
if err == nil {
// First specified provider "candidate" wins.
logrus.Debugf("Found compose provider %q", path)
return path, nil
}
// First specified provider "candidate" wins.
logrus.Debugf("Found compose provider %q", path)
return path, nil
logrus.Debugf("Error looking up compose provider %q: %v", path, err)
lookupErrors = append(lookupErrors, err)
}

return "", errors.New("no configured compose provider found on system, please refer to the documentation for details")
return "", fmt.Errorf("looking up compose provider failed\n%v", errorhandling.JoinErrors(lookupErrors))
}

// composeDockerHost returns the value to be set in the DOCKER_HOST environment
Expand Down

0 comments on commit 3743955

Please sign in to comment.