docker_registry2 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c6ea58879e9bc75f39640a3db5ace45d46291437
4
- data.tar.gz: 92cc2a0bce7d5fa73a4a6c21da456ac23d25968e
3
+ metadata.gz: c827b61fd48f2bd6359d119f56abcc48be8ccf57
4
+ data.tar.gz: b73fec0b836cbb3930a44e830c8ef44664d63cd2
5
5
  SHA512:
6
- metadata.gz: be00444d06f0e8e742a28d0f40e4b97e1f62bbbf4803d16d09439215024720f4b145d5fdaf4394956e2490d3215bcf68c21e161e67360b44ebe112d647b26534
7
- data.tar.gz: 5f3ba88b12ad4378c5b20fd554f87f81903b86ac8be4c5fb177e1d69ee09019acef37ea03089e9596c3cd27fb3c2403b24db615592297f2423bd809fe3a9748a
6
+ metadata.gz: eb535e5baa99262fd1a5819a9df3bdf7c9d98a8b13782c1dfecaeff1a05071e9b4c16e9df0d6f6a25749434f5a7280617f7dab458e6b08f94e60bc1c3909cf68
7
+ data.tar.gz: ba4f8dfaa9ef8b3210d317f5cb9d843fc21b60e2a15101f609adb0118ced20b2c8b73ebdf29d0f5d2ee2501aadb6dc8c8f947d27eef016108de357a4cbb23d38
data/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  This is a simple gem that provides direct http access to a docker registry v2 without going through a docker server. You do **not** requires docker installed on your system to provide access.
6
6
 
7
7
  ````ruby
8
- reg = DockerRegistry.connect("https://my.registy.corp.com")
8
+ reg = DockerRegistry2.connect("https://my.registy.corp.com")
9
9
  repos = reg.search("foo/repo")
10
10
  tags = reg.tags("foo/repo")
11
11
  ````
@@ -14,12 +14,20 @@ Supports anonymous access, http authorization and v2 token access.
14
14
 
15
15
  Inspired by https://github.com/rosylilly/docker_registry but written separately.
16
16
 
17
+ #### Note
18
+
19
+ Prior to version 0.4.0, the name used was DockerRegistry. As of 0.4.0 it is DockerRegistry2.
20
+ If you still need DockerRegistry, just create an alias with:
21
+
22
+ ````ruby
23
+ DockerRegistry = DockerRegistry2
24
+ ````
17
25
 
18
26
  ## Installation
19
27
 
20
28
  Add the following to your Gemfile:
21
29
 
22
- gem 'docker_registry2`
30
+ gem 'docker_registry2'
23
31
 
24
32
  And execute:
25
33
 
@@ -35,7 +43,7 @@ Once it is installed, you first *open* a connection to a registry, and then *req
35
43
  To connect to a registry:
36
44
 
37
45
  ````ruby
38
- reg = DockerRegistry.connect("https://my.registy.corp.com")
46
+ reg = DockerRegistry2.connect("https://my.registy.corp.com")
39
47
  ````
40
48
 
41
49
  The above will connect anonymously to the registry via the endpoint `https://my.registry.corp.com/v2/`.
@@ -50,7 +58,7 @@ The following exceptions are thrown:
50
58
  If you wish to authenticate, pass a username and password as part of the URL.
51
59
 
52
60
  ````ruby
53
- reg = DockerRegistry.connect("https://myuser:mypass@my.registy.corp.com")
61
+ reg = DockerRegistry2.connect("https://myuser:mypass@my.registy.corp.com")
54
62
  ````
55
63
 
56
64
  The following exceptions are thrown:
@@ -62,7 +70,7 @@ The following exceptions are thrown:
62
70
 
63
71
 
64
72
  ### Requests
65
- Once you have a valid `reg` object return by `DockerRegistry.connect()`, you can make requests. As of this version, only search and tags are supported. Others will be added over time.
73
+ Once you have a valid `reg` object return by `DockerRegistry2.connect()`, you can make requests. As of this version, only search and tags are supported. Others will be added over time.
66
74
 
67
75
 
68
76
  #### search
@@ -239,7 +247,7 @@ The following exceptions are thrown:
239
247
 
240
248
  ### Exceptions
241
249
 
242
- All exceptions thrown inherit from `DockerRegistry::Exception`.
250
+ All exceptions thrown inherit from `DockerRegistry2::Exception`.
243
251
 
244
252
  ## Tests
245
253
  The simplest way to test is against a true v2 registry. Thus, the test setup and teardown work against a docker registry. That means that to test, you need a docker engine running. The tests will start up a registry (actually, two registries, to be able to test `copy()`), initialize the data and test against them.
@@ -5,8 +5,8 @@ require 'registry/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'docker_registry2'
8
- spec.version = DockerRegistry::VERSION
9
- spec.authors = ['Avi Deitcher https://github.com/deitch', 'Jonathan Hurter https://github.com/johnsudaar']
8
+ spec.version = DockerRegistry2::VERSION
9
+ spec.authors = ['Avi Deitcher https://github.com/deitch', 'Jonathan Hurter https://github.com/johnsudaar', 'Dmitry Fleytman https://github.com/dmitryfleytman']
10
10
  spec.summary = 'Docker v2 registry HTTP API client'
11
11
  spec.description = 'Docker v2 registry HTTP API client with support for token authentication'
12
12
  spec.homepage = 'https://github.com/deitch/docker_registry2'
@@ -3,9 +3,9 @@ require File.dirname(__FILE__) + '/registry/registry'
3
3
  require File.dirname(__FILE__) + '/registry/exceptions'
4
4
 
5
5
 
6
- module DockerRegistry
6
+ module DockerRegistry2
7
7
  def self.connect(uri)
8
- @reg = DockerRegistry::Registry.new(uri)
8
+ @reg = DockerRegistry2::Registry.new(uri)
9
9
  end
10
10
 
11
11
  def self.search(query = '')
@@ -1,4 +1,4 @@
1
- module DockerRegistry
1
+ module DockerRegistry2
2
2
  class Exception < RuntimeError
3
3
 
4
4
  end
@@ -2,7 +2,7 @@ require 'fileutils'
2
2
  require 'rest-client'
3
3
  require 'json'
4
4
 
5
- class DockerRegistry::Registry
5
+ class DockerRegistry2::Registry
6
6
  # @param [#to_s] base_uri Docker registry base URI
7
7
  # @param [Hash] options Client options
8
8
  # @option options [#to_s] :user User name for basic authentication
@@ -53,7 +53,7 @@ class DockerRegistry::Registry
53
53
  else
54
54
  begin
55
55
  head = dohead "/v2/#{repo}/manifests/#{tag}"
56
- rescue DockerRegistry::InvalidMethod
56
+ rescue DockerRegistry2::InvalidMethod
57
57
  # in case we are in a registry pre-2.3.0, which did not support manifest HEAD
58
58
  useGet = true
59
59
  head = doget "/v2/#{repo}/manifests/#{tag}"
@@ -95,49 +95,64 @@ class DockerRegistry::Registry
95
95
  end
96
96
 
97
97
  private
98
- def doreq(type,url)
98
+ def doreq(type,url,stream=nil)
99
99
  begin
100
- response = RestClient::Request.execute method: type, url: @base_uri+url
100
+ block = stream.nil? ? nil : proc { |response|
101
+ response.read_body do |chunk|
102
+ stream.write chunk
103
+ end
104
+ }
105
+ response = RestClient::Request.execute method: type, url: @base_uri+url, headers: {Accept: 'application/vnd.docker.distribution.manifest.v2+json'}, block_response: block
101
106
  rescue SocketError
102
- raise DockerRegistry::RegistryUnknownException
107
+ raise DockerRegistry2::RegistryUnknownException
103
108
  rescue RestClient::Unauthorized => e
104
109
  header = e.response.headers[:www_authenticate]
105
110
  method = header.downcase.split(' ')[0]
106
111
  case method
107
112
  when 'basic'
108
- response = do_basic_req(type, url)
113
+ response = do_basic_req(type, url, stream)
109
114
  when 'bearer'
110
- response = do_bearer_req(type, url, header)
115
+ response = do_bearer_req(type, url, header, stream)
111
116
  else
112
- raise DockerRegistry::RegistryUnknownException
117
+ raise DockerRegistry2::RegistryUnknownException
113
118
  end
114
119
  end
115
120
  return response
116
121
  end
117
122
 
118
- def do_basic_req(type, url)
123
+ def do_basic_req(type, url, stream=nil)
119
124
  begin
120
- response = RestClient::Request.execute method: type, url: @base_uri+url, user: @user, password: @password
125
+ block = stream.nil? ? nil : proc { |response|
126
+ response.read_body do |chunk|
127
+ stream.write chunk
128
+ end
129
+ }
130
+ response = RestClient::Request.execute method: type, url: @base_uri+url, user: @user, password: @password, headers: {Accept: 'application/vnd.docker.distribution.manifest.v2+json'}, block_response: block
121
131
  rescue SocketError
122
- raise DockerRegistry::RegistryUnknownException
132
+ raise DockerRegistry2::RegistryUnknownException
123
133
  rescue RestClient::Unauthorized
124
- raise DockerRegistry::RegistryAuthenticationException
134
+ raise DockerRegistry2::RegistryAuthenticationException
125
135
  rescue RestClient::MethodNotAllowed
126
- raise DockerRegistry::InvalidMethod
136
+ raise DockerRegistry2::InvalidMethod
127
137
  end
128
138
  return response
129
139
  end
130
140
 
131
- def do_bearer_req(type, url, header)
141
+ def do_bearer_req(type, url, header, stream=false)
132
142
  token = authenticate_bearer(header)
133
143
  begin
134
- response = RestClient::Request.execute method: type, url: @base_uri+url, headers: {Authorization: 'Bearer '+token}
144
+ block = stream.nil? ? nil : proc { |response|
145
+ response.read_body do |chunk|
146
+ stream.write chunk
147
+ end
148
+ }
149
+ response = RestClient::Request.execute method: type, url: @base_uri+url, headers: {Authorization: 'Bearer '+token, Accept: 'application/vnd.docker.distribution.manifest.v2+json'}, block_response: block
135
150
  rescue SocketError
136
- raise DockerRegistry::RegistryUnknownException
151
+ raise DockerRegistry2::RegistryUnknownException
137
152
  rescue RestClient::Unauthorized
138
- raise DockerRegistry::RegistryAuthenticationException
153
+ raise DockerRegistry2::RegistryAuthenticationException
139
154
  rescue RestClient::MethodNotAllowed
140
- raise DockerRegistry::InvalidMethod
155
+ raise DockerRegistry2::InvalidMethod
141
156
  end
142
157
 
143
158
  return response
@@ -158,7 +173,7 @@ class DockerRegistry::Registry
158
173
  response = RestClient.get uri.to_s, {params: target[:params]}
159
174
  rescue RestClient::Unauthorized
160
175
  # bad authentication
161
- raise DockerRegistry::RegistryAuthenticationException
176
+ raise DockerRegistry2::RegistryAuthenticationException
162
177
  end
163
178
  # now save the web token
164
179
  return JSON.parse(response)["token"]
@@ -1,3 +1,3 @@
1
- module DockerRegistry
2
- VERSION = '0.3.0'
1
+ module DockerRegistry2
2
+ VERSION = '0.4.0'
3
3
  end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker_registry2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Avi Deitcher https://github.com/deitch
8
8
  - Jonathan Hurter https://github.com/johnsudaar
9
+ - Dmitry Fleytman https://github.com/dmitryfleytman
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2016-02-24 00:00:00.000000000 Z
13
+ date: 2017-02-27 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: bundler
@@ -101,9 +102,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
102
  version: '0'
102
103
  requirements: []
103
104
  rubyforge_project:
104
- rubygems_version: 2.4.5
105
+ rubygems_version: 2.4.8
105
106
  signing_key:
106
107
  specification_version: 4
107
108
  summary: Docker v2 registry HTTP API client
108
109
  test_files: []
109
- has_rdoc: