hammer_cli_katello 0.3.0 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hammer_cli_katello.rb +0 -1
- data/lib/hammer_cli_katello/activation_key.rb +12 -29
- data/lib/hammer_cli_katello/composite_content_view_name_resolvable.rb +6 -8
- data/lib/hammer_cli_katello/content_override.rb +48 -0
- data/lib/hammer_cli_katello/content_view.rb +98 -5
- data/lib/hammer_cli_katello/content_view_name_resolvable.rb +4 -6
- data/lib/hammer_cli_katello/content_view_purge.rb +92 -0
- data/lib/hammer_cli_katello/content_view_version.rb +13 -0
- data/lib/hammer_cli_katello/erratum.rb +9 -0
- data/lib/hammer_cli_katello/filter_rule.rb +3 -4
- data/lib/hammer_cli_katello/host_collection.rb +8 -2
- data/lib/hammer_cli_katello/host_errata.rb +1 -1
- data/lib/hammer_cli_katello/host_subscription.rb +25 -0
- data/lib/hammer_cli_katello/hostgroup_extensions.rb +7 -6
- data/lib/hammer_cli_katello/id_resolver.rb +13 -4
- data/lib/hammer_cli_katello/katello_environment_name_resolvable.rb +4 -6
- data/lib/hammer_cli_katello/lifecycle_environment_name_resolvable.rb +4 -6
- data/lib/hammer_cli_katello/organization.rb +1 -0
- data/lib/hammer_cli_katello/package.rb +16 -3
- data/lib/hammer_cli_katello/package_group.rb +16 -2
- data/lib/hammer_cli_katello/product_content.rb +36 -0
- data/lib/hammer_cli_katello/repository.rb +48 -7
- data/lib/hammer_cli_katello/version.rb +1 -1
- data/test/data/3.4/foreman_api.json +1 -0
- data/test/functional/{activaton_key → activation_key}/add_host_collection_test.rb +0 -0
- data/test/functional/activation_key/content_override_test.rb +91 -0
- data/test/functional/{activaton_key → activation_key}/create_test.rb +0 -0
- data/test/functional/{activaton_key → activation_key}/list_test.rb +0 -0
- data/test/functional/{activaton_key → activation_key}/product_content_test.rb +0 -0
- data/test/functional/{activaton_key → activation_key}/remove_host_collection_test.rb +0 -0
- data/test/functional/{activaton_key → activation_key}/subscriptions_test.rb +0 -0
- data/test/functional/{activaton_key → activation_key}/update_test.rb +0 -0
- data/test/functional/content_view/add_content_view_version_test.rb +57 -3
- data/test/functional/content_view/add_repository_test.rb +1 -0
- data/test/functional/content_view/copy_test.rb +53 -0
- data/test/functional/content_view/delete_test.rb +62 -0
- data/test/functional/content_view/publish_test.rb +1 -0
- data/test/functional/content_view/puppet_module/add_test.rb +1 -0
- data/test/functional/content_view/purge_test.rb +72 -0
- data/test/functional/content_view/remove_content_view_version_test.rb +57 -3
- data/test/functional/content_view/remove_test.rb +78 -0
- data/test/functional/content_view/update_test.rb +53 -0
- data/test/functional/content_view/version/republish_repositories_test.rb +35 -0
- data/test/functional/erratum/list_test.rb +108 -0
- data/test/functional/host/subscription/content_override_test.rb +95 -0
- data/test/functional/host/subscription/product_content_test.rb +27 -0
- data/test/functional/host_collection/content_api_expectations.rb +35 -0
- data/test/functional/host_collection/content_install_test.rb +42 -17
- data/test/functional/host_collection/content_remove_test.rb +22 -12
- data/test/functional/host_collection/content_update_test.rb +22 -12
- data/test/functional/hostgroup/create_test.rb +6 -0
- data/test/functional/hostgroup/data/hostgroup.json +2 -2
- data/test/functional/hostgroup/info_test.rb +2 -1
- data/test/functional/hostgroup/update_test.rb +12 -0
- data/test/functional/package/list_test.rb +89 -18
- data/test/functional/package_group/list_test.rb +33 -0
- data/test/functional/repository/export_test.rb +121 -0
- data/test/functional/repository/remove_content_test.rb +98 -8
- data/test/functional/repository/update_test.rb +108 -0
- data/test/functional/repository/upload_test.rb +73 -3
- data/test/test_helper.rb +1 -1
- data/test/unit/id_resolver_test.rb +26 -0
- metadata +54 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b724181082827487def5bd163bd3ede79f92d898
|
4
|
+
data.tar.gz: c479307f8e19564413bb8e0b29da2582e98b4625
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ff728a57e711d064752fc75f721fc283634f4cb0cc50df4b80813e9d01b11099c6654ab3b9c440610511023c49892c6fb1dbfff04e9dbf41bb318ece1978efa
|
7
|
+
data.tar.gz: 99dc2f0ba6c14a6e1cf1388d6b4c9f7712b2db6089f3295e24bc196efa7d60657e276a62ace84d15b5f2630d6a3205d30a94dacf83d2d2e75d5cce45336086b8
|
data/lib/hammer_cli_katello.rb
CHANGED
@@ -23,7 +23,6 @@ module HammerCLIKatello
|
|
23
23
|
require "hammer_cli_katello/version"
|
24
24
|
require "hammer_cli_katello/exception_handler"
|
25
25
|
require 'hammer_cli_katello/i18n'
|
26
|
-
require "hammer_cli_katello/version"
|
27
26
|
require 'hammer_cli_katello/id_resolver'
|
28
27
|
require 'hammer_cli_katello/capsule'
|
29
28
|
require 'hammer_cli_katello/id_name_options_validator'
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'hammer_cli_katello/content_override'
|
2
|
+
require 'hammer_cli_katello/product_content'
|
3
|
+
|
1
4
|
module HammerCLIKatello
|
2
5
|
class ActivationKeyCommand < HammerCLIKatello::Command
|
3
6
|
resource :activation_keys
|
@@ -191,38 +194,18 @@ module HammerCLIKatello
|
|
191
194
|
failure_message _("Could not remove subscription from activation key")
|
192
195
|
end
|
193
196
|
|
194
|
-
class ProductContentCommand < HammerCLIKatello::
|
195
|
-
|
196
|
-
|
197
|
-
desc _("List associated products")
|
198
|
-
command_name "product-content"
|
199
|
-
|
200
|
-
output do
|
201
|
-
from :content do
|
202
|
-
field :id, _("ID")
|
203
|
-
field :name, _("Name")
|
204
|
-
field :type, _("Type")
|
205
|
-
field :contentUrl, _("URL")
|
206
|
-
field :gpgUrl, _("GPG Key")
|
207
|
-
field :label, _("Label")
|
208
|
-
end
|
209
|
-
field :enabled, _("Enabled?"), Fields::Boolean
|
210
|
-
field :override, _("Override")
|
211
|
-
end
|
212
|
-
|
213
|
-
build_options
|
197
|
+
class ProductContentCommand < HammerCLIKatello::ProductContentBase::ProductContentCommand
|
198
|
+
resource :activation_keys, :product_content
|
199
|
+
setup
|
214
200
|
end
|
215
201
|
|
216
|
-
class ContentOverrideCommand < HammerCLIKatello::
|
217
|
-
|
202
|
+
class ContentOverrideCommand < ::HammerCLIKatello::ContentOverrideBase::ContentOverrideCommand
|
203
|
+
resource :activation_keys, :content_override
|
204
|
+
setup
|
218
205
|
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
build_options
|
223
|
-
|
224
|
-
success_message _("Updated content override")
|
225
|
-
failure_message _("Could not update content override")
|
206
|
+
build_options do |o|
|
207
|
+
o.without(:content_overrides)
|
208
|
+
end
|
226
209
|
end
|
227
210
|
|
228
211
|
class HostCollectionsCommand < HammerCLIKatello::ListCommand
|
@@ -10,15 +10,13 @@ module HammerCLIKatello
|
|
10
10
|
}
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
result['option_composite_content_view_id'] = resolver.content_view_id(options)
|
19
|
-
@all_options = result
|
13
|
+
def options
|
14
|
+
if super['option_composite_content_view_name'] &&
|
15
|
+
super['option_composite_content_view_id'].nil?
|
16
|
+
options = composite_content_view_resolve_options(super)
|
17
|
+
super['option_composite_content_view_id'] = resolver.content_view_id(options)
|
20
18
|
end
|
21
|
-
|
19
|
+
super
|
22
20
|
end
|
23
21
|
|
24
22
|
def self.included(base)
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module HammerCLIKatello
|
2
|
+
module ContentOverrideBase
|
3
|
+
class ContentOverrideCommand < HammerCLIKatello::SingleResourceCommand
|
4
|
+
def self.setup
|
5
|
+
desc _("Override product content defaults")
|
6
|
+
command_name "content-override"
|
7
|
+
|
8
|
+
success_message _("Updated content override")
|
9
|
+
failure_message _("Could not update content override")
|
10
|
+
|
11
|
+
option "--content-label", "CONTENT_LABEL", _("Label of the content"),
|
12
|
+
:attribute_name => :option_content_label, :required => true
|
13
|
+
|
14
|
+
option "--name", "NAME", _("Name/Key to override. " \
|
15
|
+
"To enable or disable a repo select 'enabled'." \
|
16
|
+
"Default value: enabled"),
|
17
|
+
:attribute_name => :option_name, :default => "enabled"
|
18
|
+
|
19
|
+
option "--value", "VALUE", _("Override value. " \
|
20
|
+
"Note for repo enablement you can use a boolean value"),
|
21
|
+
:attribute_name => :option_value, :required => false
|
22
|
+
|
23
|
+
option ["--remove"], :flag, _("Remove a content override")
|
24
|
+
|
25
|
+
validate_options do
|
26
|
+
any(:option_remove, :option_value).required
|
27
|
+
|
28
|
+
if option(:option_remove).exist?
|
29
|
+
option(:option_value).rejected
|
30
|
+
elsif option(:option_value).exist?
|
31
|
+
option(:option_remove).rejected
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def request_params
|
37
|
+
super.tap do |opts|
|
38
|
+
opts.delete('content_override')
|
39
|
+
override = { 'content_label' => option_content_label }
|
40
|
+
override['value'] = option_value if option_value
|
41
|
+
override['remove'] = true if option_remove?
|
42
|
+
override['name'] = option_name
|
43
|
+
opts['content_overrides'] = [override]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'hammer_cli_katello/content_view_puppet_module'
|
2
|
+
require 'hammer_cli_katello/content_view_purge'
|
2
3
|
require 'hammer_cli_katello/filter'
|
3
4
|
require 'hammer_cli_katello/content_view_version'
|
4
5
|
require 'hammer_cli_katello/content_view_component'
|
@@ -125,12 +126,32 @@ module HammerCLIKatello
|
|
125
126
|
end
|
126
127
|
|
127
128
|
class CopyCommand < HammerCLIKatello::CreateCommand
|
129
|
+
include OrganizationOptions
|
130
|
+
|
128
131
|
action :copy
|
129
132
|
|
130
133
|
desc _("Copy a content view")
|
131
134
|
command_name "copy"
|
132
135
|
|
133
|
-
option "--name", "NAME", _("
|
136
|
+
option "--name", "NAME", _("Content view name to search by"), :attribute_name => :option_name
|
137
|
+
option "--new-name", "NEW_NAME", _("New content view name"),
|
138
|
+
:attribute_name => :option_new_name
|
139
|
+
|
140
|
+
validate_options do
|
141
|
+
organization_options = [:option_organization_id, :option_organization_name, \
|
142
|
+
:option_organization_label]
|
143
|
+
|
144
|
+
if option(:option_name).exist?
|
145
|
+
any(*organization_options).required
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def request_params
|
150
|
+
super.tap do |opts|
|
151
|
+
opts['name'] = option_new_name
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
134
155
|
build_options
|
135
156
|
|
136
157
|
success_message _("Content view copied")
|
@@ -138,14 +159,26 @@ module HammerCLIKatello
|
|
138
159
|
end
|
139
160
|
|
140
161
|
class UpdateCommand < HammerCLIKatello::UpdateCommand
|
162
|
+
include OrganizationOptions
|
163
|
+
|
141
164
|
success_message _("Content view updated")
|
142
165
|
failure_message _("Could not update the content view")
|
143
166
|
|
167
|
+
validate_options do
|
168
|
+
organization_options = [:option_organization_id, :option_organization_name, \
|
169
|
+
:option_organization_label]
|
170
|
+
|
171
|
+
if option(:option_name).exist?
|
172
|
+
any(*organization_options).required
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
144
176
|
build_options
|
145
177
|
end
|
146
178
|
|
147
179
|
class DeleteCommand < HammerCLIKatello::DeleteCommand
|
148
180
|
include HammerCLIForemanTasks::Async
|
181
|
+
include OrganizationOptions
|
149
182
|
|
150
183
|
action :destroy
|
151
184
|
command_name "delete"
|
@@ -153,6 +186,15 @@ module HammerCLIKatello
|
|
153
186
|
success_message _("Content view is being deleted with task %{id}")
|
154
187
|
failure_message _("Could not delete the content view")
|
155
188
|
|
189
|
+
validate_options do
|
190
|
+
organization_options = [:option_organization_id, :option_organization_name, \
|
191
|
+
:option_organization_label]
|
192
|
+
|
193
|
+
if option(:option_name).exist?
|
194
|
+
any(*organization_options).required
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
156
198
|
build_options
|
157
199
|
end
|
158
200
|
|
@@ -197,10 +239,17 @@ module HammerCLIKatello
|
|
197
239
|
option ["--environment-ids"], "ENVIRONMENT_IDS",
|
198
240
|
_("Comma separated list of environment ids to remove")
|
199
241
|
|
242
|
+
def all_options
|
243
|
+
opts = super
|
244
|
+
opts['option_content_view_id'] = option_id
|
245
|
+
opts['option_lifecycle_environment_names'] = opts['option_environment_names']
|
246
|
+
opts
|
247
|
+
end
|
248
|
+
|
200
249
|
def request_params
|
201
250
|
super.tap do |opts|
|
202
251
|
%w(content_view_version_ids environment_ids).each do |key|
|
203
|
-
opts[key] = opts[key].split(",") if opts[key]
|
252
|
+
opts[key] = opts[key].split(",") if opts[key] && opts[key].respond_to?(:split)
|
204
253
|
end
|
205
254
|
end
|
206
255
|
end
|
@@ -208,34 +257,74 @@ module HammerCLIKatello
|
|
208
257
|
success_message _("Content view objects are being removed task %{id}")
|
209
258
|
failure_message _("Could not remove objects from content view")
|
210
259
|
|
211
|
-
build_options
|
260
|
+
build_options
|
212
261
|
end
|
213
262
|
|
214
263
|
class AddContentViewVersionCommand < HammerCLIKatello::AddAssociatedCommand
|
264
|
+
include OrganizationOptions
|
265
|
+
|
215
266
|
command_name 'add-version'
|
216
267
|
desc _('Add a content view version to a composite view')
|
217
268
|
|
269
|
+
validate_options do
|
270
|
+
if option(:option_content_view_version_version).exist?
|
271
|
+
any(:option_content_view_id, :option_content_view_name).required
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
218
275
|
def association_name(plural = false)
|
219
276
|
plural ? "components" : "component"
|
220
277
|
end
|
221
278
|
|
279
|
+
validate_options do
|
280
|
+
organization_options = [:option_organization_id, :option_organization_name, \
|
281
|
+
:option_organization_label]
|
282
|
+
|
283
|
+
if option(:option_name).exist?
|
284
|
+
any(*organization_options).required
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
222
288
|
associated_resource :content_view_versions
|
223
|
-
|
289
|
+
|
290
|
+
build_options do |o|
|
291
|
+
o.expand.including(:content_views)
|
292
|
+
end
|
224
293
|
|
225
294
|
success_message _("The component version has been added")
|
226
295
|
failure_message _("Could not add version")
|
227
296
|
end
|
228
297
|
|
229
298
|
class RemoveContentViewVersionCommand < HammerCLIKatello::RemoveAssociatedCommand
|
299
|
+
include OrganizationOptions
|
300
|
+
|
230
301
|
command_name 'remove-version'
|
231
302
|
desc _('Remove a content view version from a composite view')
|
232
303
|
|
304
|
+
validate_options do
|
305
|
+
if option(:option_content_view_version_version).exist?
|
306
|
+
any(:option_content_view_id, :option_content_view_name).required
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
233
310
|
def association_name(plural = false)
|
234
311
|
plural ? "components" : "component"
|
235
312
|
end
|
236
313
|
|
314
|
+
validate_options do
|
315
|
+
organization_options = [:option_organization_id, :option_organization_name, \
|
316
|
+
:option_organization_label]
|
317
|
+
|
318
|
+
if option(:option_name).exist?
|
319
|
+
any(*organization_options).required
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
237
323
|
associated_resource :content_view_versions
|
238
|
-
|
324
|
+
|
325
|
+
build_options do |o|
|
326
|
+
o.expand.including(:content_views)
|
327
|
+
end
|
239
328
|
|
240
329
|
success_message _("The component version has been removed")
|
241
330
|
failure_message _("Could not remove version")
|
@@ -260,5 +349,9 @@ module HammerCLIKatello
|
|
260
349
|
subcommand HammerCLIKatello::ContentViewComponent.command_name,
|
261
350
|
HammerCLIKatello::ContentViewComponent.desc,
|
262
351
|
HammerCLIKatello::ContentViewComponent
|
352
|
+
|
353
|
+
subcommand HammerCLIKatello::ContentViewPurgeCommand.command_name,
|
354
|
+
HammerCLIKatello::ContentViewPurgeCommand.desc,
|
355
|
+
HammerCLIKatello::ContentViewPurgeCommand
|
263
356
|
end
|
264
357
|
end
|
@@ -9,13 +9,11 @@ module HammerCLIKatello
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def all_options
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
content_view_resolve_options(result))
|
16
|
-
@all_options = result
|
12
|
+
if super['option_content_view_name'] && super['option_content_view_id'].nil?
|
13
|
+
super['option_content_view_id'] = resolver.content_view_id(
|
14
|
+
content_view_resolve_options(super))
|
17
15
|
end
|
18
|
-
|
16
|
+
super
|
19
17
|
end
|
20
18
|
end
|
21
19
|
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module HammerCLIKatello
|
2
|
+
class ContentViewPurgeCommand < HammerCLIKatello::Command
|
3
|
+
include HammerCLIForemanTasks::Async
|
4
|
+
include OrganizationOptions
|
5
|
+
|
6
|
+
command_name "purge"
|
7
|
+
desc "Delete old versions of a content view"
|
8
|
+
|
9
|
+
option "--id", "ID", _("Content View numeric identifier")
|
10
|
+
option "--name", "NAME", _("Content View name")
|
11
|
+
option "--count", "COUNT", _("count of unused versions to keep"),
|
12
|
+
default: 3, format: HammerCLI::Options::Normalizers::Number.new
|
13
|
+
|
14
|
+
validate_options do
|
15
|
+
organization_options = [:option_organization_id, :option_organization_name, \
|
16
|
+
:option_organization_label]
|
17
|
+
|
18
|
+
any(:option_name, :option_id).required
|
19
|
+
|
20
|
+
if option(:option_name).exist?
|
21
|
+
any(*organization_options).required
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
build_options
|
26
|
+
|
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
|
+
def all_options
|
36
|
+
if super['option_id'].nil? && super['option_name']
|
37
|
+
super['option_id'] = resolver.content_view_id(super)
|
38
|
+
end
|
39
|
+
super
|
40
|
+
end
|
41
|
+
|
42
|
+
def execute
|
43
|
+
if option_count < 0
|
44
|
+
output.print_error _("Invalid value for --count option: value must be 0 or greater.")
|
45
|
+
return HammerCLI::EX_USAGE
|
46
|
+
end
|
47
|
+
|
48
|
+
# Check if there is something to do
|
49
|
+
if option_count >= old_unused_versions.size
|
50
|
+
output.print_error _("No versions to delete.")
|
51
|
+
HammerCLI::EX_NOT_FOUND
|
52
|
+
else
|
53
|
+
versions_to_purge = old_unused_versions.slice(0, old_unused_versions.size - option_count)
|
54
|
+
|
55
|
+
versions_to_purge.each do |v|
|
56
|
+
purge_version(v)
|
57
|
+
end
|
58
|
+
HammerCLI::EX_OK
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
private def purge_version(v)
|
63
|
+
if option_async?
|
64
|
+
task = resource_content_view_versions.call(:destroy, 'id' => v["id"])
|
65
|
+
print_message _("Version '%{version}' of content view '%{view}' scheduled "\
|
66
|
+
"for deletion in task '%{task_id}'.") %
|
67
|
+
{version: v["version"], view: content_view["name"], task_id: task['id']}
|
68
|
+
else
|
69
|
+
task_progress(resource_content_view_versions.call(:destroy, 'id' => v["id"]))
|
70
|
+
print_message _("Version '%{version}' of content view '%{view}' deleted.") %
|
71
|
+
{version: v["version"], view: content_view["name"]}
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
private def content_view
|
76
|
+
@content_view ||= resource_content_views.call(:show, 'id' => options['option_id'])
|
77
|
+
end
|
78
|
+
|
79
|
+
private def old_unused_versions
|
80
|
+
return @old_unused_versions if @old_unused_versions
|
81
|
+
|
82
|
+
all_versions = content_view['versions'].sort_by do |version|
|
83
|
+
[version[:major], version[:minor]]
|
84
|
+
end
|
85
|
+
|
86
|
+
# Keep only versions which are not used
|
87
|
+
@old_unused_versions = all_versions.select do |v|
|
88
|
+
v["environment_ids"].empty?
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -62,6 +62,19 @@ module HammerCLIKatello
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
+
class RepublishRepositoriesCommand < HammerCLIKatello::SingleResourceCommand
|
66
|
+
include HammerCLIForemanTasks::Async
|
67
|
+
|
68
|
+
action :republish_repositories
|
69
|
+
command_name "republish-repositories"
|
70
|
+
|
71
|
+
success_message _("Content View Version is being republished with task %{id}")
|
72
|
+
failure_message _("Could not republish the Content View")
|
73
|
+
build_options do |o|
|
74
|
+
o.expand(:all).including(:content_views, :organizations)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
65
78
|
class PromoteCommand < HammerCLIKatello::SingleResourceCommand
|
66
79
|
include HammerCLIForemanTasks::Async
|
67
80
|
|