hammer_cli_katello 0.17.0 → 0.17.1

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
- SHA1:
3
- metadata.gz: 91526da6c7ebab95a7aba39558d81c0a47fbe074
4
- data.tar.gz: 6c44980914fdd9a4e8d308863f65aeaac002f09a
2
+ SHA256:
3
+ metadata.gz: 53e2f4ceb875e5146dc941c0c2f6ba8a00095e525c1a8a99ad0252ed92f8cf60
4
+ data.tar.gz: '01080c7f6a9e503fcf2446d41f20b131ca2293aeb849e08243da25ccfc1e5cbc'
5
5
  SHA512:
6
- metadata.gz: 0b530c2a5f82758bd0e074f9988d7973be4134a9f832877c2afc4c336f73a6e5a172778d9bfeeb6bb53370787d896a2f08578048fe818a71a9f9e68657e1e595
7
- data.tar.gz: c9b15e7566318c658abefb3a372405571fe2f0875666f1d9bdec6596159d95021baf62e704ca2af33c96ebfbdaf61e9b5d9716d65c2c6d3859903d3d745d429f
6
+ metadata.gz: 0d4ce299d3e164363f6209a127d8425bbbfdf7571fc38771e8ce52c671e2b550659fb6af5cc97fd066f50b3af81935802c832e585aa7c280136e75b0acc561b5
7
+ data.tar.gz: 666a449b3d17c960642fdbb498cc8367e6049dab07a58d640322672798d8937338a78bf089e2e59c5db42d68afa652db1af2fa861ac1b5e54a5470e05a95bd09
@@ -301,6 +301,7 @@ module HammerCLIKatello
301
301
  export_json_options[:repositories] = []
302
302
  else
303
303
  repositories = fetch_cvv_repositories(cvv)
304
+ check_repo_type(repositories)
304
305
  check_repo_download_policy(repositories)
305
306
 
306
307
  repositories.each do |repo|
@@ -316,7 +317,7 @@ module HammerCLIKatello
316
317
  end
317
318
 
318
319
  def create_tar(cv, cvv, repositories, json)
319
- export_prefix = "export-#{cv['label']}-#{cvv['id']}"
320
+ export_prefix = "export-#{cv['label']}-#{cvv['major']}.#{cvv['minor']}"
320
321
  export_file = "#{export_prefix}.json"
321
322
  export_repos_tar = "#{export_prefix}-repos.tar"
322
323
  export_tar = "#{export_prefix}.tar"
@@ -349,6 +350,17 @@ module HammerCLIKatello
349
350
  end
350
351
  end
351
352
 
353
+ def check_repo_type(repositories)
354
+ repositories.select do |repo|
355
+ if repo['content_type'] != 'yum'
356
+ raise _("The Repository '#{repo['name']}' is a non-yum repository."\
357
+ " Only Yum is supported at this time."\
358
+ " Please remove the repository from the Content View,"\
359
+ " republish and try the export again.")
360
+ end
361
+ end
362
+ end
363
+
352
364
  def check_repo_download_policy(repositories)
353
365
  non_immediate = repositories.select do |repo|
354
366
  show(:repositories, 'id' => repo['library_instance_id'])['download_policy'] != 'immediate'
@@ -378,7 +390,7 @@ module HammerCLIKatello
378
390
  command_name "import"
379
391
 
380
392
  success_message _("Content view imported.")
381
- failure_message _("Could not import the content view.")
393
+ failure_message _("Could not import the content view")
382
394
 
383
395
  option "--organization-id", "ORGANIZATION_ID", _("Organization numeric identifier")
384
396
  option(
@@ -393,6 +405,7 @@ module HammerCLIKatello
393
405
 
394
406
  build_options
395
407
 
408
+ # rubocop:disable Metrics/AbcSize
396
409
  def execute
397
410
  unless File.exist?(options['option_export_tar'])
398
411
  raise _("Export tar #{options['option_export_tar']} does not exist.")
@@ -403,18 +416,19 @@ module HammerCLIKatello
403
416
 
404
417
  export_json = read_json(import_tar_params)
405
418
  cv = content_view(export_json['name'], options['option_organization_id'])
419
+ major = export_json['major'].to_s
420
+ minor = export_json['minor'].to_s
421
+ import_checks(export_json, cv, major, minor)
406
422
 
407
423
  if export_json['composite_components']
408
424
  composite_version_ids = export_json['composite_components'].map do |component|
409
425
  find_local_component_id(component)
410
426
  end
411
-
412
427
  update(:content_views, 'id' => cv['id'], 'component_ids' => composite_version_ids)
413
428
  publish(cv['id'], export_json['major'], export_json['minor'])
414
429
  else
415
430
  sync_repositories(export_json['repositories'], options['option_organization_id'],
416
431
  import_tar_params)
417
-
418
432
  publish(
419
433
  cv['id'], export_json['major'],
420
434
  export_json['minor'], repos_units(export_json['repositories'])
@@ -422,6 +436,7 @@ module HammerCLIKatello
422
436
  end
423
437
  return HammerCLI::EX_OK
424
438
  end
439
+ # rubocop:enable Metrics/AbcSize
425
440
 
426
441
  def sync_repositories(repositories, organization_id, options)
427
442
  export_tar_dir = options[:dirname]
@@ -22,6 +22,33 @@ module HammerCLIKatello
22
22
  found_composite_version.first['id']
23
23
  end
24
24
 
25
+ def import_checks(cv, import_cv, major, minor)
26
+ version = "#{major}.#{minor}".to_f
27
+
28
+ if import_cv.nil?
29
+ raise _("The Content View #{cv['name']} is not present on this server,"\
30
+ " please create the Content View and try the import again.")
31
+ end
32
+
33
+ if import_cv['latest_version'].to_f >= version
34
+ raise _("The latest version (#{import_cv['latest_version']}) of"\
35
+ " the Content View '#{cv['name']}'"\
36
+ " is greater or equal to the version you are trying to import (#{version})")
37
+ end
38
+
39
+ unless import_cv['repository_ids'].nil?
40
+ repositories = import_cv['repository_ids'].collect do |repo_id|
41
+ show(:repositories, 'id' => repo_id)
42
+ end
43
+ repositories.each do |repo|
44
+ if repo['mirror_on_sync'] == true
45
+ raise _("The Repository '#{repo['name']}' is set with Mirror-on-Sync to YES."\
46
+ " Please change Mirror-on-Sync to NO and try the import again.")
47
+ end
48
+ end
49
+ end
50
+ end
51
+
25
52
  def untar_export(options)
26
53
  export_tar_file = options[:filename]
27
54
  export_tar_dir = options[:dirname]
@@ -24,7 +24,6 @@ module HammerCLIKatello
24
24
  field :name, _("Name")
25
25
  field :version, _("Version")
26
26
  field :commit, _("Commit")
27
- field :version_date, _("Date")
28
27
  end
29
28
 
30
29
  build_options
@@ -1,5 +1,5 @@
1
1
  module HammerCLIKatello
2
2
  def self.version
3
- @version ||= Gem::Version.new('0.17.0')
3
+ @version ||= Gem::Version.new('0.17.1')
4
4
  end
5
5
  end
@@ -51,9 +51,9 @@ describe 'content-view version export' do
51
51
  File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
52
52
 
53
53
  Dir.expects(:chdir).with("/var/lib/pulp/published/yum/https/repos/").returns(true)
54
- Dir.expects(:mkdir).with('/tmp/exports/export-cv-5').returns(0)
54
+ Dir.expects(:mkdir).with('/tmp/exports/export-cv-1.0').returns(0)
55
55
  Dir.expects(:chdir).with('/tmp/exports').returns(0)
56
- Dir.expects(:chdir).with('/tmp/exports/export-cv-5').returns(0)
56
+ Dir.expects(:chdir).with('/tmp/exports/export-cv-1.0').returns(0)
57
57
 
58
58
  result = run_cmd(@cmd + params)
59
59
  assert_equal(HammerCLI::EX_OK, result.exit_code)
@@ -87,9 +87,9 @@ describe 'content-view version export' do
87
87
  File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
88
88
 
89
89
  Dir.expects(:chdir).with("/var/lib/pulp/published/yum/https/repos/").never
90
- Dir.expects(:mkdir).with('/tmp/exports/export-cv-999').returns(0)
90
+ Dir.expects(:mkdir).with('/tmp/exports/export-cv-1.0').returns(0)
91
91
  Dir.expects(:chdir).with('/tmp/exports').returns(0)
92
- Dir.expects(:chdir).with('/tmp/exports/export-cv-999').returns(0)
92
+ Dir.expects(:chdir).with('/tmp/exports/export-cv-1.0').returns(0)
93
93
 
94
94
  result = run_cmd(@cmd + params)
95
95
  assert_equal(HammerCLI::EX_OK, result.exit_code)
@@ -182,4 +182,43 @@ describe 'content-view version export' do
182
182
  result = run_cmd(@cmd + params)
183
183
  assert_equal(HammerCLI::EX_SOFTWARE, result.exit_code)
184
184
  end
185
+
186
+ it "fails export if any repository is not yum" do
187
+ params = [
188
+ '--id=5',
189
+ '--export-dir=/tmp/exports'
190
+ ]
191
+
192
+ ex = api_expects(:content_view_versions, :show)
193
+ ex.returns(
194
+ 'id' => '5',
195
+ 'repositories' => [{'id' => '2'}],
196
+ 'major' => 1,
197
+ 'minor' => 0,
198
+ 'content_view' => {'name' => 'cv'},
199
+ 'content_view_id' => 4321
200
+ )
201
+
202
+ ex = api_expects(:content_views, :show)
203
+ ex.returns(
204
+ 'id' => '4321',
205
+ 'composite' => false
206
+ )
207
+
208
+ ex = api_expects(:repositories, :show).with_params('id' => '2')
209
+ ex.returns(
210
+ 'id' => '2',
211
+ 'label' => 'Test_Repo',
212
+ 'content_type' => 'file',
213
+ 'backend_identifier' => 'Default_Organization-Library-Test_Repo',
214
+ 'relative_path' => 'Default_Organization/Library/Test_Repo',
215
+ 'library_instance_id' => '1'
216
+ )
217
+
218
+ File.expects(:exist?).with('/usr/share/foreman').returns(true)
219
+ File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
220
+
221
+ result = run_cmd(@cmd + params)
222
+ assert_equal(result.exit_code, 70)
223
+ end
185
224
  end
@@ -183,6 +183,100 @@ describe 'content-view version import' do
183
183
  assert_equal(HammerCLI::EX_SOFTWARE, result.exit_code)
184
184
  end
185
185
 
186
+ it "fails import if cv has not been created" do
187
+ params = [
188
+ '--export-tar=/tmp/exports/export-2.tar',
189
+ '--organization-id=1'
190
+ ]
191
+
192
+ File.expects(:exist?).with('/usr/share/foreman').returns(true)
193
+ File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
194
+
195
+ File.expects(:exist?).with("/tmp/exports/export-2.tar").returns(true)
196
+ Dir.expects(:chdir).with('/tmp/exports').returns(0)
197
+ Dir.expects(:chdir).with('/tmp/exports/export-2').returns(0)
198
+ File.expects(:read).with("/tmp/exports/export-2/export-2.json").returns(
199
+ JSON.dump(
200
+ 'name' => 'Foo View'
201
+ )
202
+ )
203
+
204
+ ex = api_expects(:content_views, :index)
205
+ ex = ex.with_params('name' => 'Foo View', 'organization_id' => '1')
206
+ ex.returns([])
207
+
208
+ result = run_cmd(@cmd + params)
209
+ assert_equal(HammerCLI::EX_SOFTWARE, result.exit_code)
210
+ end
211
+
212
+ it "fails import if repo is set to mirror-on-sync" do
213
+ params = [
214
+ '--export-tar=/tmp/exports/export-2.tar',
215
+ '--organization-id=1'
216
+ ]
217
+
218
+ File.expects(:exist?).with('/usr/share/foreman').returns(true)
219
+ File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
220
+
221
+ File.expects(:exist?).with("/tmp/exports/export-2.tar").returns(true)
222
+ Dir.expects(:chdir).with('/tmp/exports').returns(0)
223
+ Dir.expects(:chdir).with('/tmp/exports/export-2').returns(0)
224
+ File.expects(:read).with("/tmp/exports/export-2/export-2.json").returns(
225
+ JSON.dump(
226
+ 'name' => 'Foo View',
227
+ 'major' => '2',
228
+ 'minor' => '1'
229
+ )
230
+ )
231
+
232
+ ex = api_expects(:content_views, :index)
233
+ ex = ex.with_params('name' => 'Foo View', 'organization_id' => '1')
234
+ ex.returns(
235
+ 'results' => [{
236
+ 'id' => '5',
237
+ 'repositories' => [{'id' => '2', 'label' => 'foo', 'mirror_on_sync' => 'true'}],
238
+ 'content_view' => {'name' => 'cv'}
239
+ }]
240
+ )
241
+
242
+ result = run_cmd(@cmd + params)
243
+ assert_equal(result.exit_code, 70)
244
+ end
245
+
246
+ it "fails import if cv version already exists" do
247
+ params = [
248
+ '--export-tar=/tmp/exports/export-2.tar',
249
+ '--organization-id=1'
250
+ ]
251
+
252
+ File.expects(:exist?).with('/usr/share/foreman').returns(true)
253
+ File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
254
+
255
+ File.expects(:exist?).with("/tmp/exports/export-2.tar").returns(true)
256
+ Dir.expects(:chdir).with('/tmp/exports').returns(0)
257
+ Dir.expects(:chdir).with('/tmp/exports/export-2').returns(0)
258
+ File.expects(:read).with("/tmp/exports/export-2/export-2.json").returns(
259
+ JSON.dump(
260
+ 'name' => 'Foo View',
261
+ 'major' => '2',
262
+ 'minor' => '1'
263
+ )
264
+ )
265
+
266
+ ex = api_expects(:content_views, :index)
267
+ ex = ex.with_params('name' => 'Foo View', 'organization_id' => '1')
268
+ ex.returns(
269
+ 'results' => [{
270
+ 'id' => '5',
271
+ 'content_view' => {'name' => 'cv'},
272
+ 'versions' => [{'version' => '2.1', 'id' => '654'}]
273
+ }]
274
+ )
275
+
276
+ result = run_cmd(@cmd + params)
277
+ assert_equal(result.exit_code, 70)
278
+ end
279
+
186
280
  it "fails import if any repository does not exist" do
187
281
  params = [
188
282
  '--export-tar=/tmp/exports/export-2.tar',
@@ -198,7 +292,9 @@ describe 'content-view version import' do
198
292
  File.expects(:read).with("/tmp/exports/export-2/export-2.json").returns(
199
293
  JSON.dump(
200
294
  'name' => 'Foo View',
201
- 'repositories' => ['label' => 'foo']
295
+ 'repositories' => ['label' => 'foo'],
296
+ 'major' => '2',
297
+ 'minor' => '1'
202
298
  )
203
299
  )
204
300
 
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.17.0
4
+ version: 0.17.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Price
@@ -34,7 +34,7 @@ authors:
34
34
  autorequire:
35
35
  bindir: bin
36
36
  cert_chain: []
37
- date: 2019-01-22 00:00:00.000000000 Z
37
+ date: 2019-04-22 00:00:00.000000000 Z
38
38
  dependencies:
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: hammer_cli_foreman
@@ -485,8 +485,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
485
485
  - !ruby/object:Gem::Version
486
486
  version: '0'
487
487
  requirements: []
488
- rubyforge_project:
489
- rubygems_version: 2.6.14
488
+ rubygems_version: 3.0.2
490
489
  signing_key:
491
490
  specification_version: 4
492
491
  summary: Katello commands for Hammer