hammer_cli_katello 0.23.1 → 1.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.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hammer_cli_katello.rb +20 -16
  3. data/lib/hammer_cli_katello/activation_key.rb +5 -5
  4. data/lib/hammer_cli_katello/capsule.rb +2 -3
  5. data/lib/hammer_cli_katello/command_extensions/lifecycle_environment.rb +10 -7
  6. data/lib/hammer_cli_katello/command_extensions/lifecycle_environments.rb +11 -8
  7. data/lib/hammer_cli_katello/content_credential.rb +20 -19
  8. data/lib/hammer_cli_katello/content_export.rb +73 -0
  9. data/lib/hammer_cli_katello/content_export_complete.rb +25 -0
  10. data/lib/hammer_cli_katello/content_export_helper.rb +181 -0
  11. data/lib/hammer_cli_katello/content_export_incremental.rb +25 -0
  12. data/lib/hammer_cli_katello/content_import.rb +63 -0
  13. data/lib/hammer_cli_katello/content_view.rb +19 -32
  14. data/lib/hammer_cli_katello/content_view_version.rb +4 -11
  15. data/lib/hammer_cli_katello/deb_package.rb +3 -3
  16. data/lib/hammer_cli_katello/erratum.rb +1 -1
  17. data/lib/hammer_cli_katello/erratum_info_command.rb +1 -1
  18. data/lib/hammer_cli_katello/file.rb +3 -3
  19. data/lib/hammer_cli_katello/filter.rb +2 -2
  20. data/lib/hammer_cli_katello/foreman_search_options_creators.rb +0 -12
  21. data/lib/hammer_cli_katello/host_collection.rb +2 -2
  22. data/lib/hammer_cli_katello/host_deb.rb +1 -1
  23. data/lib/hammer_cli_katello/host_errata.rb +1 -1
  24. data/lib/hammer_cli_katello/host_extensions.rb +5 -5
  25. data/lib/hammer_cli_katello/host_package.rb +1 -1
  26. data/lib/hammer_cli_katello/host_traces.rb +17 -0
  27. data/lib/hammer_cli_katello/hostgroup_extensions.rb +4 -4
  28. data/lib/hammer_cli_katello/id_resolver.rb +5 -6
  29. data/lib/hammer_cli_katello/lifecycle_environment.rb +2 -2
  30. data/lib/hammer_cli_katello/module_stream.rb +8 -8
  31. data/lib/hammer_cli_katello/organization_options.rb +8 -6
  32. data/lib/hammer_cli_katello/ostree_branch.rb +2 -2
  33. data/lib/hammer_cli_katello/package.rb +5 -5
  34. data/lib/hammer_cli_katello/package_group.rb +4 -4
  35. data/lib/hammer_cli_katello/ping.rb +2 -9
  36. data/lib/hammer_cli_katello/product.rb +3 -3
  37. data/lib/hammer_cli_katello/product_content.rb +2 -2
  38. data/lib/hammer_cli_katello/repository.rb +6 -37
  39. data/lib/hammer_cli_katello/repository_set.rb +4 -4
  40. data/lib/hammer_cli_katello/simple_content_access.rb +40 -0
  41. data/lib/hammer_cli_katello/srpm.rb +2 -2
  42. data/lib/hammer_cli_katello/subscription.rb +2 -3
  43. data/lib/hammer_cli_katello/sync_plan.rb +2 -2
  44. data/lib/hammer_cli_katello/version.rb +1 -1
  45. data/test/data/3.18/foreman_api.json +1 -0
  46. data/test/data/3.19/foreman_api.json +1 -0
  47. data/test/data/4.0/foreman_api.json +1 -0
  48. data/test/functional/capsule/content/info_test.rb +1 -2
  49. data/test/functional/content_credentials/create_test.rb +32 -0
  50. data/test/functional/{repository → content_credentials}/data/test_cert.json +0 -0
  51. data/test/functional/content_credentials/list_test.rb +6 -8
  52. data/test/functional/content_export/complete/library_test.rb +155 -0
  53. data/test/functional/content_export/complete/version_test.rb +217 -0
  54. data/test/functional/content_export/content_export_helpers.rb +26 -0
  55. data/test/functional/content_export/generate_metadata_test.rb +64 -0
  56. data/test/functional/content_export/incremental/library_test.rb +172 -0
  57. data/test/functional/content_export/incremental/version_test.rb +268 -0
  58. data/test/functional/content_export/list_test.rb +64 -0
  59. data/test/functional/content_import/library_test.rb +85 -0
  60. data/test/functional/content_import/metadata.json +1 -0
  61. data/test/functional/content_import/version_test.rb +85 -0
  62. data/test/functional/content_view/content_view_helpers.rb +3 -1
  63. data/test/functional/content_view/list_test.rb +0 -2
  64. data/test/functional/content_view/publish_test.rb +0 -21
  65. data/test/functional/content_view/version/promote_test.rb +1 -2
  66. data/test/functional/content_view/version/republish_repositories_test.rb +1 -2
  67. data/test/functional/host/errata/apply_test.rb +0 -2
  68. data/test/functional/host/errata/recalculate_test.rb +0 -2
  69. data/test/functional/host/extensions/update_test.rb +0 -1
  70. data/test/functional/host/traces/resolve_test.rb +31 -0
  71. data/test/functional/lifecycle_environment/lifecycle_environment_helpers.rb +1 -1
  72. data/test/functional/ping_test.rb +1 -2
  73. data/test/functional/repository/create_test.rb +0 -30
  74. data/test/functional/repository/info_test.rb +4 -4
  75. data/test/functional/repository/list_test.rb +0 -2
  76. data/test/functional/search_helpers.rb +11 -0
  77. data/test/functional/simple_content_access/disable_test.rb +48 -0
  78. data/test/functional/simple_content_access/enable_test.rb +46 -0
  79. data/test/test_helper.rb +1 -1
  80. metadata +45 -18
  81. data/lib/hammer_cli_katello/content_view_puppet_module.rb +0 -60
  82. data/lib/hammer_cli_katello/gpg_key.rb +0 -67
  83. data/lib/hammer_cli_katello/puppet_module.rb +0 -59
  84. data/test/functional/content_view/puppet_module/add_test.rb +0 -24
  85. data/test/functional/content_view/puppet_module/remove_test.rb +0 -54
  86. data/test/functional/gpg_test.rb +0 -39
  87. data/test/functional/repository/data/test_ca.json +0 -43
  88. data/test/functional/repository/data/test_key.json +0 -43
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 39b7d013b69ccff473c384efe07fbc1c1574033c074e685be65723f5e3d79156
4
- data.tar.gz: 9ba014e8f0a515eddfbb66d507483fa8f81b8873c5e670eca78755989bc1f40d
3
+ metadata.gz: 6a4a20566a58ddf6462ecdc274f1d4f7e107c482ac79ab93b42db2ab11b6d45e
4
+ data.tar.gz: 6ad63b1d4e551613de6508c34f137f835934c34731e6dcbb18e69a20b51d421a
5
5
  SHA512:
6
- metadata.gz: 32c3e1f7dc2aa8fa32ceba935d7229c7b628bdf9429f6ed1fa036e818d3cca44bfa47d5d2319e7b8b16354688302f6743168fca59aa62c4a956f9ba4206fe74c
7
- data.tar.gz: d270942a73c21fa9e996f1e0457d82b8e4abc866ddeed5d201d017febfbf9272640144aeacc260387550e8e8e22b36fac80b33b2e7b3d93fad87ff98ee465886
6
+ metadata.gz: 179e73dd5c1186e82ff0265cb7eeb36f1a86daee9b2fe915d9cb3fe855ae62420601d2f7ca3adb153d70ffaadaa492be3086ecf129ed17b9435441d8727ac2e1
7
+ data.tar.gz: 8918cf5f6376226d4cecd99a70dbadd59d3a7ba2d029517a06849e3f89a9e94b0ea5a76ce46edb60847ceb64b2dcf0af0724a86530541231cf0ae22fa2d2c593
@@ -31,6 +31,7 @@ module HammerCLIKatello
31
31
  require 'hammer_cli_katello/local_helper'
32
32
  require 'hammer_cli_katello/apipie_helper'
33
33
  require 'hammer_cli_katello/cv_import_export_helper'
34
+ require 'hammer_cli_katello/content_export_helper'
34
35
 
35
36
  # commands
36
37
  HammerCLI::MainCommand.lazy_subcommand("activation-key", _("Manipulate activation keys"),
@@ -43,18 +44,8 @@ module HammerCLIKatello
43
44
  'hammer_cli_katello/organization'
44
45
  )
45
46
 
46
- HammerCLI::MainCommand.lazy_subcommand("gpg",
47
- _("Manipulate GPG Key actions on the server"),
48
- 'HammerCLIKatello::GpgKeyCommand',
49
- 'hammer_cli_katello/gpg_key',
50
- :warning =>
51
- _('The gpg sub-command is deprecated and will be removed in one of the future versions.' \
52
- ' Please use the content-credentials command instead.')
53
- )
54
-
55
47
  HammerCLI::MainCommand.lazy_subcommand("content-credentials",
56
- _("Manipulate content credentials (i.e. GPG Keys)' \
57
- 'on the server"),
48
+ _("Manipulate content credentials on the server"),
58
49
  'HammerCLIKatello::ContentCredentialCommand',
59
50
  'hammer_cli_katello/content_credential'
60
51
  )
@@ -70,11 +61,6 @@ module HammerCLIKatello
70
61
  'hammer_cli_katello/product'
71
62
  )
72
63
 
73
- HammerCLI::MainCommand.lazy_subcommand("puppet-module", _("View Puppet Module details"),
74
- 'HammerCLIKatello::PuppetModule',
75
- 'hammer_cli_katello/puppet_module'
76
- )
77
-
78
64
  HammerCLI::MainCommand.lazy_subcommand("repository", _("Manipulate repositories"),
79
65
  'HammerCLIKatello::Repository',
80
66
  'hammer_cli_katello/repository'
@@ -142,6 +128,18 @@ module HammerCLIKatello
142
128
  'hammer_cli_katello/file'
143
129
  )
144
130
 
131
+ HammerCLI::MainCommand.lazy_subcommand("content-export",
132
+ _("Prepare content for export to a disconnected Katello"),
133
+ 'HammerCLIKatello::ContentExport',
134
+ 'hammer_cli_katello/content_export'
135
+ )
136
+
137
+ HammerCLI::MainCommand.lazy_subcommand("content-import",
138
+ _("Import content from an upstream archive."),
139
+ 'HammerCLIKatello::ContentImport',
140
+ 'hammer_cli_katello/content_import'
141
+ )
142
+
145
143
  HammerCLI::MainCommand.lazy_subcommand("module-stream", _("View Module Streams"),
146
144
  'HammerCLIKatello::ModuleStreamCommand',
147
145
  'hammer_cli_katello/module_stream'
@@ -152,6 +150,12 @@ module HammerCLIKatello
152
150
  'hammer_cli_katello/srpm'
153
151
  )
154
152
 
153
+ HammerCLI::MainCommand.lazy_subcommand("simple-content-access",
154
+ _("Simple content access commands"),
155
+ 'HammerCLIKatello::SimpleContentAccess',
156
+ 'hammer_cli_katello/simple_content_access'
157
+ )
158
+
155
159
  # subcommands to hammer_cli_foreman commands
156
160
  require 'hammer_cli_katello/host'
157
161
  require 'hammer_cli_katello/hostgroup'
@@ -11,7 +11,7 @@ module HammerCLIKatello
11
11
  action :index
12
12
 
13
13
  output do
14
- field :id, _("ID")
14
+ field :id, _("Id")
15
15
  field :name, _("Name")
16
16
  field :format_consumed, _("Host Limit")
17
17
  from :environment do
@@ -53,7 +53,7 @@ module HammerCLIKatello
53
53
 
54
54
  output do
55
55
  field :name, _("Name")
56
- field :id, _("ID")
56
+ field :id, _("Id")
57
57
  field :description, _("Description")
58
58
  field :format_limit, _("Host Limit")
59
59
  field :auto_attach, _("Auto Attach")
@@ -67,7 +67,7 @@ module HammerCLIKatello
67
67
  end
68
68
 
69
69
  collection :host_collections, _("Host Collections") do
70
- field :id, _("ID")
70
+ field :id, _("Id")
71
71
  field :name, _("Name")
72
72
  end
73
73
 
@@ -150,7 +150,7 @@ module HammerCLIKatello
150
150
  command_name "subscriptions"
151
151
 
152
152
  output do
153
- field :id, _("ID")
153
+ field :id, _("Id")
154
154
  field :product_name, _("Name")
155
155
  field :format_consumed, _("Attached")
156
156
  field :quantity_attached, _("Quantity")
@@ -230,7 +230,7 @@ module HammerCLIKatello
230
230
  command_name "host-collections"
231
231
 
232
232
  output do
233
- field :id, _("ID")
233
+ field :id, _("Id")
234
234
  field :name, _("Name")
235
235
  end
236
236
 
@@ -13,7 +13,7 @@ module HammerCLIKatello
13
13
  command_name 'lifecycle-environments'
14
14
 
15
15
  output do
16
- field :id, _("ID")
16
+ field :id, _("Id")
17
17
  field :name, _("Name")
18
18
  from :organization do
19
19
  field :name, _("Organization")
@@ -28,7 +28,7 @@ module HammerCLIKatello
28
28
  command_name 'available-lifecycle-environments'
29
29
 
30
30
  output do
31
- field :id, _("ID")
31
+ field :id, _("Id")
32
32
  field :name, _("Name")
33
33
  from :organization do
34
34
  field :name, _("Organization")
@@ -167,7 +167,6 @@ module HammerCLIKatello
167
167
  field :packages, _('Packages')
168
168
  field :package_groups, _('Package groups')
169
169
  field :errata, _('Errata')
170
- field :puppet_modules, _('Puppet modules')
171
170
  end
172
171
  end
173
172
  end
@@ -2,13 +2,16 @@ module HammerCLIKatello
2
2
  module CommandExtensions
3
3
  class LifecycleEnvironment < HammerCLI::CommandExtensions
4
4
  # Remove when support of --environment options is ended.
5
- option '--environment', 'ENVIRONMENT_NAME', _('Lifecycle environment name to search by'),
6
- attribute_name: :option_environment_name,
7
- deprecated: { '--environment' => _('Use --lifecycle-environment instead') }
8
- option '--environment-id', 'ENVIRONMENT_ID', _(''),
9
- format: HammerCLI::Options::Normalizers::Number.new,
10
- attribute_name: :option_environment_id,
11
- deprecated: { '--environment-id' => _('Use --lifecycle-environment-id instead') }
5
+ option_family(
6
+ deprecated: { '--environment' => _("Use %s instead") % '--lifecycle-environment',
7
+ '--environment-id' => _("Use %s instead") % '--lifecycle-environment-id'}
8
+ ) do
9
+ child '--environment', 'ENVIRONMENT_NAME', _('Lifecycle environment name to search by'),
10
+ attribute_name: :option_environment_name
11
+ parent '--environment-id', 'ENVIRONMENT_ID', _(''),
12
+ format: HammerCLI::Options::Normalizers::Number.new,
13
+ attribute_name: :option_environment_id
14
+ end
12
15
 
13
16
  option_sources do |sources, command|
14
17
  sources.find_by_name('IdResolution').insert_relative(
@@ -2,14 +2,17 @@ module HammerCLIKatello
2
2
  module CommandExtensions
3
3
  class LifecycleEnvironments < HammerCLI::CommandExtensions
4
4
  # Remove when support of --environments options is ended.
5
- option '--environments', 'ENVIRONMENT_NAMES', _(''),
6
- format: HammerCLI::Options::Normalizers::List.new,
7
- attribute_name: :option_environment_names,
8
- deprecated: { '--environments' => _('Use --lifecycle-environments instead') }
9
- option '--environment-ids', 'ENVIRONMENT_IDS', _(''),
10
- format: HammerCLI::Options::Normalizers::List.new,
11
- attribute_name: :option_environment_ids,
12
- deprecated: { '--environment-ids' => _('Use --lifecycle-environment-ids instead') }
5
+ option_family(
6
+ format: HammerCLI::Options::Normalizers::List.new,
7
+ deprecation: _("Use %s instead") % '--lifecycle-environment[s|-ids]',
8
+ deprecated: { '--environments' => _("Use %s instead") % '--lifecycle-environments',
9
+ '--environment-ids' => _("Use %s instead") % '--lifecycle-environment-ids'}
10
+ ) do
11
+ parent '--environment-ids', 'ENVIRONMENT_IDS', _(''),
12
+ attribute_name: :option_environment_ids
13
+ child '--environments', 'ENVIRONMENT_NAMES', _(''),
14
+ attribute_name: :option_environment_names
15
+ end
13
16
 
14
17
  option_sources do |sources, command|
15
18
  sources.find_by_name('IdResolution').insert_relative(
@@ -4,8 +4,9 @@ module HammerCLIKatello
4
4
 
5
5
  class ListCommand < HammerCLIKatello::ListCommand
6
6
  output do
7
- field :id, _("ID")
8
- field :name, _("Name")
7
+ field :id, _('Id')
8
+ field :name, _('Name')
9
+ field :content_type, _('Content Type')
9
10
  end
10
11
 
11
12
  build_options
@@ -13,51 +14,51 @@ module HammerCLIKatello
13
14
 
14
15
  class InfoCommand < HammerCLIKatello::InfoCommand
15
16
  output do
16
- field :id, _("ID")
17
- field :name, _("Name")
17
+ field :id, _('Id')
18
+ field :name, _('Name')
18
19
  from :organization do
19
- field :name, _("Organization")
20
+ field :name, _('Organization')
20
21
  end
21
22
 
22
- collection :repositories, "Repositories" do
23
- field :id, _("ID")
24
- field :name, _("Name")
25
- field :content_type, _("Content Type")
23
+ collection :repositories, 'Repositories' do
24
+ field :id, _('Id')
25
+ field :name, _('Name')
26
+ field :content_type, _('Content Type')
26
27
  from :product do
27
- field :name, _("Product")
28
+ field :name, _('Product')
28
29
  end
29
30
  end
30
31
 
31
- field :content, _("Content"), Fields::LongText
32
+ field :content, _('Content'), Fields::LongText
32
33
  end
33
34
 
34
35
  build_options
35
36
  end
36
37
 
37
38
  class CreateCommand < HammerCLIKatello::CreateCommand
38
- success_message _("Content credential created.")
39
- failure_message _("Could not create GPG key")
39
+ success_message _('Content Credential created.')
40
+ failure_message _('Could not create Content Credential')
40
41
 
41
42
  build_options :without => [:content]
42
- option "--key", "GPG_KEY_FILE", _("GPG Key file"),
43
+ option '--path', 'KEY_FILE', _('Key file'),
43
44
  :attribute_name => :option_content,
44
45
  :required => true,
45
46
  :format => HammerCLI::Options::Normalizers::File.new
46
47
  end
47
48
 
48
49
  class UpdateCommand < HammerCLIKatello::UpdateCommand
49
- success_message _("GPG Key updated.")
50
- failure_message _("Could not update GPG Key")
50
+ success_message _('Content Credential updated.')
51
+ failure_message _('Could not update Content Credential')
51
52
 
52
53
  build_options :without => [:content]
53
- option "--key", "GPG_KEY_FILE", _("GPG Key file"),
54
+ option '--path', 'KEY_FILE', _('Key file'),
54
55
  :attribute_name => :option_content,
55
56
  :format => HammerCLI::Options::Normalizers::File.new
56
57
  end
57
58
 
58
59
  class DeleteCommand < HammerCLIKatello::DeleteCommand
59
- success_message _("GPG Key deleted.")
60
- failure_message _("Could not delete the GPG Key")
60
+ success_message _('Content Credential deleted.')
61
+ failure_message _('Could not delete the Content Credential')
61
62
 
62
63
  build_options
63
64
  end
@@ -0,0 +1,73 @@
1
+ require 'hammer_cli_katello/content_export_complete'
2
+ require 'hammer_cli_katello/content_export_incremental'
3
+
4
+ module HammerCLIKatello
5
+ class ContentExport < HammerCLIKatello::Command
6
+ desc "Prepare content for export to a disconnected Katello"
7
+ resource :content_exports
8
+
9
+ class GenerateMetadataCommand < HammerCLIKatello::Command
10
+ desc _("Writes export metadata to disk for use by the importing Katello. This command "\
11
+ + "only needs to be used if the export was performed asynchronously "\
12
+ + "or if the metadata was lost")
13
+
14
+ command_name 'generate-metadata'
15
+
16
+ include ContentExportHelper
17
+
18
+ option "--task-id", "TASK_ID",
19
+ _("Generate metadata based on output of the specified export task"),
20
+ :attribute_name => :option_task_id,
21
+ :required => false
22
+
23
+ option "--id", "ID",
24
+ _("Generate metadata based on specified export history"),
25
+ :attribute_name => :option_export_id,
26
+ :required => false
27
+
28
+ def execute
29
+ export_history = if option_task_id
30
+ export_task = reload_task(option_task_id)
31
+ fetch_export_history_from_task(export_task)
32
+ else
33
+ fetch_export_history(option_export_id)
34
+ end
35
+
36
+ unless export_history
37
+ raise _("No export history was found. Verify the value given for "\
38
+ + "--task-id or --id")
39
+ end
40
+
41
+ generate_metadata_json(export_history)
42
+
43
+ HammerCLI::EX_OK
44
+ end
45
+ end
46
+
47
+ class ListCommand < HammerCLIKatello::ListCommand
48
+ desc "View content view export histories"
49
+ output do
50
+ field :id, _('ID')
51
+ field :destination_server, _('Destination Server')
52
+ field :path, _('Path')
53
+ field :type, _('Type')
54
+ field :content_view_version, _('Content View Version')
55
+ field :content_view_version_id, _('Content View Version ID')
56
+ field :created_at, _('Created at')
57
+ field :updated_at, _('Updated at'), Fields::Field, :hide_blank => true
58
+ end
59
+
60
+ build_options
61
+ end
62
+
63
+ autoload_subcommands
64
+
65
+ subcommand HammerCLIKatello::ContentExportComplete.command_name,
66
+ HammerCLIKatello::ContentExportComplete.desc,
67
+ HammerCLIKatello::ContentExportComplete
68
+
69
+ subcommand HammerCLIKatello::ContentExportIncremental.command_name,
70
+ HammerCLIKatello::ContentExportIncremental.desc,
71
+ HammerCLIKatello::ContentExportIncremental
72
+ end
73
+ end
@@ -0,0 +1,25 @@
1
+ module HammerCLIKatello
2
+ class ContentExportComplete < HammerCLIKatello::Command
3
+ desc "Prepare content for a full export to a disconnected Katello"
4
+ resource :content_exports
5
+ command_name 'complete'
6
+
7
+ class VersionCommand < HammerCLIKatello::SingleResourceCommand
8
+ desc _('Performs a full export a content view version')
9
+ command_name "version"
10
+
11
+ include HammerCLIForemanTasks::Async
12
+ include ContentExportHelper
13
+ end
14
+
15
+ class LibraryCommand < HammerCLIKatello::SingleResourceCommand
16
+ desc _("Performs a full export of the organization's library environment")
17
+ command_name "library"
18
+
19
+ include HammerCLIForemanTasks::Async
20
+ include ContentExportHelper
21
+ end
22
+
23
+ autoload_subcommands
24
+ end
25
+ end
@@ -0,0 +1,181 @@
1
+ require 'hammer_cli_katello/repository'
2
+ # rubocop:disable ModuleLength
3
+ module HammerCLIKatello
4
+ module ContentExportHelper
5
+ include ApipieHelper
6
+
7
+ def execute
8
+ warn_unexportable_repositories
9
+ response = super
10
+ if option_async?
11
+ output.print_message _("Once the task completes the export metadata must be generated "\
12
+ + "with the command:")
13
+ output.print_message(" hammer content-export generate-metadata --task-id #{@task['id']}")
14
+ HammerCLI::EX_OK
15
+ elsif response != HammerCLI::EX_OK
16
+ response
17
+ else
18
+ export_history = fetch_export_history_from_task(reload_task(@task))
19
+ if export_history
20
+ generate_metadata_json(export_history)
21
+ HammerCLI::EX_OK
22
+ else
23
+ output.print_error _("Could not fetch the export history")
24
+ HammerCLI::EX_CANTCREAT
25
+ end
26
+ end
27
+ end
28
+
29
+ def send_request
30
+ @task = super
31
+ end
32
+
33
+ def reload_task(task)
34
+ task_id = if task.is_a? Hash
35
+ task['id']
36
+ else
37
+ task
38
+ end
39
+ show(:foreman_tasks, id: task_id)
40
+ end
41
+
42
+ def fetch_export_history(export_history_id)
43
+ index(:content_exports, :id => export_history_id).first if export_history_id
44
+ end
45
+
46
+ def fetch_export_history_from_task(task)
47
+ # checking this here implies the task object was loaded recently
48
+ if %w(error warning).include?(task['result'])
49
+ raise _("Can not fetch export history from an unfinished task")
50
+ end
51
+
52
+ export_history_id = task.dig('output', 'export_history_id')
53
+ fetch_export_history(export_history_id)
54
+ end
55
+
56
+ def generate_metadata_json(export_history)
57
+ metadata_json = export_history["metadata"].to_json
58
+ begin
59
+ metadata_path = "#{export_history['path']}/metadata.json"
60
+ File.write(metadata_path, metadata_json)
61
+ output.print_message _("Generated #{metadata_path}")
62
+ rescue SystemCallError
63
+ filename = "metadata-#{export_history['id']}.json"
64
+ File.write(filename, metadata_json)
65
+ output.print_message _("Unable to access/write to '#{export_history['path']}'. "\
66
+ "Generated '#{Dir.pwd}/#{filename}' instead. "\
67
+ "This file is necessary to perform an import.")
68
+ end
69
+ end
70
+
71
+ def version_command?
72
+ self.class.command_name.first.to_sym == :version
73
+ end
74
+
75
+ def fetch_repositories
76
+ repo_options = {
77
+ library: true,
78
+ content_type: 'yum',
79
+ search: 'download_policy != immediate'
80
+ }
81
+ if version_command?
82
+ repo_options[:content_view_version_id] = resolver.content_view_version_id(options)
83
+ else
84
+ repo_options[:organization_id] = options["option_organization_id"]
85
+ end
86
+ index(:repositories, repo_options)
87
+ end
88
+
89
+ def warn_unexportable_repositories
90
+ repos = fetch_repositories
91
+ unless repos.empty?
92
+ if version_command?
93
+ output.print_message _("NOTE: Unable to fully export this version because"\
94
+ " it contains repositories without the 'immediate' download policy."\
95
+ " Update the download policy and sync affected repositories."\
96
+ " Once synced republish the content view"\
97
+ " and export the generated version.")
98
+ else
99
+ output.print_message _("NOTE: Unable to fully export this organization's library because"\
100
+ " it contains repositories without the 'immediate' download policy."\
101
+ " Update the download policy and sync affected"\
102
+ " repositories to include them in the export.")
103
+ end
104
+ output.print_message _("Use the following command to update the "\
105
+ "download policy of these repositories.")
106
+ output.print_message "hammer repository update --id=<REPOSITORY_ID> "\
107
+ "--download-policy='immediate'"
108
+ output.print_message ""
109
+ print_record(::HammerCLIKatello::Repository::ListCommand.output_definition, repos)
110
+ exit(HammerCLI::EX_SOFTWARE) if option_fail_on_missing_content?
111
+ end
112
+ end
113
+
114
+ def self.included(base)
115
+ if base.command_name.first.to_sym == :version
116
+ setup_version(base)
117
+ elsif base.command_name.first.to_sym == :library
118
+ setup_library(base)
119
+ end
120
+ end
121
+
122
+ def self.setup_library(base)
123
+ base.action(:library)
124
+ base.success_message _("Library environment is being exported in task %{id}.")
125
+ base.failure_message _("Could not export the library")
126
+ base.option "--fail-on-missing-content", :flag,
127
+ _("Fails if any of the repositories belonging"\
128
+ " to this organization are unexportable.")
129
+
130
+ base.build_options do |o|
131
+ o.expand(:all).including(:organizations)
132
+ end
133
+ end
134
+
135
+ def self.setup_version(base)
136
+ base.action(:version)
137
+ setup_version_options(base)
138
+ base.success_message _("Content view version is being exported in task %{id}.")
139
+ base.failure_message _("Could not export the content view version")
140
+
141
+ base.extend_with(
142
+ HammerCLIKatello::CommandExtensions::LifecycleEnvironments.new(only: :option_sources)
143
+ )
144
+ base.include(LifecycleEnvironmentNameMapping)
145
+
146
+ base.class_eval do
147
+ def request_params
148
+ super.tap do |opts|
149
+ opts["id"] = resolver.content_view_version_id(options)
150
+ end
151
+ end
152
+ end
153
+ end
154
+
155
+ def self.setup_version_options(base)
156
+ base.option "--fail-on-missing-content", :flag,
157
+ _("Fails if any of the repositories belonging"\
158
+ " to this version are unexportable.")
159
+
160
+ base.option "--version", "VERSION", _("Filter versions by version number."),
161
+ :attribute_name => :option_version,
162
+ :required => false
163
+
164
+ base.build_options do |o|
165
+ o.expand(:all).including(:content_views, :organizations, :environments)
166
+ o.without(:environment_ids, :environment_id)
167
+ end
168
+
169
+ base.validate_options do
170
+ unless option(:option_id).exist?
171
+ any(:option_id, :option_content_view_name, :option_content_view_id).required
172
+ any(:option_version, :option_environment_id, :option_environment_name).required
173
+ unless option(:option_content_view_id).exist?
174
+ any(:option_organization_id, :option_organization_name, \
175
+ :option_organization_label).required
176
+ end
177
+ end
178
+ end
179
+ end
180
+ end
181
+ end