Merge pull request #38574 from StefanScherer/improve-no-matching-manifest-error
Improve 'no matching manifest' error message
This commit is contained in:
commit
50e63adf30
|
@ -756,7 +756,7 @@ func (p *v2Puller) pullManifestList(ctx context.Context, ref reference.Named, mf
|
||||||
manifestMatches := filterManifests(mfstList.Manifests, platform)
|
manifestMatches := filterManifests(mfstList.Manifests, platform)
|
||||||
|
|
||||||
if len(manifestMatches) == 0 {
|
if len(manifestMatches) == 0 {
|
||||||
errMsg := fmt.Sprintf("no matching manifest for %s in the manifest list entries", platforms.Format(platform))
|
errMsg := fmt.Sprintf("no matching manifest for %s in the manifest list entries", formatPlatform(platform))
|
||||||
logrus.Debugf(errMsg)
|
logrus.Debugf(errMsg)
|
||||||
return "", "", errors.New(errMsg)
|
return "", "", errors.New(errMsg)
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,10 @@ package distribution // import "github.com/docker/docker/distribution"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"regexp"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -11,6 +13,7 @@ import (
|
||||||
"github.com/docker/distribution/manifest/schema1"
|
"github.com/docker/distribution/manifest/schema1"
|
||||||
"github.com/docker/distribution/reference"
|
"github.com/docker/distribution/reference"
|
||||||
"github.com/opencontainers/go-digest"
|
"github.com/opencontainers/go-digest"
|
||||||
|
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"gotest.tools/assert"
|
"gotest.tools/assert"
|
||||||
is "gotest.tools/assert/cmp"
|
is "gotest.tools/assert/cmp"
|
||||||
)
|
)
|
||||||
|
@ -182,3 +185,23 @@ func TestValidateManifest(t *testing.T) {
|
||||||
t.Fatal("expected validateManifest to fail with digest error")
|
t.Fatal("expected validateManifest to fail with digest error")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFormatPlatform(t *testing.T) {
|
||||||
|
var platform specs.Platform
|
||||||
|
var result = formatPlatform(platform)
|
||||||
|
if strings.HasPrefix(result, "unknown") {
|
||||||
|
t.Fatal("expected formatPlatform to show a known platform")
|
||||||
|
}
|
||||||
|
if !strings.HasPrefix(result, runtime.GOOS) {
|
||||||
|
t.Fatal("expected formatPlatform to show the current platform")
|
||||||
|
}
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
if !strings.HasPrefix(result, "windows") {
|
||||||
|
t.Fatal("expected formatPlatform to show windows platform")
|
||||||
|
}
|
||||||
|
matches, _ := regexp.MatchString("windows.* [0-9]", result)
|
||||||
|
if !matches {
|
||||||
|
t.Fatal(fmt.Sprintf("expected formatPlatform to show windows platform with a version, but got '%s'", result))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -58,3 +58,10 @@ func withDefault(p specs.Platform) specs.Platform {
|
||||||
}
|
}
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func formatPlatform(platform specs.Platform) string {
|
||||||
|
if platform.OS == "" {
|
||||||
|
platform = platforms.DefaultSpec()
|
||||||
|
}
|
||||||
|
return platforms.Format(platform)
|
||||||
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/containerd/containerd/platforms"
|
||||||
"github.com/docker/distribution"
|
"github.com/docker/distribution"
|
||||||
"github.com/docker/distribution/manifest/manifestlist"
|
"github.com/docker/distribution/manifest/manifestlist"
|
||||||
"github.com/docker/distribution/manifest/schema2"
|
"github.com/docker/distribution/manifest/schema2"
|
||||||
|
@ -136,3 +137,10 @@ func checkImageCompatibility(imageOS, imageOSVersion string) error {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func formatPlatform(platform specs.Platform) string {
|
||||||
|
if platform.OS == "" {
|
||||||
|
platform = platforms.DefaultSpec()
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%s %s", platforms.Format(platform), system.GetOSVersion().ToString())
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue