mirror of
https://github.com/containers/podman.git
synced 2025-06-27 21:50:18 +08:00
podman pull should always try to pull
In the case where you have an image local, if the the user runs podman pull, we should always attempt to pull an updated image. Added a forceRemote bool to New (image) so we can differentiate between "pull" or run because the actions differ. Run does not need to pull the latest -- only run. Signed-off-by: baude <bbaude@redhat.com> Closes: #618 Approved by: baude
This commit is contained in:
@ -181,7 +181,7 @@ func createCmd(c *cli.Context) error {
|
|||||||
|
|
||||||
rtc := runtime.GetConfig()
|
rtc := runtime.GetConfig()
|
||||||
|
|
||||||
newImage, err := runtime.ImageRuntime().New(c.Args()[0], rtc.SignaturePolicyPath, "", os.Stderr, nil, image.SigningOptions{})
|
newImage, err := runtime.ImageRuntime().New(c.Args()[0], rtc.SignaturePolicyPath, "", os.Stderr, nil, image.SigningOptions{}, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -99,17 +99,17 @@ func loadCmd(c *cli.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
src := libpod.DockerArchive + ":" + input
|
src := libpod.DockerArchive + ":" + input
|
||||||
newImage, err := runtime.ImageRuntime().New(src, c.String("signature-policy"), "", writer, &libpodImage.DockerRegistryOptions{}, libpodImage.SigningOptions{})
|
newImage, err := runtime.ImageRuntime().New(src, c.String("signature-policy"), "", writer, &libpodImage.DockerRegistryOptions{}, libpodImage.SigningOptions{}, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// generate full src name with specified image:tag
|
// generate full src name with specified image:tag
|
||||||
fullSrc := libpod.OCIArchive + ":" + input
|
fullSrc := libpod.OCIArchive + ":" + input
|
||||||
if image != "" {
|
if image != "" {
|
||||||
fullSrc = fullSrc + ":" + image
|
fullSrc = fullSrc + ":" + image
|
||||||
}
|
}
|
||||||
newImage, err = runtime.ImageRuntime().New(fullSrc, c.String("signature-policy"), "", writer, &libpodImage.DockerRegistryOptions{}, libpodImage.SigningOptions{})
|
newImage, err = runtime.ImageRuntime().New(fullSrc, c.String("signature-policy"), "", writer, &libpodImage.DockerRegistryOptions{}, libpodImage.SigningOptions{}, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
src = libpod.DirTransport + ":" + input
|
src = libpod.DirTransport + ":" + input
|
||||||
newImage, err = runtime.ImageRuntime().New(src, c.String("signature-policy"), "", writer, &libpodImage.DockerRegistryOptions{}, libpodImage.SigningOptions{})
|
newImage, err = runtime.ImageRuntime().New(src, c.String("signature-policy"), "", writer, &libpodImage.DockerRegistryOptions{}, libpodImage.SigningOptions{}, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error pulling %q", src)
|
return errors.Wrapf(err, "error pulling %q", src)
|
||||||
}
|
}
|
||||||
|
@ -99,7 +99,7 @@ func pullCmd(c *cli.Context) error {
|
|||||||
DockerInsecureSkipTLSVerify: !c.BoolT("tls-verify"),
|
DockerInsecureSkipTLSVerify: !c.BoolT("tls-verify"),
|
||||||
}
|
}
|
||||||
|
|
||||||
newImage, err := runtime.ImageRuntime().New(image, c.String("signature-policy"), c.String("authfile"), writer, &dockerRegistryOptions, image2.SigningOptions{})
|
newImage, err := runtime.ImageRuntime().New(image, c.String("signature-policy"), c.String("authfile"), writer, &dockerRegistryOptions, image2.SigningOptions{}, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error pulling image %q", image)
|
return errors.Wrapf(err, "error pulling image %q", image)
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ func runCmd(c *cli.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rtc := runtime.GetConfig()
|
rtc := runtime.GetConfig()
|
||||||
newImage, err := runtime.ImageRuntime().New(c.Args()[0], rtc.SignaturePolicyPath, "", os.Stderr, nil, image.SigningOptions{})
|
newImage, err := runtime.ImageRuntime().New(c.Args()[0], rtc.SignaturePolicyPath, "", os.Stderr, nil, image.SigningOptions{}, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "unable to find image")
|
return errors.Wrapf(err, "unable to find image")
|
||||||
}
|
}
|
||||||
|
@ -117,19 +117,21 @@ func (ir *Runtime) NewFromLocal(name string) (*Image, error) {
|
|||||||
|
|
||||||
// New creates a new image object where the image could be local
|
// New creates a new image object where the image could be local
|
||||||
// or remote
|
// or remote
|
||||||
func (ir *Runtime) New(name, signaturePolicyPath, authfile string, writer io.Writer, dockeroptions *DockerRegistryOptions, signingoptions SigningOptions) (*Image, error) {
|
func (ir *Runtime) New(name, signaturePolicyPath, authfile string, writer io.Writer, dockeroptions *DockerRegistryOptions, signingoptions SigningOptions, forcePull bool) (*Image, error) {
|
||||||
// We don't know if the image is local or not ... check local first
|
// We don't know if the image is local or not ... check local first
|
||||||
newImage := Image{
|
newImage := Image{
|
||||||
InputName: name,
|
InputName: name,
|
||||||
Local: false,
|
Local: false,
|
||||||
imageruntime: ir,
|
imageruntime: ir,
|
||||||
}
|
}
|
||||||
|
if !forcePull {
|
||||||
localImage, err := newImage.getLocalImage()
|
localImage, err := newImage.getLocalImage()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
newImage.Local = true
|
newImage.Local = true
|
||||||
newImage.image = localImage
|
newImage.image = localImage
|
||||||
return &newImage, nil
|
return &newImage, nil
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// The image is not local
|
// The image is not local
|
||||||
if signaturePolicyPath == "" {
|
if signaturePolicyPath == "" {
|
||||||
|
@ -81,9 +81,9 @@ func TestImage_NewFromLocal(t *testing.T) {
|
|||||||
// Need images to be present for this test
|
// Need images to be present for this test
|
||||||
ir, err := NewImageRuntimeFromOptions(so)
|
ir, err := NewImageRuntimeFromOptions(so)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
bb, err := ir.New("docker.io/library/busybox:latest", "", "", writer, nil, SigningOptions{})
|
bb, err := ir.New("docker.io/library/busybox:latest", "", "", writer, nil, SigningOptions{}, false)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
bbglibc, err := ir.New("docker.io/library/busybox:glibc", "", "", writer, nil, SigningOptions{})
|
bbglibc, err := ir.New("docker.io/library/busybox:glibc", "", "", writer, nil, SigningOptions{}, false)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
tm, err := makeLocalMatrix(bb, bbglibc)
|
tm, err := makeLocalMatrix(bb, bbglibc)
|
||||||
@ -126,7 +126,7 @@ func TestImage_New(t *testing.T) {
|
|||||||
// Iterate over the names and delete the image
|
// Iterate over the names and delete the image
|
||||||
// after the pull
|
// after the pull
|
||||||
for _, img := range names {
|
for _, img := range names {
|
||||||
newImage, err := ir.New(img, "", "", writer, nil, SigningOptions{})
|
newImage, err := ir.New(img, "", "", writer, nil, SigningOptions{}, false)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.NotEqual(t, newImage.ID(), "")
|
assert.NotEqual(t, newImage.ID(), "")
|
||||||
err = newImage.Remove(false)
|
err = newImage.Remove(false)
|
||||||
@ -150,7 +150,7 @@ func TestImage_MatchRepoTag(t *testing.T) {
|
|||||||
}
|
}
|
||||||
ir, err := NewImageRuntimeFromOptions(so)
|
ir, err := NewImageRuntimeFromOptions(so)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
newImage, err := ir.New("busybox", "", "", os.Stdout, nil, SigningOptions{})
|
newImage, err := ir.New("busybox", "", "", os.Stdout, nil, SigningOptions{}, false)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
err = newImage.TagImage("foo:latest")
|
err = newImage.TagImage("foo:latest")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
Reference in New Issue
Block a user