mrm 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f2a7dd74f9c46acef6e0d5546673f75c6cd9cb74
4
- data.tar.gz: 97545e6fa8a005f297c34f27074eb9a9bf3aed2d
3
+ metadata.gz: dae886f51c635387efae02e7df8cdc3f08f4d3f4
4
+ data.tar.gz: 072c996d014c6d956ba27623cd10411fe18fcfa8
5
5
  SHA512:
6
- metadata.gz: 56786525c877e5db33998800b3b9f74717bd37e9b88fc42824773be687c010ef537599f352d257e7edeb13900d4efcbe8b4cac0d344343242076a92875c7fedf
7
- data.tar.gz: c6013c0db1bb3f87f3a9b576ae78f8ea493b151e2c1f8d56bc07442a06bce99ea5e11ea4a7fb2396d64ab83efceaa5e1581cb715938e231aa91c2d9996a667df
6
+ metadata.gz: 4de7e5aef08e6f1359f11cbc0d2ab6e2077add60a58bdfb915e836242bf8a8d39d5e6ee6369ac25b44e091fc774bd6ab22f49fa82a0add4fe4a24846528d4e1b
7
+ data.tar.gz: a1f80f29d3124b87cadaff34ca82ff7b961a25458251b483cdefa7214eed4c32d9fefa3d3975c60c9ea634723a109367351e5ef956011da0b65a01d247dc616d
data/bin/mrm CHANGED
@@ -17,9 +17,15 @@ OptionParser.new do |opts|
17
17
  opts.on('-h', '--help', 'Display this help') do
18
18
  puts opts.to_s.split("\n")
19
19
  puts "\nCommands:"
20
- printf("%-3s %-32s %-15s", '', 'check', "Checks registry availability\n")
21
- printf("%-3s %-32s %-15s", '', 'list', "Shows the list of repositories\n")
22
- printf("%-3s %-5s %-26s %-15s", '', 'list', '*repo_name*', "Lists tags of the specific repository\n")
20
+ [
21
+ ['check', '', '', "Checks registry availability\n"],
22
+ ['list', '', '', "Lists repositories of the registry\n"],
23
+ ['list', '*repo*', '', "Lists tags of the specific repository\n"],
24
+ ['get', '*repo*', '*reference*', "Pulls a manifest for the image\n"],
25
+ ['delete', '*repo*', '*reference*', "Deletes an image from the specific repository\n"]
26
+ ].each do |args|
27
+ printf(" %-7s %-7s %-16s %-20s", *args)
28
+ end
23
29
  abort
24
30
  end
25
31
  end.parse!
@@ -32,6 +38,12 @@ end
32
38
  case ARGV[0]
33
39
  when 'check'
34
40
  client.version_check
41
+ when 'delete'
42
+ puts 'Wrong number of arguments' if ARGV[1].nil? || ARGV[2].nil?
43
+ client.delete_image(ARGV[1], ARGV[2])
44
+ when 'get'
45
+ puts 'Wrong number of arguments' if ARGV[1].nil? || ARGV[2].nil?
46
+ client.get_manifest(ARGV[1], ARGV[2])
35
47
  when 'list'
36
48
  if ARGV[1].nil?
37
49
  client.list_repositories
data/lib/mrm/api.rb CHANGED
@@ -5,16 +5,28 @@ module MRM
5
5
  end
6
6
 
7
7
  def version_check
8
- response = request("#{url}/v2/")
8
+ response = get_request("#{url}/v2/")
9
9
  if response.code == '200'
10
- puts '--> Repository is reachable and accessible.'
10
+ '--> Repository is reachable and accessible.'
11
+ else
12
+ raise ResponseError, response.body
13
+ end
14
+ end
15
+
16
+ def get_manifest(name, reference)
17
+ response = get_request(
18
+ "#{url}/v2/#{name}/manifests/#{reference}",
19
+ { 'Accept' => 'application/vnd.docker.distribution.manifest.v2+json' }
20
+ )
21
+ if response.code == '200'
22
+ JSON.parse(response.body)
11
23
  else
12
24
  raise ResponseError, response.body
13
25
  end
14
26
  end
15
27
 
16
28
  def list_repositories
17
- response = request("#{url}/v2/_catalog")
29
+ response = get_request("#{url}/v2/_catalog")
18
30
  if response.code == '200'
19
31
  JSON.parse(response.body)
20
32
  else
@@ -23,7 +35,7 @@ module MRM
23
35
  end
24
36
 
25
37
  def list_tags(name)
26
- response = request("#{url}/v2/#{name}/tags/list")
38
+ response = get_request("#{url}/v2/#{name}/tags/list")
27
39
  if response.code == '200'
28
40
  JSON.parse(response.body)
29
41
  else
@@ -31,14 +43,35 @@ module MRM
31
43
  end
32
44
  end
33
45
 
46
+ def delete_image(name, reference)
47
+ response = delete_request("#{url}/v2/#{name}/manifests/#{reference}")
48
+ if response.code == '202'
49
+ JSON.parse(response.body)
50
+ else
51
+ raise ResponseError, response.body
52
+ end
53
+ end
54
+
34
55
  private
35
56
  attr_reader :url, :login, :pass
36
57
 
37
- def request(url)
58
+ def get_request(url, headers = {})
38
59
  uri = URI(url)
39
60
  http = Net::HTTP.new(uri.host, uri.port)
40
61
  http.use_ssl = uri.scheme == 'https'
41
62
  request = Net::HTTP::Get.new(uri.request_uri)
63
+ headers.each do |key, value|
64
+ request[key] = value
65
+ end
66
+ request.basic_auth(login, pass)
67
+ http.request(request)
68
+ end
69
+
70
+ def delete_request(url)
71
+ uri = URI(url)
72
+ http = Net::HTTP.new(uri.host, uri.port)
73
+ http.use_ssl = uri.scheme == 'https'
74
+ request = Net::HTTP::Delete.new(uri.request_uri)
42
75
  request.basic_auth(login, pass)
43
76
  http.request(request)
44
77
  end
data/lib/mrm/client.rb CHANGED
@@ -5,7 +5,11 @@ module MRM
5
5
  end
6
6
 
7
7
  def version_check
8
- puts api.version_check
8
+ puts api.version_check.brown
9
+ end
10
+
11
+ def get_manifest(name, reference)
12
+ pp api.get_manifest(name, reference)
9
13
  end
10
14
 
11
15
  def list_repositories
@@ -20,6 +24,10 @@ module MRM
20
24
  end
21
25
  end
22
26
 
27
+ def delete_image(name, reference)
28
+ puts api.delete_image(name, reference)
29
+ end
30
+
23
31
  private
24
32
  attr_reader :config
25
33
 
data/lib/mrm/version.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  module MRM
2
2
  class Version
3
3
  MAJOR = 1
4
- MINOR = 1
5
- PATCH = 1
4
+ MINOR = 2
5
+ PATCH = 0
6
6
  PRE = nil
7
7
 
8
8
  class << self
data/lib/mrm.rb CHANGED
@@ -4,6 +4,7 @@ require 'base64'
4
4
  require 'cgi'
5
5
  require 'json'
6
6
  require 'yaml'
7
+ require 'pp'
7
8
  require 'mrm/colored_output'
8
9
  require 'mrm/client'
9
10
  require 'mrm/api'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mrm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rustam A. Gasanov