mirror of
https://github.com/containers/podman.git
synced 2025-09-28 01:04:28 +08:00
migrate Podman to containers/common/libimage
Migrate the Podman code base over to `common/libimage` which replaces `libpod/image` and a lot of glue code entirely. Note that I tried to leave bread crumbs for changed tests. Miscellaneous changes: * Some errors yield different messages which required to alter some tests. * I fixed some pre-existing issues in the code. Others were marked as `//TODO`s to prevent the PR from exploding. * The `NamesHistory` of an image is returned as is from the storage. Previously, we did some filtering which I think is undesirable. Instead we should return the data as stored in the storage. * Touched handlers use the ABI interfaces where possible. * Local image resolution: previously Podman would match "foo" on "myfoo". This behaviour has been changed and Podman will now only match on repository boundaries such that "foo" would match "my/foo" but not "myfoo". I consider the old behaviour to be a bug, at the very least an exotic corner case. * Futhermore, "foo:none" does *not* resolve to a local image "foo" without tag anymore. It's a hill I am (almost) willing to die on. * `image prune` prints the IDs of pruned images. Previously, in some cases, the names were printed instead. The API clearly states ID, so we should stick to it. * Compat endpoint image removal with _force_ deletes the entire not only the specified tag. Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
This commit is contained in:
85
vendor/github.com/containers/buildah/util/util.go
generated
vendored
85
vendor/github.com/containers/buildah/util/util.go
generated
vendored
@ -5,7 +5,6 @@ import (
|
||||
"io"
|
||||
"net/url"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"strings"
|
||||
@ -13,12 +12,12 @@ import (
|
||||
"syscall"
|
||||
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/common/libimage"
|
||||
"github.com/containers/common/pkg/config"
|
||||
"github.com/containers/image/v5/docker/reference"
|
||||
"github.com/containers/image/v5/pkg/shortnames"
|
||||
"github.com/containers/image/v5/pkg/sysregistriesv2"
|
||||
"github.com/containers/image/v5/signature"
|
||||
is "github.com/containers/image/v5/storage"
|
||||
"github.com/containers/image/v5/transports/alltransports"
|
||||
"github.com/containers/image/v5/types"
|
||||
"github.com/containers/storage"
|
||||
@ -46,7 +45,7 @@ var (
|
||||
}
|
||||
)
|
||||
|
||||
// ResolveName checks if name is a valid image name, and if that name doesn't
|
||||
// resolveName checks if name is a valid image name, and if that name doesn't
|
||||
// include a domain portion, returns a list of the names which it might
|
||||
// correspond to in the set of configured registries, the transport used to
|
||||
// pull the image, and a boolean which is true iff
|
||||
@ -59,7 +58,7 @@ var (
|
||||
//
|
||||
// NOTE: The "list of search registries is empty" check does not count blocked registries,
|
||||
// and neither the implied "localhost" nor a possible firstRegistry are counted
|
||||
func ResolveName(name string, firstRegistry string, sc *types.SystemContext, store storage.Store) ([]string, string, bool, error) {
|
||||
func resolveName(name string, sc *types.SystemContext, store storage.Store) ([]string, string, bool, error) {
|
||||
if name == "" {
|
||||
return nil, "", false, nil
|
||||
}
|
||||
@ -112,16 +111,6 @@ func ResolveName(name string, firstRegistry string, sc *types.SystemContext, sto
|
||||
searchRegistriesAreEmpty := len(registries) == 0
|
||||
|
||||
var candidates []string
|
||||
// Set the first registry if requested.
|
||||
if firstRegistry != "" && firstRegistry != "localhost" {
|
||||
middle := ""
|
||||
if prefix, ok := RegistryDefaultPathPrefix[firstRegistry]; ok && !strings.ContainsRune(name, '/') {
|
||||
middle = prefix
|
||||
}
|
||||
candidate := path.Join(firstRegistry, middle, name)
|
||||
candidates = append(candidates, candidate)
|
||||
}
|
||||
|
||||
// Local short-name resolution.
|
||||
namedCandidates, err := shortnames.ResolveLocally(sc, name)
|
||||
if err != nil {
|
||||
@ -144,11 +133,11 @@ func StartsWithValidTransport(name string) bool {
|
||||
// the fully expanded result, including a tag. Names which don't include a registry
|
||||
// name will be marked for the most-preferred registry (i.e., the first one in our
|
||||
// configuration).
|
||||
func ExpandNames(names []string, firstRegistry string, systemContext *types.SystemContext, store storage.Store) ([]string, error) {
|
||||
func ExpandNames(names []string, systemContext *types.SystemContext, store storage.Store) ([]string, error) {
|
||||
expanded := make([]string, 0, len(names))
|
||||
for _, n := range names {
|
||||
var name reference.Named
|
||||
nameList, _, _, err := ResolveName(n, firstRegistry, systemContext, store)
|
||||
nameList, _, _, err := resolveName(n, systemContext, store)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "error parsing name %q", n)
|
||||
}
|
||||
@ -172,45 +161,34 @@ func ExpandNames(names []string, firstRegistry string, systemContext *types.Syst
|
||||
}
|
||||
|
||||
// FindImage locates the locally-stored image which corresponds to a given name.
|
||||
// Please note that the `firstRegistry` argument has been deprecated and has no
|
||||
// effect anymore.
|
||||
func FindImage(store storage.Store, firstRegistry string, systemContext *types.SystemContext, image string) (types.ImageReference, *storage.Image, error) {
|
||||
var ref types.ImageReference
|
||||
var img *storage.Image
|
||||
var err error
|
||||
names, _, _, err := ResolveName(image, firstRegistry, systemContext, store)
|
||||
runtime, err := libimage.RuntimeFromStore(store, &libimage.RuntimeOptions{SystemContext: systemContext})
|
||||
if err != nil {
|
||||
return nil, nil, errors.Wrapf(err, "error parsing name %q", image)
|
||||
return nil, nil, err
|
||||
}
|
||||
for _, name := range names {
|
||||
ref, err = is.Transport.ParseStoreReference(store, name)
|
||||
if err != nil {
|
||||
logrus.Debugf("error parsing reference to image %q: %v", name, err)
|
||||
continue
|
||||
}
|
||||
img, err = is.Transport.GetStoreImage(store, ref)
|
||||
if err != nil {
|
||||
img2, err2 := store.Image(name)
|
||||
if err2 != nil {
|
||||
logrus.Debugf("error locating image %q: %v", name, err2)
|
||||
continue
|
||||
}
|
||||
img = img2
|
||||
}
|
||||
break
|
||||
|
||||
localImage, _, err := runtime.LookupImage(image, &libimage.LookupImageOptions{IgnorePlatform: true})
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
if ref == nil || img == nil {
|
||||
return nil, nil, errors.Wrapf(err, "error locating image with name %q (%v)", image, names)
|
||||
ref, err := localImage.StorageReference()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
return ref, img, nil
|
||||
|
||||
return ref, localImage.StorageImage(), nil
|
||||
}
|
||||
|
||||
// ResolveNameToReferences tries to create a list of possible references
|
||||
// resolveNameToReferences tries to create a list of possible references
|
||||
// (including their transports) from the provided image name.
|
||||
func ResolveNameToReferences(
|
||||
store storage.Store,
|
||||
systemContext *types.SystemContext,
|
||||
image string,
|
||||
) (refs []types.ImageReference, err error) {
|
||||
names, transport, _, err := ResolveName(image, "", systemContext, store)
|
||||
names, transport, _, err := resolveName(image, systemContext, store)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "error parsing name %q", image)
|
||||
}
|
||||
@ -233,16 +211,26 @@ func ResolveNameToReferences(
|
||||
return refs, nil
|
||||
}
|
||||
|
||||
// AddImageNames adds the specified names to the specified image.
|
||||
// AddImageNames adds the specified names to the specified image. Please note
|
||||
// that the `firstRegistry` argument has been deprecated and has no effect
|
||||
// anymore.
|
||||
func AddImageNames(store storage.Store, firstRegistry string, systemContext *types.SystemContext, image *storage.Image, addNames []string) error {
|
||||
names, err := ExpandNames(addNames, firstRegistry, systemContext, store)
|
||||
runtime, err := libimage.RuntimeFromStore(store, &libimage.RuntimeOptions{SystemContext: systemContext})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = store.SetNames(image.ID, append(image.Names, names...))
|
||||
|
||||
localImage, _, err := runtime.LookupImage(image.ID, nil)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "error adding names (%v) to image %q", names, image.ID)
|
||||
return err
|
||||
}
|
||||
|
||||
for _, tag := range addNames {
|
||||
if err := localImage.Tag(tag); err != nil {
|
||||
return errors.Wrapf(err, "error tagging image %s", image.ID)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -275,11 +263,6 @@ func Runtime() string {
|
||||
return runtime
|
||||
}
|
||||
|
||||
// Need to switch default until runc supports cgroups v2
|
||||
if unified, _ := IsCgroup2UnifiedMode(); unified {
|
||||
return "crun"
|
||||
}
|
||||
|
||||
conf, err := config.Default()
|
||||
if err != nil {
|
||||
logrus.Warnf("Error loading container config when searching for local runtime: %v", err)
|
||||
|
Reference in New Issue
Block a user