// Search searches in the Docker registry for images that match terms func (r DockerRegistrySearcher) Search(terms ...string) (ComponentMatches, error) { componentMatches := ComponentMatches{} for _, term := range terms { ref, err := imageapi.ParseDockerImageReference(term) if err != nil { return nil, err } glog.V(4).Infof("checking Docker registry for %q, allow-insecure=%v", ref.String(), r.AllowInsecure) connection, err := r.Client.Connect(ref.Registry, r.AllowInsecure) if err != nil { if dockerregistry.IsRegistryNotFound(err) { return nil, ErrNoMatch{value: term} } return nil, fmt.Errorf("can't connect to %q: %v", ref.Registry, err) } image, err := connection.ImageByTag(ref.Namespace, ref.Name, ref.Tag) if err != nil { if dockerregistry.IsNotFound(err) { if dockerregistry.IsTagNotFound(err) { glog.V(4).Infof("tag not found: %v", err) } continue } return nil, fmt.Errorf("can't connect to %q: %v", ref.Registry, err) } if len(ref.Tag) == 0 { ref.Tag = imageapi.DefaultImageTag } if len(ref.Registry) == 0 { ref.Registry = "Docker Hub" } glog.V(4).Infof("found image: %#v", image) dockerImage := &imageapi.DockerImage{} if err = kapi.Scheme.Convert(&image.Image, dockerImage); err != nil { return nil, err } match := &ComponentMatch{ Value: term, Argument: fmt.Sprintf("--docker-image=%q", term), Name: term, Description: descriptionFor(dockerImage, term, ref.Registry, ref.Tag), Score: 0, Image: dockerImage, ImageTag: ref.Tag, Insecure: r.AllowInsecure, Meta: map[string]string{"registry": ref.Registry}, } glog.V(2).Infof("Adding %s as component match for %q with score %v", match.Description, term, match.Score) componentMatches = append(componentMatches, match) } return componentMatches, nil }
// Resolve searches the docker registry for repositories matching the passed in value func (r DockerRegistryResolver) Resolve(value string) (*ComponentMatch, error) { ref, err := imageapi.ParseDockerImageReference(value) if err != nil { return nil, err } glog.V(4).Infof("checking Docker registry for %q", ref.String()) connection, err := r.Client.Connect(ref.Registry, r.AllowInsecure) if err != nil { if dockerregistry.IsRegistryNotFound(err) { return nil, ErrNoMatch{value: value} } return nil, ErrNoMatch{value: value, qualifier: fmt.Sprintf("can't connect to %q: %v", ref.Registry, err)} } image, err := connection.ImageByTag(ref.Namespace, ref.Name, ref.Tag) if err != nil { if dockerregistry.IsNotFound(err) { return nil, ErrNoMatch{value: value, qualifier: err.Error()} } return nil, ErrNoMatch{value: value, qualifier: fmt.Sprintf("can't connect to %q: %v", ref.Registry, err)} } if len(ref.Tag) == 0 { ref.Tag = imageapi.DefaultImageTag } glog.V(4).Infof("found image: %#v", image) dockerImage := &imageapi.DockerImage{} if err = kapi.Scheme.Convert(image, dockerImage); err != nil { return nil, err } if len(ref.Registry) == 0 { ref.Registry = "Docker Hub" } return &ComponentMatch{ Value: value, Argument: fmt.Sprintf("--docker-image=%q", value), Name: value, Description: descriptionFor(dockerImage, value, ref.Registry), Builder: IsBuilderImage(dockerImage), Score: 0, Image: dockerImage, ImageTag: ref.Tag, }, nil }