diff options
author | baude <bbaude@redhat.com> | 2018-09-26 13:19:45 -0500 |
---|---|---|
committer | baude <bbaude@redhat.com> | 2018-09-28 12:48:54 -0500 |
commit | a931c441043cfc2f03be1d8b92dc5b31b2d2ca4b (patch) | |
tree | f1df3583f8799b0adf8a32ee58d30239d89247a2 | |
parent | ca8469aace64d71fdb1849607d8227c31a3cf4da (diff) | |
download | podman-a931c441043cfc2f03be1d8b92dc5b31b2d2ca4b.tar.gz podman-a931c441043cfc2f03be1d8b92dc5b31b2d2ca4b.tar.bz2 podman-a931c441043cfc2f03be1d8b92dc5b31b2d2ca4b.zip |
run complex image names with short names
In cases where the image name is more complex like:
quay/baude/alpine_nginx:latest and is not from the docker
registry, we need to be able to run the image by its shortname
such as baude/alpine_nginx. The same goes when the image is
not from a registry but instead has the localhost repository.
This resolves buildah issue #1034
Signed-off-by: baude <bbaude@redhat.com>
-rw-r--r-- | libpod/image/image.go | 27 | ||||
-rw-r--r-- | test/e2e/run_test.go | 22 |
2 files changed, 29 insertions, 20 deletions
diff --git a/libpod/image/image.go b/libpod/image/image.go index 2c70c6316..197a83dc1 100644 --- a/libpod/image/image.go +++ b/libpod/image/image.go @@ -239,6 +239,7 @@ func (i *Image) getLocalImage() (*storage.Image, error) { if err != nil { return nil, err } + // the inputname isn't tagged, so we assume latest and try again if !decomposedImage.isTagged { taggedName = fmt.Sprintf("%s:latest", i.InputName) @@ -247,15 +248,14 @@ func (i *Image) getLocalImage() (*storage.Image, error) { return img.image, nil } } - hasReg, err := i.hasRegistry() - if err != nil { - return nil, errors.Wrapf(err, imageError) - } - // if the input name has a registry in it, the image isnt here - if hasReg { + // The image has a registry name in it and we made sure we looked for it locally + // with a tag. It cannot be local. + if decomposedImage.hasRegistry { return nil, errors.Errorf("%s", imageError) + } + // if the image is saved with the repository localhost, searching with localhost prepended is necessary // We don't need to strip the sha because we have already determined it is not an ID img, err = i.imageruntime.getImage(fmt.Sprintf("%s/%s", DefaultLocalRegistry, i.InputName)) @@ -274,21 +274,8 @@ func (i *Image) getLocalImage() (*storage.Image, error) { if err == nil { return repoImage, nil } - return nil, errors.Wrapf(err, imageError) -} -// hasRegistry returns a bool/err response if the image has a registry in its -// name -func (i *Image) hasRegistry() (bool, error) { - imgRef, err := reference.Parse(i.InputName) - if err != nil { - return false, err - } - registry := reference.Domain(imgRef.(reference.Named)) - if registry != "" { - return true, nil - } - return false, nil + return nil, errors.Wrapf(err, imageError) } // ID returns the image ID as a string diff --git a/test/e2e/run_test.go b/test/e2e/run_test.go index 4339e0f5c..777b49cd8 100644 --- a/test/e2e/run_test.go +++ b/test/e2e/run_test.go @@ -42,6 +42,28 @@ var _ = Describe("Podman run", func() { Expect(session.ExitCode()).To(Equal(0)) }) + It("podman run a container based on a complex local image name", func() { + podmanTest.RestoreArtifact(nginx) + session := podmanTest.Podman([]string{"run", "baude/alpine_nginx:latest", "ls"}) + session.WaitWithDefaultTimeout() + Expect(session.ErrorToString()).ToNot(ContainSubstring("Trying to pull")) + Expect(session.ExitCode()).To(Equal(0)) + }) + + It("podman run a container based on on a short name with localhost", func() { + podmanTest.RestoreArtifact(nginx) + tag := podmanTest.Podman([]string{"tag", nginx, "localhost/baude/alpine_nginx:latest"}) + tag.WaitWithDefaultTimeout() + + rmi := podmanTest.Podman([]string{"rmi", nginx}) + rmi.WaitWithDefaultTimeout() + + session := podmanTest.Podman([]string{"run", "baude/alpine_nginx:latest", "ls"}) + session.WaitWithDefaultTimeout() + Expect(session.ErrorToString()).ToNot(ContainSubstring("Trying to pull")) + Expect(session.ExitCode()).To(Equal(0)) + }) + It("podman run a container based on local image with short options", func() { session := podmanTest.Podman([]string{"run", "-dt", ALPINE, "ls"}) session.WaitWithDefaultTimeout() |