hammer_cli_katello 0.23.0 → 0.23.1

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
  SHA256:
3
- metadata.gz: fc749f1a2a12052143301452900c4026c90428dd29919a6c96ecf7c89e3f1380
4
- data.tar.gz: 6ac74bbf497f7c2ba59c9e0be56b6c6485ec0dee0e81f4757a32e786ab2c1aaf
3
+ metadata.gz: 39b7d013b69ccff473c384efe07fbc1c1574033c074e685be65723f5e3d79156
4
+ data.tar.gz: 9ba014e8f0a515eddfbb66d507483fa8f81b8873c5e670eca78755989bc1f40d
5
5
  SHA512:
6
- metadata.gz: 235309cc66731f8b9b140e60e822782e455eb26080114dc2757d6e4fc2f8f630ed4fc564d6e0aef22f42097c570f118229bc530f2663f8d9606059ce2d90a9fb
7
- data.tar.gz: cabc9b945a49e80ba5712e417d8b621d9fb7a5abd692f933e26b50c404d03356351bb9ae6f6c18e053293f3e06f1c56a43066f2b310b20bb84d9574cfd53f357
6
+ metadata.gz: 32c3e1f7dc2aa8fa32ceba935d7229c7b628bdf9429f6ed1fa036e818d3cca44bfa47d5d2319e7b8b16354688302f6743168fca59aa62c4a956f9ba4206fe74c
7
+ data.tar.gz: d270942a73c21fa9e996f1e0457d82b8e4abc866ddeed5d201d017febfbf9272640144aeacc260387550e8e8e22b36fac80b33b2e7b3d93fad87ff98ee465886
@@ -249,6 +249,13 @@ module HammerCLIKatello
249
249
  if option(:option_product_name).exist?
250
250
  any(*organization_options).required
251
251
  end
252
+
253
+ if option(:option_docker_tag).exist? != option(:option_docker_digest).exist?
254
+ option(:option_docker_tag).rejected(
255
+ :msg => _('--docker-digest required with --docker-tag'))
256
+ option(:option_docker_digest).rejected(
257
+ :msg => _('--docker-tag required with --docker-digest'))
258
+ end
252
259
  end
253
260
 
254
261
  build_options(:without => [:unprotected]) do |o|
@@ -257,12 +264,63 @@ module HammerCLIKatello
257
264
  option "--publish-via-http", "ENABLE", _("Publish Via HTTP"),
258
265
  :attribute_name => :option_unprotected,
259
266
  :format => HammerCLI::Options::Normalizers::Bool.new
267
+ option "--docker-tag", "TAG", _("Container Image tag")
268
+ option "--docker-digest", "DIGEST", _("Container Image manifest digest")
260
269
 
261
270
  def execute
262
271
  @failure = false
263
- super
272
+
273
+ if option_docker_tag
274
+ upload_tag(option_docker_tag, option_docker_digest)
275
+ else
276
+ super
277
+ end
278
+
264
279
  @failure ? HammerCLI::EX_DATAERR : HammerCLI::EX_OK
265
280
  end
281
+
282
+ def content_upload_resource
283
+ ::HammerCLIForeman.foreman_resource(:content_uploads)
284
+ end
285
+
286
+ def upload_tag(tag, digest)
287
+ upload_id = create_content_upload
288
+ import_uploads([
289
+ {
290
+ id: upload_id,
291
+ name: tag,
292
+ digest: digest
293
+ }
294
+ ], last_file: true)
295
+ print_message _("Repository updated")
296
+ rescue => e
297
+ @failure = true
298
+ logger.error e
299
+ output.print_error _("Failed to upload tag '%s' to repository.") % tag
300
+ ensure
301
+ content_upload_resource.call(:destroy, :repository_id => get_identifier, :id => upload_id)
302
+ end
303
+
304
+ def create_content_upload
305
+ response = content_upload_resource.call(:create,
306
+ :repository_id => get_identifier,
307
+ :size => 0
308
+ )
309
+
310
+ response["upload_id"]
311
+ end
312
+
313
+ def import_uploads(uploads, opts = {})
314
+ publish_repository = opts.fetch(:last_file, false)
315
+ sync_capsule = opts.fetch(:last_file, false)
316
+ params = {:id => get_identifier,
317
+ :uploads => uploads,
318
+ publish_repository: publish_repository,
319
+ sync_capsule: sync_capsule,
320
+ content_type: "docker_tag"
321
+ }
322
+ resource.call(:import_uploads, params)
323
+ end
266
324
  end
267
325
 
268
326
  class DeleteCommand < HammerCLIKatello::DeleteCommand
@@ -1,5 +1,5 @@
1
1
  module HammerCLIKatello
2
2
  def self.version
3
- @version ||= Gem::Version.new('0.23.0')
3
+ @version ||= Gem::Version.new('0.23.1')
4
4
  end
5
5
  end
@@ -2,7 +2,7 @@ require_relative '../test_helper'
2
2
  require_relative '../organization/organization_helpers'
3
3
  require 'hammer_cli_katello/repository'
4
4
 
5
- module HammerCLIKatello
5
+ module HammerCLIKatello # rubocop:disable Metrics/ModuleLength
6
6
  describe Repository::UpdateCommand do
7
7
  include OrganizationHelpers
8
8
 
@@ -14,6 +14,46 @@ module HammerCLIKatello
14
14
  run_cmd(%w(repository update --id 1 --new-name rep1))
15
15
  end
16
16
 
17
+ describe 'tags docker images' do
18
+ let(:repo_id) { 3 }
19
+ let(:tag_name) { "latest" }
20
+ let(:digest) { "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }
21
+ let(:upload_id) { "1234" }
22
+ let(:_href) { "/pulp/api/v2/content/uploads/#{upload_id}" }
23
+ let(:upload_response) do
24
+ {
25
+ "upload_id" => upload_id,
26
+ "_href" => _href
27
+ }
28
+ end
29
+ it "adds a tag to an image" do
30
+ ex = api_expects(:content_uploads, :create)
31
+ .with_params('repository_id' => repo_id, :size => 0)
32
+
33
+ ex.returns(upload_response)
34
+ ex2 = api_expects(:repositories, :import_uploads, 'Take in an upload')
35
+ .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true,
36
+ :uploads => [{
37
+ :id => '1234',
38
+ :name => tag_name,
39
+ :digest => digest
40
+ }],
41
+ :content_type => "docker_tag"
42
+ )
43
+
44
+ ex2.returns("")
45
+
46
+ ex3 = api_expects(:content_uploads, :destroy, "Delete the upload")
47
+ .with_params('id' => upload_id, 'repository_id' => repo_id)
48
+
49
+ ex3.returns("")
50
+ # rubocop:disable LineLength
51
+ result = run_cmd(%W(repository update --id #{repo_id} --docker-tag #{tag_name} --docker-digest #{digest}))
52
+ # rubocop:enable LineLength
53
+ assert_equal(result.exit_code, 0)
54
+ end
55
+ end
56
+
17
57
  describe 'resolves repository ID' do
18
58
  it 'by requiring product' do
19
59
  api_expects_no_call
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hammer_cli_katello
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.0
4
+ version: 0.23.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Price
@@ -35,7 +35,7 @@ authors:
35
35
  autorequire:
36
36
  bindir: bin
37
37
  cert_chain: []
38
- date: 2020-09-02 00:00:00.000000000 Z
38
+ date: 2020-09-21 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: hammer_cli_foreman
@@ -518,7 +518,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
518
518
  - !ruby/object:Gem::Version
519
519
  version: '0'
520
520
  requirements: []
521
- rubygems_version: 3.0.8
521
+ rubygems_version: 3.1.2
522
522
  signing_key:
523
523
  specification_version: 4
524
524
  summary: Katello commands for Hammer