diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2020-06-20 05:57:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-20 05:57:25 -0400 |
commit | f403aa3baa23a64e7d6bf3fcbc815644d95b768d (patch) | |
tree | ae757f33f5fe2efc4351e5983a8e864cec68250a | |
parent | 60425c96d06c9666e8ba310579a08173aee81839 (diff) | |
parent | b05888a97dbb45a205ff535538ecdd91a19c6ae3 (diff) | |
download | podman-f403aa3baa23a64e7d6bf3fcbc815644d95b768d.tar.gz podman-f403aa3baa23a64e7d6bf3fcbc815644d95b768d.tar.bz2 podman-f403aa3baa23a64e7d6bf3fcbc815644d95b768d.zip |
Merge pull request #6621 from vrothberg/bz-1846629
search: allow wildcards
-rw-r--r-- | libpod/image/search.go | 17 | ||||
-rw-r--r-- | pkg/registries/registries.go | 16 | ||||
-rw-r--r-- | test/e2e/search_test.go | 12 |
3 files changed, 22 insertions, 23 deletions
diff --git a/libpod/image/search.go b/libpod/image/search.go index f8d45d576..72dba668f 100644 --- a/libpod/image/search.go +++ b/libpod/image/search.go @@ -64,13 +64,16 @@ type SearchFilter struct { // SearchImages searches images based on term and the specified SearchOptions // in all registries. func SearchImages(term string, options SearchOptions) ([]SearchResult, error) { - // Check if search term has a registry in it - registry, err := sysreg.GetRegistry(term) - if err != nil { - return nil, errors.Wrapf(err, "error getting registry from %q", term) - } - if registry != "" { - term = term[len(registry)+1:] + registry := "" + + // Try to extract a registry from the specified search term. We + // consider everything before the first slash to be the registry. Note + // that we cannot use the reference parser from the containers/image + // library as the search term may container arbitrary input such as + // wildcards. See bugzilla.redhat.com/show_bug.cgi?id=1846629. + if spl := strings.SplitN(term, "/", 2); len(spl) > 1 { + registry = spl[0] + term = spl[1] } registries, err := getRegistries(registry) diff --git a/pkg/registries/registries.go b/pkg/registries/registries.go index ba7de7cf9..4827b7012 100644 --- a/pkg/registries/registries.go +++ b/pkg/registries/registries.go @@ -3,12 +3,10 @@ package registries import ( "os" "path/filepath" - "strings" "github.com/containers/image/v5/pkg/sysregistriesv2" "github.com/containers/image/v5/types" "github.com/containers/libpod/pkg/rootless" - "github.com/docker/distribution/reference" "github.com/pkg/errors" ) @@ -77,17 +75,3 @@ func GetInsecureRegistries() ([]string, error) { } return insecureRegistries, nil } - -// GetRegistry returns the registry name from a string if specified -func GetRegistry(image string) (string, error) { - // It is possible to only have the registry name in the format "myregistry/" - // if so, just trim the "/" from the end and return the registry name - if strings.HasSuffix(image, "/") { - return strings.TrimSuffix(image, "/"), nil - } - imgRef, err := reference.Parse(image) - if err != nil { - return "", err - } - return reference.Domain(imgRef.(reference.Named)), nil -} diff --git a/test/e2e/search_test.go b/test/e2e/search_test.go index 9ba0241fe..4e37f7d7a 100644 --- a/test/e2e/search_test.go +++ b/test/e2e/search_test.go @@ -400,4 +400,16 @@ registries = ['{{.Host}}:{{.Port}}']` search.WaitWithDefaultTimeout() Expect(search.ExitCode()).To(Not(Equal(0))) }) + + It("podman search with wildcards", func() { + search := podmanTest.Podman([]string{"search", "--limit", "30", "registry.redhat.io/*"}) + search.WaitWithDefaultTimeout() + Expect(search.ExitCode()).To(Equal(0)) + Expect(len(search.OutputToStringArray())).To(Equal(31)) + + search = podmanTest.Podman([]string{"search", "registry.redhat.io/*openshift*"}) + search.WaitWithDefaultTimeout() + Expect(search.ExitCode()).To(Equal(0)) + Expect(len(search.OutputToStringArray()) > 1).To(BeTrue()) + }) }) |