summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-04-07 17:20:02 +0200
committerKamil Trzcinski <ayufan@ayufan.eu>2016-04-07 17:20:02 +0200
commit5a98f16d37db7077192770594ec68d74c1c0f6b5 (patch)
treece9e1fd4bc37d091a5b2bafad333d60aa9c3895f
parent902f227f380b0b756d7689b70e607d5abfa210d1 (diff)
downloadgitlab-ce-5a98f16d37db7077192770594ec68d74c1c0f6b5.tar.gz
Make docker registry to work
-rw-r--r--app/controllers/projects/images_controller.rb9
-rw-r--r--app/models/ci/build.rb1
-rw-r--r--app/models/project.rb4
-rw-r--r--app/models/registry.rb8
-rw-r--r--app/views/projects/images/index.html.haml17
-rw-r--r--app/views/projects/images/show.html.haml2
-rw-r--r--config/registry.yml2
-rw-r--r--config/routes.rb2
-rw-r--r--db/migrate/20160407120251_add_images_enabled_for_project.rb5
-rw-r--r--lib/registry_client.rb8
10 files changed, 43 insertions, 15 deletions
diff --git a/app/controllers/projects/images_controller.rb b/app/controllers/projects/images_controller.rb
index 1cbd216981b..5b10746aa0d 100644
--- a/app/controllers/projects/images_controller.rb
+++ b/app/controllers/projects/images_controller.rb
@@ -8,14 +8,9 @@ class Projects::ImagesController < Projects::ApplicationController
@tags = registry.tags
end
- def show
- respond_to do |format|
- format.html
- end
- end
-
def destroy
- registry.destroy_tag(params[:id].to_s)
+ # registry.destroy_tag(tag['fsLayers'].first['blobSum'])
+ registry.destroy_tag(registry.tag_digest(params[:id]))
redirect_to namespace_project_images_path(project.namespace, project)
end
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index d497cf67cbc..8a8b1c175b2 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -403,6 +403,7 @@ module Ci
variables << { key: :CI_BUILD_NAME, value: name, public: true }
variables << { key: :CI_BUILD_STAGE, value: stage, public: true }
variables << { key: :CI_BUILD_TRIGGERED, value: 'true', public: true } if trigger_request
+ variables << { key: :CI_DOCKER_REGISTRY, value: project.registry_repository_url, public: true } if project.registry_repository_url
variables
end
end
diff --git a/app/models/project.rb b/app/models/project.rb
index ae636ac2cf4..5b22da7d6fa 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -374,6 +374,10 @@ class Project < ActiveRecord::Base
@registry ||= Registry.new(path_with_namespace, self)
end
+ def registry_repository_url
+ "#{Gitlab.config.registry.host_with_port}/#{path_with_namespace}" if images_enabled? && Gitlab.config.registry.enabled
+ end
+
def commit(id = 'HEAD')
repository.commit(id)
end
diff --git a/app/models/registry.rb b/app/models/registry.rb
index 554060250ac..b4ef60a016f 100644
--- a/app/models/registry.rb
+++ b/app/models/registry.rb
@@ -18,12 +18,18 @@ class Registry
@tag[reference] ||= client.tag(path_with_namespace, reference)
end
+ def tag_digest(reference)
+ return @tag_digest[reference] if defined?(@tag_digest[reference])
+ @tag_digest ||= {}
+ @tag_digest[reference] ||= client.tag_digest(path_with_namespace, reference)
+ end
+
def destroy_tag(reference)
client.delete_tag(path_with_namespace, reference)
end
def blob_size(blob)
- return @blob_size[reference] if defined?(@blob_size[blob])
+ return @blob_size[blob] if defined?(@blob_size[blob])
@blob_size ||= {}
@blob_size[blob] ||= client.blob_size(path_with_namespace, blob)
end
diff --git a/app/views/projects/images/index.html.haml b/app/views/projects/images/index.html.haml
index 997d9822409..338f3e5662c 100644
--- a/app/views/projects/images/index.html.haml
+++ b/app/views/projects/images/index.html.haml
@@ -19,19 +19,30 @@
%th Name
%th Layers
%th Size
+ %th Created
+ %th Docker
%th
- - @tags.each do |tag|
+ - @tags.sort.each do |tag|
- details = @registry.tag(tag)
+ - layer = details['history'].first
+ - if layer && layer['v1Compatibility']
+ - layer_data = JSON.parse(layer['v1Compatibility'])
%tr
%td
= link_to namespace_project_image_path(@project.namespace, @project, tag) do
- = tag
+ #{details['name']}:#{details['tag']}
%td
= details['fsLayers'].length
%td
= number_to_human_size(details['fsLayers'].inject(0) { |sum, d| sum + @registry.blob_size(d['blobSum']) }.bytes)
+ %td
+ - if layer_data
+ = time_ago_in_words(DateTime.rfc3339(layer_data['created']))
+ %td
+ - if layer_data
+ = layer_data['docker_version']
%td.content
.controls.hidden-xs.pull-right
- = link_to namespace_project_image_path(@project.namespace, @project, tag), class: 'btn btn-remove has-tooltip', title: "Remove", method: :delete do
+ = link_to namespace_project_image_path(@project.namespace, @project, tag), class: 'btn btn-remove has-tooltip', title: "Remove", data: { confirm: "Are you sure?" }, method: :delete do
= icon("trash cred")
diff --git a/app/views/projects/images/show.html.haml b/app/views/projects/images/show.html.haml
deleted file mode 100644
index e24e5479d2d..00000000000
--- a/app/views/projects/images/show.html.haml
+++ /dev/null
@@ -1,2 +0,0 @@
-- page_title "#{@tag['name']}", "Image"
-= render "header_title"
diff --git a/config/registry.yml b/config/registry.yml
index bf62b6e4170..9e630bcfdff 100644
--- a/config/registry.yml
+++ b/config/registry.yml
@@ -7,6 +7,8 @@ storage:
blobdescriptor: inmemory
filesystem:
rootdirectory: shared/registry
+ delete:
+ enabled: true
http:
addr: :5000
secret: "shared-registry-secret"
diff --git a/config/routes.rb b/config/routes.rb
index 7bc5c0f28e2..03d5f9758a7 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -687,7 +687,7 @@ Rails.application.routes.draw do
end
end
- resources :images, only: [:index, :show, :destroy], constraints: { id: Gitlab::Regex.image_reference_regex }
+ resources :images, only: [:index, :destroy], constraints: { id: Gitlab::Regex.image_reference_regex }
resources :milestones, constraints: { id: /\d+/ } do
member do
diff --git a/db/migrate/20160407120251_add_images_enabled_for_project.rb b/db/migrate/20160407120251_add_images_enabled_for_project.rb
new file mode 100644
index 00000000000..6a221a7fb03
--- /dev/null
+++ b/db/migrate/20160407120251_add_images_enabled_for_project.rb
@@ -0,0 +1,5 @@
+class AddImagesEnabledForProject < ActiveRecord::Migration
+ def change
+ add_column :projects, :images_enabled, :boolean
+ end
+end
diff --git a/lib/registry_client.rb b/lib/registry_client.rb
index 9f39ca9b5fb..87518a7b39c 100644
--- a/lib/registry_client.rb
+++ b/lib/registry_client.rb
@@ -17,8 +17,14 @@ class RegistryClient
JSON.parse(response)
end
+ def tag_digest(name, reference)
+ response = HTTParty.head("#{uri}/v2/#{name}/manifests/#{reference}")
+ response.headers['docker-content-digest'].split(':')
+ end
+
def delete_tag(name, reference)
- HTTParty.delete("#{uri}/v2/#{name}/manifests/#{reference}")
+ response = HTTParty.delete("#{uri}/v2/#{name}/manifests/#{reference}")
+ response.parsed_response
end
def blob_size(name, digest)