mirror of
https://github.com/containers/podman.git
synced 2025-08-06 19:44:14 +08:00
compose: try all possible providers before throwing an error
Do not error out immediately but collect all errors and report them if no candidate succeeded. That'll fix #20502 and improve the quality of reported errors. [NO NEW TESTS NEEDED] Fixes: #20502 Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
This commit is contained in:

committed by
openshift-cherrypick-robot

parent
afb7d7e52b
commit
4efa973a3a
@ -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"
|
||||
@ -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
|
||||
|
Reference in New Issue
Block a user