hammer_cli_katello 1.3.1 → 1.4.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
  SHA256:
3
- metadata.gz: 9299bc667628d32e5cdabeb70fff4b381bd71664bb999abede682076e8b1b82a
4
- data.tar.gz: 0b6db8c43b4a4994dd78063760bf57801c14cc1cc88fb727d6fffeb36085ed47
3
+ metadata.gz: 0a00c7f5dd067ab0cc8203da1989be46411dc15ed1079442b38bf27e4c1c5eef
4
+ data.tar.gz: 4088650b9e19e79031e912cfc1f3c49ec11ef448e41c5c97cb41820fe5474bcc
5
5
  SHA512:
6
- metadata.gz: 54ebe7f1d033e4d15a965d731947684e13fc52e74aa9838e5e4ed821ea76f724d02a0b8cf67b16198e563b2732b53ef2a75de0c20e4e69809de52b16994475d0
7
- data.tar.gz: f53d1b937657cbcc786a868127d29a549a56bab4e76e484d141abd2aac0864b65dc76ca3b4cefb3ccd67ddca12e9f87f4318d537f6cd9f0ca3e0c9d879cea309
6
+ metadata.gz: 0b638de29d5f9ebf39fa1962ec41d316f23579c64f9b0bd387bc3bd0323d447368fb9dacf283ea8e10d898e1d2bd4e6956c99f435080f38c835092c154e85f03
7
+ data.tar.gz: 8c59ab30460634b1098d74933284052ee98492897a04d17358166597fb2d53e2412e521228486b5df37c8d8cb2f254565eb79ccb3cc29e5dfd8cfc9b42b4e399
@@ -84,16 +84,16 @@ module HammerCLIKatello
84
84
  include OrganizationOptions
85
85
  include CompositeContentViewNameResolvable
86
86
  output do
87
- field :id, _("Id")
87
+ field :content_view_id, _("Content View Id")
88
88
  field :content_view_name, _("Name")
89
89
  field :version, _("Version")
90
+ field :id, _("Component Id")
90
91
  field :current_version, _("Current Version")
91
92
  field :version_id, _("Version Id")
92
93
  end
93
94
 
94
95
  def extend_data(mod)
95
96
  if mod['latest']
96
- mod['content_view_name'] = mod["content_view"]["name"]
97
97
  mod['version'] = _("Latest")
98
98
  if mod['content_view_version']
99
99
  mod['current_version'] = mod['content_view_version']['version']
@@ -102,10 +102,11 @@ module HammerCLIKatello
102
102
  mod['current_version'] = _("No Published Version")
103
103
  end
104
104
  else
105
- mod['content_view_name'] = mod["content_view"]["name"]
106
105
  mod['version'] = mod['content_view_version']['version']
107
106
  mod['version_id'] = mod['content_view_version']['id']
108
107
  end
108
+ mod['content_view_name'] = mod["content_view"]["name"]
109
+ mod['content_view_id'] = mod["content_view"]["id"]
109
110
  mod
110
111
  end
111
112
 
@@ -389,6 +389,8 @@ module HammerCLIKatello
389
389
  o.expand.including(:products, :organizations)
390
390
  end
391
391
 
392
+ option "--async", :flag, _("Do not wait for the task.")
393
+
392
394
  option "--ostree-repository-name", "OSTREE REPOSITORY NAME",
393
395
  _("Name of OSTree repository in archive."),
394
396
  :attribute_name => :option_ostree_repository_name,
@@ -415,6 +417,7 @@ module HammerCLIKatello
415
417
  update_content_upload(upload_id, repo_id, file)
416
418
  end
417
419
  opts[:ostree_repository_name] = options["option_ostree_repository_name"]
420
+ opts[:filename] = filename
418
421
  results = import_uploads([
419
422
  {
420
423
  id: upload_id,
@@ -423,7 +426,7 @@ module HammerCLIKatello
423
426
  size: file.size,
424
427
  checksum: checksum
425
428
  }], opts)
426
- print_results(filename, results)
429
+ print_results(filename, results, options["option_async"])
427
430
  ensure
428
431
  if upload_id
429
432
  content_upload_resource.call(:destroy, :repository_id => get_identifier, :id => upload_id)
@@ -468,35 +471,54 @@ module HammerCLIKatello
468
471
  params = {:id => get_identifier,
469
472
  :uploads => uploads,
470
473
  publish_repository: publish_repository,
471
- sync_capsule: sync_capsule
474
+ sync_capsule: sync_capsule,
475
+ async: true
472
476
  }
473
477
  params[:content_type] = options["option_content_type"] if options["option_content_type"]
474
478
  if options["option_ostree_repository_name"]
475
479
  params[:ostree_repository_name] = options["option_ostree_repository_name"]
476
480
  end
477
- resource.call(:import_uploads, params)
481
+ results = if options["option_async"]
482
+ resource.call(:import_uploads, params)
483
+ else
484
+ task_progress(resource.call(:import_uploads, params))
485
+ end
486
+ results
478
487
  end
479
488
 
480
- def print_results(name, results)
481
- if results.empty? || results.dig('output', 'upload_results').empty?
482
- print_message _("Successfully uploaded file '%{name}'") % {
483
- :name => name
484
- }
485
- else
489
+ def task_progress(task_or_id)
490
+ super
491
+ task_id = task_or_id.is_a?(Hash) ? task_or_id['id'] : task_or_id
492
+ load_task(task_id)
493
+ end
494
+
495
+ # rubocop:disable CyclomaticComplexity
496
+ # rubocop:disable PerceivedComplexity
497
+ def print_results(name, results, async)
498
+ if !%w(error warning).include?(results) && !async # task successful && no async flag used
486
499
  upload_results = results.dig('output', 'upload_results') || []
487
- upload_results.each do |result|
488
- if result['type'] == 'docker_manifest'
489
- print_message(
490
- _("Successfully uploaded manifest file '%{name}' with digest '%{digest}'") % {
491
- :name => name, :digest => result['digest'] })
492
- else
493
- print_message _("Successfully uploaded file '%{name}'") % {
494
- :name => name
495
- }
500
+
501
+ if upload_results.empty?
502
+ print_message _("Successfully uploaded file %s" % name)
503
+ else
504
+ upload_results.each do |result|
505
+ if result['type'] == 'docker_manifest'
506
+ print_message(
507
+ _("Successfully uploaded manifest file '%{name}' with digest '%{digest}'") % {
508
+ :name => name, :digest => result['digest'] })
509
+ else
510
+ print_message _("Successfully uploaded file %s" % name)
511
+ end
496
512
  end
497
513
  end
514
+ elsif results&.dig('id') && async # async flag used
515
+ print_message _("Content is being uploaded in task #{results['id']}.")
516
+ else
517
+ print_message _("Could not upload the content.")
498
518
  end
499
519
  end
520
+ # rubocop:enable CyclomaticComplexity
521
+ # rubocop:enable PerceivedComplexity
500
522
 
501
523
  def silence_warnings
502
524
  original_verbose = $VERBOSE
@@ -1,5 +1,5 @@
1
1
  module HammerCLIKatello
2
2
  def self.version
3
- @version ||= Gem::Version.new('1.3.1')
3
+ @version ||= Gem::Version.new('1.4.0')
4
4
  end
5
5
  end
@@ -17,10 +17,16 @@ describe 'upload repository' do
17
17
  let(:path) { "./test.rpm" }
18
18
  let(:upload_id) { "1234" }
19
19
  let(:_href) { "/pulp/api/v2/content/uploads/#{upload_id}" }
20
+ let(:task_id) { "2ea4f" }
20
21
  let(:upload_response) do
21
22
  {
22
23
  "upload_id" => upload_id,
23
- "_href" => _href
24
+ "href" => _href
25
+ }
26
+ end
27
+ let(:import_uploads_response) do
28
+ {
29
+ "id" => task_id
24
30
  }
25
31
  end
26
32
 
@@ -36,7 +42,7 @@ describe 'upload repository' do
36
42
 
37
43
  # rubocop:disable LineLength
38
44
  ex2 = api_expects(:repositories, :import_uploads, 'Take in an upload')
39
- .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true,
45
+ .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true, :async => true,
40
46
  :uploads => [{
41
47
  :id => '1234',
42
48
  :name => 'test.rpm',
@@ -47,14 +53,16 @@ describe 'upload repository' do
47
53
  )
48
54
  # rubocop:enable LineLength
49
55
 
50
- ex2.returns("")
56
+ ex2.returns(import_uploads_response)
57
+ expect_foreman_task(task_id)
58
+ expect_foreman_task(task_id)
51
59
 
52
60
  ex3 = api_expects(:content_uploads, :destroy, "Delete the upload")
53
61
  .with_params('id' => upload_id, 'repository_id' => repo_id)
54
62
 
55
63
  ex3.returns("")
56
-
57
64
  result = run_cmd(@cmd + params)
65
+
58
66
  assert_equal(result.exit_code, 0)
59
67
  File.delete("test.rpm")
60
68
  end
@@ -70,7 +78,7 @@ describe 'upload repository' do
70
78
 
71
79
  # rubocop:disable LineLength
72
80
  ex2 = api_expects(:repositories, :import_uploads, 'Take in an upload')
73
- .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true, :content_type => 'srpm',
81
+ .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true, :content_type => 'srpm', :async => true,
74
82
  :uploads => [{
75
83
  :id => '1234',
76
84
  :name => 'test.src.rpm',
@@ -79,9 +87,11 @@ describe 'upload repository' do
79
87
  :checksum => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
80
88
  }]
81
89
  )
82
-
83
90
  # rubocop:enable LineLength
84
- ex2.returns("")
91
+
92
+ ex2.returns(import_uploads_response)
93
+ expect_foreman_task(task_id)
94
+ expect_foreman_task(task_id)
85
95
 
86
96
  ex3 = api_expects(:content_uploads, :destroy, "Delete the upload")
87
97
  .with_params(:id => upload_id, :repository_id => repo_id)
@@ -105,7 +115,7 @@ describe 'upload repository' do
105
115
 
106
116
  # rubocop:disable LineLength
107
117
  ex2 = api_expects(:repositories, :import_uploads, 'Take in an upload')
108
- .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true,
118
+ .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true, :async => true,
109
119
  :uploads => [{
110
120
  :id => '1234',
111
121
  :name => 'test.src.rpm',
@@ -140,7 +150,7 @@ describe 'upload repository' do
140
150
 
141
151
  # rubocop:disable LineLength
142
152
  ex2 = api_expects(:repositories, :import_uploads, 'Take in an upload')
143
- .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true,
153
+ .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true, :async => true,
144
154
  :uploads => [{
145
155
  :id => '1234',
146
156
  :name => 'test.rpm',
@@ -150,13 +160,20 @@ describe 'upload repository' do
150
160
  }]
151
161
  )
152
162
  # rubocop:enable LineLength
153
- ex2.returns('output' => {'upload_results' => [{'type' => 'docker_manifest',
154
- 'digest' => 'sha256:1234'}]})
155
163
 
156
- ex3 = api_expects(:content_uploads, :destroy, "Delete the upload")
164
+ ex2.returns(import_uploads_response)
165
+ expect_foreman_task(task_id)
166
+
167
+ ex3 = api_expects(:foreman_tasks, :show, 'Show task')
168
+ ex3.returns('id' => task_id, 'state' => 'stopped', 'progress' => 1,
169
+ 'humanized' => {'output' => {'upload_results' => [{'type' => 'docker_manifest',
170
+ 'digest' => 'sha256:1234'}]},
171
+ 'errors' => ''})
172
+
173
+ ex4 = api_expects(:content_uploads, :destroy, "Delete the upload")
157
174
  .with_params(:id => upload_id, :repository_id => repo_id)
158
175
 
159
- ex3.returns("")
176
+ ex4.returns("")
160
177
 
161
178
  result = run_cmd(@cmd + params)
162
179
  assert_equal(result.exit_code, 0)
@@ -180,7 +197,7 @@ describe 'upload repository' do
180
197
 
181
198
  # rubocop:disable LineLength
182
199
  ex2 = api_expects(:repositories, :import_uploads, 'Take in an upload')
183
- .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true,
200
+ .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true, :async => true,
184
201
  :uploads => [{
185
202
  :id => '1234',
186
203
  :name => 'test.rpm',
@@ -191,7 +208,9 @@ describe 'upload repository' do
191
208
  )
192
209
  # rubocop:enable LineLength
193
210
 
194
- ex2.returns("")
211
+ ex2.returns(import_uploads_response)
212
+ expect_foreman_task(task_id)
213
+ expect_foreman_task(task_id)
195
214
 
196
215
  ex3 = api_expects(:content_uploads, :destroy, "Delete the upload")
197
216
  .with_params(:id => upload_id, :repository_id => repo_id)
@@ -212,10 +231,9 @@ describe 'upload repository' do
212
231
  .with_params(:repository_id => repo_id, :size => file.size)
213
232
 
214
233
  ex.returns(upload_response)
215
-
216
234
  # rubocop:disable LineLength
217
235
  ex2 = api_expects(:repositories, :import_uploads, 'Take in an upload')
218
- .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true,
236
+ .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true, :async => true,
219
237
  :uploads => [{
220
238
  :id => '1234',
221
239
  :name => 'test.rpm',
@@ -225,8 +243,9 @@ describe 'upload repository' do
225
243
  }]
226
244
  )
227
245
  # rubocop:enable LineLength
228
-
229
- ex2.returns("")
246
+ ex2.returns(import_uploads_response)
247
+ expect_foreman_task(task_id)
248
+ expect_foreman_task(task_id)
230
249
 
231
250
  ex3 = api_expects(:content_uploads, :destroy, "Delete the upload")
232
251
  .with_params(:id => upload_id, :repository_id => repo_id)
@@ -253,7 +272,7 @@ describe 'upload repository' do
253
272
 
254
273
  # rubocop:disable LineLength
255
274
  ex = api_expects(:repositories, :import_uploads, 'Take in an upload')
256
- .with_params(:id => repo_id, :sync_capsule => false, :publish_repository => false,
275
+ .with_params(:id => repo_id, :sync_capsule => false, :publish_repository => false, :async => true,
257
276
  :uploads => [{
258
277
  :id => '1234',
259
278
  :name => 'test1.rpm',
@@ -264,7 +283,9 @@ describe 'upload repository' do
264
283
  )
265
284
  # rubocop:enable LineLength
266
285
 
267
- ex.returns("")
286
+ ex.returns(import_uploads_response)
287
+ expect_foreman_task(task_id)
288
+ expect_foreman_task(task_id)
268
289
 
269
290
  ex = api_expects(:content_uploads, :destroy, "Delete the upload")
270
291
  .with_params(:id => upload_id, :repository_id => repo_id)
@@ -280,7 +301,7 @@ describe 'upload repository' do
280
301
 
281
302
  # rubocop:disable LineLength
282
303
  ex = api_expects(:repositories, :import_uploads, 'Take in an upload')
283
- .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true,
304
+ .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true, :async => true,
284
305
  :uploads => [{
285
306
  :id => '1234',
286
307
  :name => 'test2.rpm',
@@ -291,7 +312,9 @@ describe 'upload repository' do
291
312
  )
292
313
  # rubocop:enable LineLength
293
314
 
294
- ex.returns("")
315
+ ex.returns(import_uploads_response)
316
+ expect_foreman_task(task_id)
317
+ expect_foreman_task(task_id)
295
318
 
296
319
  ex = api_expects(:content_uploads, :destroy, "Delete the upload")
297
320
  .with_params(:id => upload_id, :repository_id => repo_id)
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: 1.3.1
4
+ version: 1.4.0
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: 2021-11-29 00:00:00.000000000 Z
38
+ date: 2022-02-13 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: hammer_cli_foreman