Project

General

Profile

Revision c36fdec1

Added by Partha Aji almost 8 years ago

Fixes #10404 - Finds correct repo name for Docker Hub registry

Bug is stated as follows
on centos 7 ->

$ docker version
Client version: 1.5.0-dev
Client API version: 1.18
Go version (client): go1.3.3

$ docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io: docker.io/centos The official build of CentOS. 978 [OK]
docker.io: docker.io/ansible/centos7-ansible Ansible on Centos7 40 [OK]
.....

On fedora 20 ->
$ docker version
Client version: 1.5.0
Client API version: 1.17

$ docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 978 [OK]
ansible/centos7-ansible Ansible on Centos7 40 [OK]
......

Note the "docker.io: " prefix for the centos 7 name columns
http://rhelblog.redhat.com/2015/04/15/understanding-the-changes-to-docker-search-and-docker-pull-in-red-hat-enterprise-linux-7-1/
has details on why thats the case.

When you ask foreman-docker "search centos from docker hub", it gives
you different names based on whether the docker compute resource is
running on el7 or fedora 20. You then select an image and it shows the
tags for that. Based on your selections it picks "NAME" as the repo name
and chooses the tag. This works for docker compute instance running on
f20 and used to work for docker instance on el7.

Anyway problem is simple -> "docker.io: docker.io/centos" is not a valid
repo name. So foreman-docker has to somehow infer that
"docker.io/centos" is what the repo name should be and strip out
"docker.io: " while it should some how also work for
"my-other-registry.com:4000/cool-repo" and not strip out
"my-other-registry.com:4000".

This commit achieves to do that.

Also removing the hub_url code generation code because we'd need some
logic that converts docker.io/_/centos to
hub.registry.docker.com/_centos_/ and also work for rhel and regular
cases.

View differences:

app/controllers/image_search_controller.rb
60 60
  end
61 61

  
62 62
  def hub_search_image(terms)
63
    @compute_resource.search(terms)
63
    @compute_resource.search(terms).map do |item|
64
      # el7 returns -> "name" => "docker.io: docker.io/centos",
65
      # while f20 returns -> "name" => "centos"
66
      # we need repo name to be => "docker.io/centos" for el7 and "centos" for fedora
67
      # to ensure proper search with respect to the tags, image creation etc.
68
      new_item = item.clone
69
      new_item["name"] = item["name"].split.last
70
      new_item
71
    end
64 72
  end
65 73

  
66 74
  def registry_image_exists?(term)

Also available in: Unified diff