Not use local image create/add manifest

Avoid using the image from load storage for `manifest create` and `manifest add`
since the local image does not include other entries of the list from the registry.
`--all` flag of `manifest create` and `manifest add` can not add all of the lists as expected.

Signed-off-by: Qi Wang <qiwan@redhat.com>
This commit is contained in:
Qi Wang
2020-11-24 14:17:49 -05:00
parent 850bdd236a
commit 5231997f97

View File

@ -2,13 +2,14 @@ package image
import ( import (
"context" "context"
"fmt"
"github.com/containers/buildah/manifests" "github.com/containers/buildah/manifests"
"github.com/containers/image/v5/docker"
"github.com/containers/image/v5/manifest" "github.com/containers/image/v5/manifest"
"github.com/containers/image/v5/transports/alltransports" "github.com/containers/image/v5/transports/alltransports"
"github.com/containers/image/v5/types" "github.com/containers/image/v5/types"
"github.com/opencontainers/go-digest" "github.com/opencontainers/go-digest"
"github.com/pkg/errors"
) )
// Options for adding a manifest // Options for adding a manifest
@ -69,19 +70,10 @@ func CreateManifestList(rt *Runtime, systemContext types.SystemContext, names []
list := manifests.Create() list := manifests.Create()
opts := ManifestAddOpts{Images: names, All: all} opts := ManifestAddOpts{Images: names, All: all}
for _, img := range imgs { for _, img := range imgs {
var ref types.ImageReference ref, err := alltransports.ParseImageName(img)
newImage, err := rt.NewFromLocal(img)
if err == nil {
ir, err := newImage.toImageRef(context.Background())
if err != nil { if err != nil {
return "", err dockerPrefix := fmt.Sprintf("%s://", docker.Transport.Name())
} ref, err = alltransports.ParseImageName(fmt.Sprintf("%s%s", dockerPrefix, img))
if ir == nil {
return "", errors.New("unable to convert image to ImageReference")
}
ref = ir.Reference()
} else {
ref, err = alltransports.ParseImageName(img)
if err != nil { if err != nil {
return "", err return "", err
} }
@ -134,18 +126,10 @@ func addManifestToList(ref types.ImageReference, list manifests.List, systemCont
// AddManifest adds a manifest to a given manifest list. // AddManifest adds a manifest to a given manifest list.
func (i *Image) AddManifest(systemContext types.SystemContext, opts ManifestAddOpts) (string, error) { func (i *Image) AddManifest(systemContext types.SystemContext, opts ManifestAddOpts) (string, error) {
var ( ref, err := alltransports.ParseImageName(opts.Images[0])
ref types.ImageReference
)
newImage, err := i.imageruntime.NewFromLocal(opts.Images[0])
if err == nil {
ir, err := newImage.toImageRef(context.Background())
if err != nil { if err != nil {
return "", err dockerPrefix := fmt.Sprintf("%s://", docker.Transport.Name())
} ref, err = alltransports.ParseImageName(fmt.Sprintf("%s%s", dockerPrefix, opts.Images[0]))
ref = ir.Reference()
} else {
ref, err = alltransports.ParseImageName(opts.Images[0])
if err != nil { if err != nil {
return "", err return "", err
} }