summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndre Guedes <andrebsguedes@gmail.com>2016-11-02 00:33:35 -0200
committerAndre Guedes <andrebsguedes@gmail.com>2017-02-22 11:29:06 -0300
commitdcd4beb8eb7bb7d0c2f720ef85c3da9f97a3dfe6 (patch)
tree53cc8f6d1f055a88aec411608cba51460b001e1c /lib
parente43b2e81dab3cade773d479f2ae56478e3113207 (diff)
downloadgitlab-ce-dcd4beb8eb7bb7d0c2f720ef85c3da9f97a3dfe6.tar.gz
Multi-level container image names backend implementation
- Adds Registry events API endpoint - Adds container_images_repository and container_images models - Changes JWT authentication to allow multi-level scopes - Adds services for container image maintenance
Diffstat (limited to 'lib')
-rw-r--r--lib/api/api.rb1
-rw-r--r--lib/api/registry_events.rb52
-rw-r--r--lib/container_registry/client.rb4
-rw-r--r--lib/container_registry/tag.rb8
4 files changed, 60 insertions, 5 deletions
diff --git a/lib/api/api.rb b/lib/api/api.rb
index a0282ff8deb..ed775f898d2 100644
--- a/lib/api/api.rb
+++ b/lib/api/api.rb
@@ -84,6 +84,7 @@ module API
mount ::API::Namespaces
mount ::API::Notes
mount ::API::NotificationSettings
+ mount ::API::RegistryEvents
mount ::API::Pipelines
mount ::API::ProjectHooks
mount ::API::Projects
diff --git a/lib/api/registry_events.rb b/lib/api/registry_events.rb
new file mode 100644
index 00000000000..c0473051424
--- /dev/null
+++ b/lib/api/registry_events.rb
@@ -0,0 +1,52 @@
+module API
+ # RegistryEvents API
+ class RegistryEvents < Grape::API
+ # before { authenticate! }
+
+ content_type :json, 'application/vnd.docker.distribution.events.v1+json'
+
+ params do
+ requires :events, type: Array, desc: 'The ID of a project' do
+ requires :id, type: String, desc: 'The ID of the event'
+ requires :timestamp, type: String, desc: 'Timestamp of the event'
+ requires :action, type: String, desc: 'Action performed by event'
+ requires :target, type: Hash, desc: 'Target of the event' do
+ optional :mediaType, type: String, desc: 'Media type of the target'
+ optional :size, type: Integer, desc: 'Size in bytes of the target'
+ requires :digest, type: String, desc: 'Digest of the target'
+ requires :repository, type: String, desc: 'Repository of target'
+ optional :url, type: String, desc: 'Url of the target'
+ optional :tag, type: String, desc: 'Tag of the target'
+ end
+ requires :request, type: Hash, desc: 'Request of the event' do
+ requires :id, type: String, desc: 'The ID of the request'
+ optional :addr, type: String, desc: 'IP Address of the request client'
+ optional :host, type: String, desc: 'Hostname of the registry instance'
+ requires :method, type: String, desc: 'Request method'
+ requires :useragent, type: String, desc: 'UserAgent header of the request'
+ end
+ requires :actor, type: Hash, desc: 'Actor that initiated the event' do
+ optional :name, type: String, desc: 'Actor name'
+ end
+ requires :source, type: Hash, desc: 'Source of the event' do
+ optional :addr, type: String, desc: 'Hostname of source registry node'
+ optional :instanceID, type: String, desc: 'Source registry node instanceID'
+ end
+ end
+ end
+ resource :registry_events do
+ post do
+ params['events'].each do |event|
+ repository = event['target']['repository']
+
+ if event['action'] == 'push' and !!event['target']['tag']
+ namespace, container_image_name = ContainerImage::split_namespace(repository)
+ ::ContainerImagesRepositories::ContainerImages::PushService.new(
+ Project::find_with_namespace(namespace), current_user
+ ).execute(container_image_name, event)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/container_registry/client.rb b/lib/container_registry/client.rb
index 2edddb84fc3..2cbb7bfb67d 100644
--- a/lib/container_registry/client.rb
+++ b/lib/container_registry/client.rb
@@ -15,6 +15,10 @@ module ContainerRegistry
@options = options
end
+ def update_token(token)
+ @options[:token] = token
+ end
+
def repository_tags(name)
response_body faraday.get("/v2/#{name}/tags/list")
end
diff --git a/lib/container_registry/tag.rb b/lib/container_registry/tag.rb
index 59040199920..68dd87c979d 100644
--- a/lib/container_registry/tag.rb
+++ b/lib/container_registry/tag.rb
@@ -22,9 +22,7 @@ module ContainerRegistry
end
def manifest
- return @manifest if defined?(@manifest)
-
- @manifest = client.repository_manifest(repository.name, name)
+ @manifest ||= client.repository_manifest(repository.name_with_namespace, name)
end
def path
@@ -40,7 +38,7 @@ module ContainerRegistry
def digest
return @digest if defined?(@digest)
- @digest = client.repository_tag_digest(repository.name, name)
+ @digest = client.repository_tag_digest(repository.name_with_namespace, name)
end
def config_blob
@@ -82,7 +80,7 @@ module ContainerRegistry
def delete
return unless digest
- client.delete_repository_tag(repository.name, digest)
+ client.delete_repository_tag(repository.name_with_namespace, digest)
end
end
end