Skip to content

Commit d5db1f6

Browse files
author
Tom McKay
committed
fixes #22951 - support docker v2 api
1 parent 263afc6 commit d5db1f6

File tree

9 files changed

+806
-0
lines changed

9 files changed

+806
-0
lines changed

app/controllers/katello/api/registry/registry_proxies_controller.rb

Lines changed: 423 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
require 'katello/util/data'
2+
3+
module Katello
4+
module Resources
5+
require 'rest_client'
6+
7+
module Registry
8+
class Proxy
9+
def self.logger
10+
::Foreman::Logging.logger('katello/registry_proxy')
11+
end
12+
13+
def self.get(path, headers = {:accept => :json})
14+
logger.debug "Sending GET request to Registry: #{path}"
15+
client = RegistryResource.rest_client(Net::HTTP::Get, :get, path)
16+
client.get(headers)
17+
end
18+
end
19+
20+
class RegistryResource < HttpResource
21+
cfg = SETTINGS[:katello][:registry]
22+
url = cfg[:url]
23+
uri = URI.parse(url)
24+
self.prefix = uri.path
25+
self.site = "#{uri.scheme}://#{uri.host}:#{uri.port}"
26+
self.ca_cert_file = cfg[:ca_cert_file]
27+
28+
class << self
29+
def process_response(response)
30+
debug_level = response.code >= 400 ? :error : :debug
31+
logger.send(debug_level, "Registry request returned with code #{response.code}")
32+
super
33+
end
34+
end
35+
end
36+
end
37+
end
38+
end

app/models/katello/repository.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ class Repository < Katello::Model
172172
scoped_search :on => :distribution_uuid, :complete_value => true
173173
scoped_search :on => :ignore_global_proxy, :complete_value => true
174174
scoped_search :on => :redhat, :complete_value => { :true => true, :false => false }, :ext_method => :search_by_redhat
175+
scoped_search :on => :container_repository_name, :complete_value => true
175176

176177
def organization
177178
if self.environment

config/routes/api/registry.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
require 'katello/api/mapper_extensions'
2+
3+
class ActionDispatch::Routing::Mapper
4+
include Katello::Routing::MapperExtensions
5+
end
6+
7+
Katello::Engine.routes.draw do
8+
scope :module => :api do
9+
scope :module => :registry, :constraints => { :tag => /[0-9a-zA-Z\-_.:]*/, :digest => /[0-9a-zA-Z:]*/ } do
10+
match '/v2/token' => 'registry_proxies#token', :via => :get
11+
match '/v2/token' => 'registry_proxies#token', :via => :post
12+
match '/v2/:repository/manifests/:tag' => 'registry_proxies#pull_manifest', :via => :get
13+
match '/v2/:repository/manifests/:tag' => 'registry_proxies#push_manifest', :via => :put
14+
match '/v2/:repository/blobs/:digest' => 'registry_proxies#pull_blob', :via => :get
15+
match '/v2/:repository/blobs/:digest' => 'registry_proxies#check_blob', :via => :head
16+
match '/v2/:repository/blobs/uploads' => 'registry_proxies#start_upload_blob', :via => :post
17+
match '/v2/:repository/blobs/uploads/:uuid' => 'registry_proxies#chunk_upload_blob', :via => :post
18+
match '/v2/:repository/blobs/uploads/:uuid' => 'registry_proxies#finish_upload_blob', :via => :put
19+
match '/v2/:repository/blobs/uploads/:uuid' => 'registry_proxies#upload_blob', :via => :patch
20+
match '/v2/:repository/blobs/uploads/:uuid' => 'registry_proxies#status_upload_blob', :via => :get
21+
match '/v2/:repository/blobs/uploads/:uuid' => 'registry_proxies#cancel_upload_blob', :via => :delete
22+
match '/v2/_catalog' => 'registry_proxies#catalog', :via => :get
23+
match '/v2/:repository/tags/list' => 'registry_proxies#tags_list', :via => :get
24+
match '/v2' => 'registry_proxies#ping', :via => :get
25+
match '/v1/_ping' => 'registry_proxies#v1_ping', :via => :get
26+
match '/v1/search' => 'registry_proxies#v1_search', :via => :get
27+
end
28+
end
29+
end

lib/katello/engine.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ class Engine < ::Rails::Engine
103103
initializer "katello.paths", :before => :sooner_routes_load do |app|
104104
app.routes_reloader.paths << "#{Katello::Engine.root}/config/routes/api/v2.rb"
105105
app.routes_reloader.paths << "#{Katello::Engine.root}/config/routes/api/rhsm.rb"
106+
app.routes_reloader.paths << "#{Katello::Engine.root}/config/routes/api/registry.rb"
106107
app.routes_reloader.paths.unshift("#{Katello::Engine.root}/config/routes/overrides.rb")
107108
end
108109

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
require 'katello/plugin.rb'
2+
3+
Foreman::AccessControl.permission(:create_personal_access_tokens).actions.concat [
4+
'katello/api/registry/registry_proxies/token',
5+
'katello/api/registry/registry_proxies/v1_ping',
6+
'katello/api/registry/registry_proxies/ping',
7+
'katello/api/registry/registry_proxies/v1_search',
8+
'katello/api/registry/registry_proxies/catalog',
9+
'katello/api/registry/registry_proxies/tags_list',
10+
'katello/api/registry/registry_proxies/pull_manifest',
11+
'katello/api/registry/registry_proxies/push_manifest',
12+
'katello/api/registry/registry_proxies/pull_blob',
13+
'katello/api/registry/registry_proxies/check_blob',
14+
'katello/api/registry/registry_proxies/start_upload_blob',
15+
'katello/api/registry/registry_proxies/chunk_upload_blob',
16+
'katello/api/registry/registry_proxies/finish_upload_blob',
17+
'katello/api/registry/registry_proxies/status_upload_blob',
18+
'katello/api/registry/registry_proxies/cancel_upload_blob'
19+
]

lib/katello/plugin.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@
223223
logger :cp_proxy, :enabled => true
224224
logger :action, :enabled => true
225225
logger :manifest_import_logger, :enabled => true
226+
logger :registry_proxy, :enabled => true
226227

227228
widget 'errata_widget', :name => 'Latest Errata', :sizey => 1, :sizex => 6
228229
widget 'content_views_widget', :name => 'Content Views', :sizey => 1, :sizex => 6

0 commit comments

Comments
 (0)