Skip to content

Commit

Permalink
schema: add checkPlatform
Browse files Browse the repository at this point in the history
Signed-off-by: zhouhao <zhouhao@cn.fujitsu.com>
  • Loading branch information
zhouhao committed Dec 12, 2016
1 parent de440db commit de42d24
Showing 1 changed file with 65 additions and 1 deletion.
66 changes: 65 additions & 1 deletion schema/validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ type Validator string
type validateDescendantsFunc func(r io.Reader) error

var mapValidateDescendants = map[Validator]validateDescendantsFunc{
MediaTypeManifest: validateManifestDescendants,
MediaTypeImageConfig: validateConfigDescendants,
MediaTypeManifest: validateManifestDescendants,
MediaTypeManifestList: validateManifestListDescendants,
}

// ValidationError contains all the errors that happened during validation.
Expand Down Expand Up @@ -117,3 +119,65 @@ func validateManifestDescendants(r io.Reader) error {
}
return nil
}

func validateManifestListDescendants(r io.Reader) error {
header := v1.ManifestList{}

buf, err := ioutil.ReadAll(r)
if err != nil {
return errors.Wrapf(err, "error reading the io stream")
}

err = json.Unmarshal(buf, &header)
if err != nil {
return errors.Wrap(err, "manifestlist format mismatch")
}

for _, manifest := range header.Manifests {
checkPlatform(manifest.Platform.OS, manifest.Platform.Architecture)
}
return nil
}

func validateConfigDescendants(r io.Reader) error {
header := v1.Image{}

buf, err := ioutil.ReadAll(r)
if err != nil {
return errors.Wrapf(err, "error reading the io stream")
}

err = json.Unmarshal(buf, &header)
if err != nil {
return errors.Wrap(err, "config format mismatch")
}

checkPlatform(header.OS, header.Architecture)

return nil
}

func checkPlatform(OS string, Architecture string) {
validCombins := map[string][]string{
"android": {"arm"},
"darwin": {"386", "amd64", "arm", "arm64"},
"dragonfly": {"amd64"},
"freebsd": {"386", "amd64", "arm"},
"linux": {"386", "amd64", "arm", "arm64", "ppc64", "ppc64le", "mips64", "mips64le", "s390x"},
"netbsd": {"386", "amd64", "arm"},
"openbsd": {"386", "amd64", "arm"},
"plan9": {"386", "amd64"},
"solaris": {"amd64"},
"windows": {"386", "amd64"}}
for os, archs := range validCombins {
if os == OS {
for _, arch := range archs {
if arch == Architecture {
break
}
}
fmt.Printf("waring: combination of %q and %q is invalid.", OS, Architecture)
}
}
fmt.Printf("waring: operation system %q of the bundle is not supported yet.", OS)
}

0 comments on commit de42d24

Please sign in to comment.