diff --git a/contrib/nydusify/cmd/nydusify.go b/contrib/nydusify/cmd/nydusify.go index 6c6a8df7027..fa11daf0c3f 100644 --- a/contrib/nydusify/cmd/nydusify.go +++ b/contrib/nydusify/cmd/nydusify.go @@ -172,7 +172,7 @@ func main() { &cli.BoolFlag{Name: "prefetch-patterns", Value: false, Usage: "Prefetched file path patterns from STDIN, specify absolute/relative path of rootfs line by line", EnvVars: []string{"PREFETCH_PATTERNS"}}, &cli.StringFlag{Name: "nydus-image", Value: "nydus-image", Usage: "The nydus-image binary path, if unset, search in PATH environment", EnvVars: []string{"NYDUS_IMAGE"}}, &cli.BoolFlag{Name: "multi-platform", Value: false, Usage: "Merge OCI & Nydus manifest to manifest index for target image, please ensure that OCI manifest already exists in target image", EnvVars: []string{"MULTI_PLATFORM"}}, - &cli.StringFlag{Name: "platform", Value: "linux/" + runtime.GOARCH, Usage: "Let nydusify choose image of specified platform from manifest index. Possible value is `amd64` or `arm64`"}, + &cli.StringFlag{Name: "platform", Value: "linux/" + runtime.GOARCH, Usage: "Let nydusify choose image of specified platform from manifest index. Possible value is `linux/amd64` or `linux/arm64`"}, &cli.BoolFlag{Name: "docker-v2-format", Value: false, Usage: "Use docker image manifest v2, schema 2 format", EnvVars: []string{"DOCKER_V2_FORMAT"}}, &cli.StringFlag{Name: "backend-type", Value: "registry", Usage: "Specify Nydus blob storage backend type", EnvVars: []string{"BACKEND_TYPE"}}, &cli.StringFlag{Name: "backend-config", Value: "", Usage: "Specify Nydus blob storage backend in JSON config string", EnvVars: []string{"BACKEND_CONFIG"}}, diff --git a/contrib/nydusify/pkg/parser/parser.go b/contrib/nydusify/pkg/parser/parser.go index 535e83c7605..b3307a2b67e 100644 --- a/contrib/nydusify/pkg/parser/parser.go +++ b/contrib/nydusify/pkg/parser/parser.go @@ -118,7 +118,7 @@ func (parser *Parser) pullIndex(ctx context.Context, desc *ocispec.Descriptor) ( } func (parser *Parser) parseImage( - ctx context.Context, desc *ocispec.Descriptor, onlyManifest *ocispec.Manifest, + ctx context.Context, desc *ocispec.Descriptor, onlyManifest *ocispec.Manifest, ignoreArch bool, ) (*Image, error) { var manifest *ocispec.Manifest var err error @@ -136,12 +136,22 @@ func (parser *Parser) parseImage( } if config.OS == "" || config.Architecture == "" { - return nil, errors.New("Source image configuration does not have os or architecture") + err = errors.New("Source image configuration does not have os or architecture") + if ignoreArch { + logrus.WithError(err).Warn(err) + } else { + return nil, err + } } // Just give user a simple hint telling option was ignored. if config.Architecture != parser.interestedArch { - return nil, errors.Errorf("Specified %s architecture was not found", parser.interestedArch) + err = errors.Errorf("Specified %s architecture was not found", parser.interestedArch) + if ignoreArch { + logrus.WithError(err).Warn(err) + } else { + return nil, err + } } return &Image{ @@ -185,6 +195,7 @@ func (parser *Parser) Parse(ctx context.Context) (*Parsed, error) { var ociDesc *ocispec.Descriptor var nydusDesc *ocispec.Descriptor var onlyManifest *ocispec.Manifest + var ignoreArch bool switch imageDesc.MediaType { // Handle image manifest @@ -202,6 +213,7 @@ func (parser *Parser) Parse(ctx context.Context) (*Parsed, error) { } else { ociDesc = imageDesc } + ignoreArch = true // Handle image manifest index case ocispec.MediaTypeImageIndex, images.MediaTypeDockerSchema2ManifestList: @@ -232,16 +244,16 @@ func (parser *Parser) Parse(ctx context.Context) (*Parsed, error) { } if ociDesc != nil { - parsed.OCIImage, err = parser.parseImage(ctx, ociDesc, onlyManifest) + parsed.OCIImage, err = parser.parseImage(ctx, ociDesc, onlyManifest, ignoreArch) if err != nil { - return nil, errors.Wrap(err, "parse OCI image") + return nil, errors.Wrap(err, "Parse OCI image") } } if nydusDesc != nil { - parsed.NydusImage, err = parser.parseImage(ctx, nydusDesc, onlyManifest) + parsed.NydusImage, err = parser.parseImage(ctx, nydusDesc, onlyManifest, ignoreArch) if err != nil { - return nil, errors.Wrap(err, "parse Nydus image") + return nil, errors.Wrap(err, "Parse Nydus image") } }