hammer_cli_katello 0.15.0 → 0.16.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
- SHA1:
3
- metadata.gz: 81a158e8e77bef73123e89992746c3b24f9689ef
4
- data.tar.gz: 417e144685491e014455d2c1eacb1d8caaba7d40
2
+ SHA256:
3
+ metadata.gz: a5a0c1942a467a8de0c6ed9e0ea81e682488d7885bfe49f2921e9a2a6fd7e99f
4
+ data.tar.gz: c92458aa1299e5c707323fd9ad96422149400f676002fdd6497e2f171799caef
5
5
  SHA512:
6
- metadata.gz: 3c53985e39d45ba73ac11d19e1cf4ea3c40f60204ac98d9f86f01cb8d69c556df92889fd89965b35b93500a7d4a93b5123b48790ea3575a8f57866765b79d7ad
7
- data.tar.gz: 64a6b70c343bafd39bb7bce8db5bd1b029a9bdb13769befb5ddd0441c33b3fdd443779a3859f8b9c1b1dc0e5f0c4db28b7c1a351f5a82103cd936a1e4a878c06
6
+ metadata.gz: '0044948e47d6ada111b0cabb37a925d754b1b4b2e1b38519804886a1c6ebd593a847b429916c2c780efb86d95f4a653399738142b27117c8ce40d4abc20ea33d'
7
+ data.tar.gz: 3c363f5ddeba819dfc7b4fc3d531583b5c8c5f12d151147e3bd2addc65cd4fbf31b065c4bb6971a824c362092d1cbd79ee1588e1c717b2f5461d0b86f5708558
@@ -29,6 +29,7 @@ module HammerCLIKatello
29
29
  require 'hammer_cli_katello/id_name_options_validator'
30
30
  require 'hammer_cli_katello/local_helper'
31
31
  require 'hammer_cli_katello/apipie_helper'
32
+ require 'hammer_cli_katello/cv_import_export_helper'
32
33
 
33
34
  # commands
34
35
  HammerCLI::MainCommand.lazy_subcommand("activation-key", _("Manipulate activation keys"),
@@ -146,7 +146,7 @@ module HammerCLIKatello
146
146
  field :id, _("ID")
147
147
  field :product_name, _("Name")
148
148
  field :format_consumed, _("Attached")
149
- field :amount, _("Quantity")
149
+ field :quantity_attached, _("Quantity")
150
150
  field :start_date, _("Start Date"), Fields::Date
151
151
  field :end_date, _("End Date"), Fields::Date
152
152
  field :support_level, _("Support")
@@ -154,6 +154,12 @@ module HammerCLIKatello
154
154
  field :account_number, _("Account")
155
155
  end
156
156
 
157
+ def extend_data(data)
158
+ data["format_consumed"] = _("#{data['consumed']} out of "\
159
+ "#{data['quantity'] == -1 ? 'Unlimited' : data['quantity']}")
160
+ data
161
+ end
162
+
157
163
  option '--id', "ACTIVATION_KEY_ID", _("ID of the activation key"),
158
164
  attribute_name: :option_activation_key_id
159
165
  option '--name', "ACTIVATION_KEY_NAME", _("Activation key name to search by"),
@@ -8,6 +8,14 @@ module HammerCLIKatello
8
8
  call(:index, resource, options)['results']
9
9
  end
10
10
 
11
+ def update(resource, options = {})
12
+ call(:update, resource, options)['results']
13
+ end
14
+
15
+ def destroy(resource, options = {})
16
+ call(:destroy, resource, options)
17
+ end
18
+
11
19
  def call(action, resource, options = {})
12
20
  HammerCLIForeman.foreman_resource(resource).call(action, options)
13
21
  end
@@ -1,6 +1,7 @@
1
1
  module HammerCLIKatello
2
2
  class ContentViewPurgeCommand < HammerCLIKatello::Command
3
3
  include HammerCLIForemanTasks::Async
4
+ include HammerCLIKatello::ApipieHelper
4
5
  include OrganizationOptions
5
6
 
6
7
  command_name "purge"
@@ -24,14 +25,6 @@ module HammerCLIKatello
24
25
 
25
26
  build_options
26
27
 
27
- def resource_content_views
28
- HammerCLIForeman.foreman_resource(:content_views)
29
- end
30
-
31
- def resource_content_view_versions
32
- HammerCLIForeman.foreman_resource(:content_view_versions)
33
- end
34
-
35
28
  class ContentViewIdParamSource
36
29
  def initialize(command)
37
30
  @command = command
@@ -74,31 +67,26 @@ module HammerCLIKatello
74
67
 
75
68
  private def purge_version(v)
76
69
  if option_async?
77
- task = resource_content_view_versions.call(:destroy, 'id' => v["id"])
70
+ task = destroy(:content_view_versions, 'id' => v["id"])
78
71
  print_message _("Version '%{version}' of content view '%{view}' scheduled "\
79
72
  "for deletion in task '%{task_id}'.") %
80
- {version: v["version"], view: content_view["name"], task_id: task['id']}
73
+ {version: v["version"], view: v["content_view"]["name"], task_id: task['id']}
81
74
  else
82
- task_progress(resource_content_view_versions.call(:destroy, 'id' => v["id"]))
75
+ task_progress(call(:destroy, :content_view_versions, 'id' => v["id"]))
83
76
  print_message _("Version '%{version}' of content view '%{view}' deleted.") %
84
- {version: v["version"], view: content_view["name"]}
77
+ {version: v["version"], view: v["content_view"]["name"]}
85
78
  end
86
79
  end
87
80
 
88
- private def content_view
89
- @content_view ||= resource_content_views.call(:show, 'id' => options['option_id'])
90
- end
91
-
92
81
  private def old_unused_versions
93
82
  return @old_unused_versions if @old_unused_versions
94
83
 
95
- all_versions = content_view['versions'].sort_by do |version|
96
- [version[:major], version[:minor]]
97
- end
98
-
99
- # Keep only versions which are not used
84
+ all_versions = index(:content_view_versions, :content_view_id => options['option_id'])
85
+ all_versions.sort_by! { |v| [v['major'], v['minor']] }
100
86
  @old_unused_versions = all_versions.select do |v|
101
- v["environment_ids"].empty?
87
+ v["environments"].empty? &&
88
+ v["composite_content_views"].empty? &&
89
+ v["composite_content_view_versions"].empty?
102
90
  end
103
91
  end
104
92
  end
@@ -265,6 +265,7 @@ module HammerCLIKatello
265
265
  class ExportCommand < HammerCLIForeman::Command
266
266
  include HammerCLIKatello::LocalHelper
267
267
  include HammerCLIKatello::ApipieHelper
268
+ include HammerCLIKatello::CVImportExportHelper
268
269
 
269
270
  PUBLISHED_REPOS_DIR = "/var/lib/pulp/published/yum/https/repos/".freeze
270
271
 
@@ -287,18 +288,29 @@ module HammerCLIKatello
287
288
 
288
289
  def execute
289
290
  cvv = show(:content_view_versions, 'id' => options['option_id'])
290
- repositories = cvv['repositories'].collect do |repo|
291
- show(:repositories, 'id' => repo['id'], :full_result => true)
292
- end
291
+ cv = show(:content_views, 'id' => cvv['content_view_id'])
293
292
 
294
- check_repo_download_policy(repositories)
293
+ composite = cv["composite"]
294
+ export_json_options = { :cvv => cvv }
295
295
 
296
- repositories.each do |repo|
297
- repo['packages'] = index(:packages, 'repository_id' => repo['id'], :full_result => true)
298
- repo['errata'] = index(:errata, 'repository_id' => repo['id'], :full_result => true)
296
+ if composite
297
+ components = cv['components']
298
+ export_json_options[:component_cvvs] = components.collect do |component|
299
+ component['name']
300
+ end
301
+ export_json_options[:repositories] = []
302
+ else
303
+ repositories = fetch_cvv_repositories(cvv)
304
+ check_repo_download_policy(repositories)
305
+
306
+ repositories.each do |repo|
307
+ repo['packages'] = index(:packages, 'repository_id' => repo['id'], :full_result => true)
308
+ repo['errata'] = index(:errata, 'repository_id' => repo['id'], :full_result => true)
309
+ end
310
+ export_json_options[:repositories] = repositories
299
311
  end
300
312
 
301
- json = export_json(cvv, repositories)
313
+ json = export_json(export_json_options)
302
314
  create_tar(cvv, repositories, json)
303
315
  return HammerCLI::EX_OK
304
316
  end
@@ -311,15 +323,17 @@ module HammerCLIKatello
311
323
 
312
324
  Dir.mkdir("#{options['option_export_dir']}/#{export_prefix}")
313
325
 
314
- Dir.chdir(PUBLISHED_REPOS_DIR) do
315
- repo_tar = "#{options['option_export_dir']}/#{export_prefix}/#{export_repos_tar}"
316
- repo_dirs = []
326
+ if repositories
327
+ Dir.chdir(PUBLISHED_REPOS_DIR) do
328
+ repo_tar = "#{options['option_export_dir']}/#{export_prefix}/#{export_repos_tar}"
329
+ repo_dirs = []
317
330
 
318
- repositories.each do |repo|
319
- repo_dirs.push(repo['relative_path'])
320
- end
331
+ repositories.each do |repo|
332
+ repo_dirs.push(repo['relative_path'])
333
+ end
321
334
 
322
- `tar cvfh #{repo_tar} #{repo_dirs.join(" ")}`
335
+ `tar cvfh #{repo_tar} #{repo_dirs.join(" ")}`
336
+ end
323
337
  end
324
338
 
325
339
  Dir.chdir("#{options['option_export_dir']}/#{export_prefix}") do
@@ -348,35 +362,13 @@ module HammerCLIKatello
348
362
  MSG
349
363
  raise _(msg)
350
364
  end
351
-
352
- def export_json(content_view_version, repositories)
353
- json = {
354
- "name" => content_view_version['content_view']['name'],
355
- "major" => content_view_version['major'],
356
- "minor" => content_view_version['minor']
357
- }
358
-
359
- json["repositories"] = repositories.collect do |repo|
360
- {
361
- "id" => repo['id'],
362
- "label" => repo['label'],
363
- "content_type" => repo['content_type'],
364
- "backend_identifier" => repo['backend_identifier'],
365
- "relative_path" => repo['relative_path'],
366
- "on_disk_path" => "#{PUBLISHED_REPOS_DIR}/#{repo['relative_path']}",
367
- "rpm_filenames" => repo['packages'].collect { |package| package['filename'] },
368
- "errata_ids" => repo['errata'].collect { |errata| errata['errata_id'] }
369
- }
370
- end
371
-
372
- json
373
- end
374
365
  end
375
366
 
376
367
  class ImportCommand < HammerCLIForeman::Command
377
368
  include HammerCLIForemanTasks::Async
378
369
  include HammerCLIKatello::LocalHelper
379
370
  include HammerCLIKatello::ApipieHelper
371
+ include HammerCLIKatello::CVImportExportHelper
380
372
 
381
373
  attr_accessor :export_tar_dir, :export_tar_file, :export_tar_prefix
382
374
 
@@ -389,8 +381,7 @@ module HammerCLIKatello
389
381
 
390
382
  option "--organization-id", "ORGANIZATION_ID", _("Organization numeric identifier")
391
383
  option(
392
- '--export-tar',
393
- 'EXPORT_TAR',
384
+ '--export-tar', 'EXPORT_TAR',
394
385
  _("Location of export tar on disk")
395
386
  )
396
387
 
@@ -406,47 +397,35 @@ module HammerCLIKatello
406
397
  raise _("Export tar #{options['option_export_tar']} does not exist.")
407
398
  end
408
399
 
409
- self.export_tar_file = File.basename(options['option_export_tar'])
410
- self.export_tar_prefix = @export_tar_file.gsub('.tar', '')
411
- self.export_tar_dir = File.dirname(options['option_export_tar'])
412
- untar_export
413
-
414
- export_json = read_json
400
+ import_tar_params = obtain_export_params(options['option_export_tar'])
401
+ untar_export(import_tar_params)
415
402
 
403
+ export_json = read_json(import_tar_params)
416
404
  cv = content_view(export_json['name'], options['option_organization_id'])
417
- sync_repositories(export_json['repositories'], options['option_organization_id'])
418
-
419
- publish(
420
- cv['id'],
421
- export_json['major'],
422
- export_json['minor'],
423
- repos_units(export_json['repositories'])
424
- )
425
- return HammerCLI::EX_OK
426
- end
427
-
428
- def untar_export
429
- Dir.chdir(@export_tar_dir) do
430
- `tar -xf #{@export_tar_file}`
431
- end
432
405
 
433
- Dir.chdir("#{@export_tar_dir}/#{@export_tar_prefix}") do
434
- if File.exist?(@export_tar_file.gsub('.tar', '-repos.tar'))
435
- `tar -xf #{@export_tar_file.gsub('.tar', '-repos.tar')}`
436
- else
437
- raise _("Export repos tar file is missing.")
406
+ if export_json['composite_components']
407
+ composite_version_ids = export_json['composite_components'].map do |component|
408
+ find_local_component_id(component)
438
409
  end
410
+
411
+ update(:content_views, 'id' => cv['id'], 'component_ids' => composite_version_ids)
412
+ publish(cv['id'], export_json['major'], export_json['minor'])
413
+ else
414
+ sync_repositories(export_json['repositories'], options['option_organization_id'],
415
+ import_tar_params)
416
+
417
+ publish(
418
+ cv['id'], export_json['major'],
419
+ export_json['minor'], repos_units(export_json['repositories'])
420
+ )
439
421
  end
422
+ return HammerCLI::EX_OK
440
423
  end
441
424
 
442
- def read_json
443
- json_file = @export_tar_file.gsub('tar', 'json')
444
- json_file = "#{@export_tar_dir}/#{@export_tar_prefix}/#{json_file}"
445
- json_file = File.read(json_file)
446
- JSON.parse(json_file)
447
- end
425
+ def sync_repositories(repositories, organization_id, options)
426
+ export_tar_dir = options[:dirname]
427
+ export_tar_prefix = options[:prefix]
448
428
 
449
- def sync_repositories(repositories, organization_id)
450
429
  repositories.each do |repo|
451
430
  library_repos = index(
452
431
  :repositories,
@@ -467,7 +446,7 @@ module HammerCLIKatello
467
446
 
468
447
  synchronize(
469
448
  library_repo['id'],
470
- "file://#{@export_tar_dir}/#{@export_tar_prefix}/#{repo['relative_path']}"
449
+ "file://#{export_tar_dir}/#{export_tar_prefix}/#{repo['relative_path']}"
471
450
  )
472
451
  end
473
452
  end
@@ -489,8 +468,9 @@ module HammerCLIKatello
489
468
  task_progress(call(:sync, :repositories, 'id' => id, 'source_url' => source_url))
490
469
  end
491
470
 
492
- def publish(id, major, minor, repos_units)
493
- params = {'id' => id, 'major' => major, 'minor' => minor, 'repos_units' => repos_units}
471
+ def publish(id, major, minor, repos_units = nil)
472
+ params = {'id' => id, 'major' => major, 'minor' => minor }
473
+ params['repos_units'] = repos_units if repos_units
494
474
  task_progress(call(:publish, :content_views, params))
495
475
  end
496
476
  end
@@ -0,0 +1,83 @@
1
+ module HammerCLIKatello
2
+ module CVImportExportHelper
3
+ PUBLISHED_REPOS_DIR = "/var/lib/pulp/published/yum/https/repos/".freeze
4
+
5
+ def fetch_cvv_repositories(cvv)
6
+ cvv['repositories'].collect do |repo|
7
+ show(:repositories, 'id' => repo['id'], :full_result => true)
8
+ end
9
+ end
10
+
11
+ def find_local_component_id(component_from_export)
12
+ *name, version = component_from_export.split(' ')
13
+ name = name.join(' ')
14
+ existing_component_cv = content_view(name, options['option_organization_id'])
15
+ found_composite_version = existing_component_cv['versions'].select do |v|
16
+ v['version'] == version
17
+ end
18
+ if found_composite_version.empty?
19
+ raise _("Unable to find CV version %{cvv} on system. Please ensure it " \
20
+ "is already imported." % {'cvv' => component_from_export})
21
+ end
22
+ found_composite_version.first['id']
23
+ end
24
+
25
+ def untar_export(options)
26
+ export_tar_file = options[:filename]
27
+ export_tar_dir = options[:dirname]
28
+ export_tar_prefix = options[:prefix]
29
+
30
+ Dir.chdir(export_tar_dir) do
31
+ `tar -xf #{export_tar_file}`
32
+ end
33
+
34
+ Dir.chdir("#{export_tar_dir}/#{export_tar_prefix}") do
35
+ if File.exist?(export_tar_file.gsub('.tar', '-repos.tar'))
36
+ `tar -xf #{export_tar_file.gsub('.tar', '-repos.tar')}`
37
+ end
38
+ end
39
+ end
40
+
41
+ def obtain_export_params(option_export_tar)
42
+ export_tar_file = File.basename(option_export_tar)
43
+ {:filename => export_tar_file,
44
+ :dirname => File.dirname(option_export_tar),
45
+ :prefix => export_tar_file.gsub('.tar', '')}
46
+ end
47
+
48
+ def read_json(options)
49
+ export_tar_file = options[:filename]
50
+ export_tar_dir = options[:dirname]
51
+ export_tar_prefix = options[:prefix]
52
+
53
+ json_file = export_tar_file.gsub('tar', 'json')
54
+ json_file = "#{export_tar_dir}/#{export_tar_prefix}/#{json_file}"
55
+ json_file = File.read(json_file)
56
+ JSON.parse(json_file)
57
+ end
58
+
59
+ def export_json(export_json_options)
60
+ content_view_version = export_json_options[:cvv]
61
+ repositories = export_json_options[:repositories]
62
+ json = {
63
+ "name" => content_view_version['content_view']['name'],
64
+ "major" => content_view_version['major'],
65
+ "minor" => content_view_version['minor']
66
+ }
67
+ json["composite_components"] = export_json_options[:component_cvvs]
68
+ json["repositories"] = repositories.collect do |repo|
69
+ {
70
+ "id" => repo['id'],
71
+ "label" => repo['label'],
72
+ "content_type" => repo['content_type'],
73
+ "backend_identifier" => repo['backend_identifier'],
74
+ "relative_path" => repo['relative_path'],
75
+ "on_disk_path" => "#{PUBLISHED_REPOS_DIR}/#{repo['relative_path']}",
76
+ "rpm_filenames" => repo['packages'].collect { |package| package['filename'] },
77
+ "errata_ids" => repo['errata'].collect { |errata| errata['errata_id'] }
78
+ }
79
+ end
80
+ json
81
+ end
82
+ end
83
+ end
@@ -49,6 +49,16 @@ module HammerCLIKatello
49
49
  build_options
50
50
  end
51
51
 
52
+ class RecalculateCommand < HammerCLIKatello::SingleResourceCommand
53
+ include HammerCLIForemanTasks::Async
54
+ resource :host_errata, :applicability
55
+ command_name "recalculate"
56
+ success_message _("Errata recalculated with task %{id}.")
57
+ failure_message _("Could not recalculate errata")
58
+
59
+ build_options
60
+ end
61
+
52
62
  autoload_subcommands
53
63
  end
54
64
  end
@@ -68,6 +68,8 @@ module HammerCLIKatello
68
68
  from :prior do
69
69
  field :name, _("Prior Lifecycle Environment")
70
70
  end
71
+ field :registry_unauthenticated_pull, _("Unauthenticated Pull")
72
+ field :registry_name_pattern, _("Registry Name Pattern")
71
73
  end
72
74
 
73
75
  build_options
@@ -1,5 +1,5 @@
1
1
  module HammerCLIKatello
2
2
  def self.version
3
- @version ||= Gem::Version.new('0.15.0')
3
+ @version ||= Gem::Version.new('0.16.0')
4
4
  end
5
5
  end