hammer_cli_foreman 2.4.0 → 3.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.
- checksums.yaml +4 -4
- data/doc/release_notes.md +40 -0
- data/lib/hammer_cli_foreman/architecture.rb +5 -5
- data/lib/hammer_cli_foreman/associating_commands.rb +0 -24
- data/lib/hammer_cli_foreman/bookmark.rb +5 -5
- data/lib/hammer_cli_foreman/combination.rb +3 -13
- data/lib/hammer_cli_foreman/command_extensions/ping.rb +21 -2
- data/lib/hammer_cli_foreman/command_extensions/subnet.rb +25 -10
- data/lib/hammer_cli_foreman/command_extensions/update_common.rb +14 -0
- data/lib/hammer_cli_foreman/command_extensions/user.rb +9 -5
- data/lib/hammer_cli_foreman/command_extensions.rb +1 -2
- data/lib/hammer_cli_foreman/commands.rb +17 -11
- data/lib/hammer_cli_foreman/compute_attribute.rb +1 -1
- data/lib/hammer_cli_foreman/compute_profile.rb +5 -5
- data/lib/hammer_cli_foreman/compute_resource/ovirt.rb +2 -1
- data/lib/hammer_cli_foreman/compute_resource.rb +23 -0
- data/lib/hammer_cli_foreman/config_report.rb +2 -0
- data/lib/hammer_cli_foreman/filter.rb +2 -2
- data/lib/hammer_cli_foreman/host.rb +1 -47
- data/lib/hammer_cli_foreman/hostgroup.rb +14 -58
- data/lib/hammer_cli_foreman/hosts/common_update_options.rb +10 -31
- data/lib/hammer_cli_foreman/id_resolver.rb +7 -68
- data/lib/hammer_cli_foreman/location.rb +0 -6
- data/lib/hammer_cli_foreman/mail_notification.rb +2 -2
- data/lib/hammer_cli_foreman/model.rb +5 -5
- data/lib/hammer_cli_foreman/operating_system.rb +10 -10
- data/lib/hammer_cli_foreman/option_builders.rb +84 -52
- data/lib/hammer_cli_foreman/option_sources/id_params.rb +41 -11
- data/lib/hammer_cli_foreman/option_sources/ids_params.rb +39 -7
- data/lib/hammer_cli_foreman/option_sources.rb +0 -1
- data/lib/hammer_cli_foreman/organization.rb +0 -6
- data/lib/hammer_cli_foreman/ping.rb +6 -1
- data/lib/hammer_cli_foreman/references.rb +0 -16
- data/lib/hammer_cli_foreman/registration.rb +18 -0
- data/lib/hammer_cli_foreman/settings.rb +3 -3
- data/lib/hammer_cli_foreman/smart_proxy.rb +7 -57
- data/lib/hammer_cli_foreman/template.rb +3 -15
- data/lib/hammer_cli_foreman/user.rb +4 -4
- data/lib/hammer_cli_foreman/usergroup.rb +5 -5
- data/lib/hammer_cli_foreman/version.rb +1 -1
- data/lib/hammer_cli_foreman.rb +3 -21
- data/lib/minitest/coverage_reporter.rb +1 -1
- data/locale/ca/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/de/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/en/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/en_GB/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/es/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/fr/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/it/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/ja/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/ko/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/pt_BR/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/ru/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/zh_CN/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/zh_TW/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/test/data/2.4/foreman_api.json +1 -0
- data/test/data/2.5/foreman_api.json +1 -0
- data/test/data/3.1/foreman_api.json +1 -0
- data/test/functional/architecture_test.rb +37 -5
- data/test/functional/bookmark_test.rb +5 -2
- data/test/functional/compute_attribute_test.rb +20 -20
- data/test/functional/compute_profile_test.rb +14 -1
- data/test/functional/compute_resource_test.rb +37 -0
- data/test/functional/filter_test.rb +2 -1
- data/test/functional/host_test.rb +65 -11
- data/test/functional/hostgroup/create_test.rb +11 -117
- data/test/functional/hostgroup/update_test.rb +11 -79
- data/test/functional/http_proxy_test.rb +12 -0
- data/test/functional/location_test.rb +13 -3
- data/test/functional/mail_notification_test.rb +3 -1
- data/test/functional/media_test.rb +11 -0
- data/test/functional/model_test.rb +3 -1
- data/test/functional/operating_system_test.rb +3 -1
- data/test/functional/personal_access_token_test.rb +4 -4
- data/test/functional/ping_test.rb +33 -0
- data/test/functional/realm_test.rb +11 -0
- data/test/functional/registration_test.rb +8 -0
- data/test/functional/report_template_test.rb +11 -0
- data/test/functional/settings_test.rb +4 -4
- data/test/functional/template_test.rb +87 -48
- data/test/functional/user_mail_notification_test.rb +3 -3
- data/test/functional/user_test.rb +11 -0
- data/test/functional/usergroup_test.rb +3 -1
- data/test/test_helper.rb +1 -1
- data/test/unit/apipie_resource_mock.rb +1 -39
- data/test/unit/architecture_test.rb +10 -10
- data/test/unit/bookmark_test.rb +10 -14
- data/test/unit/commands_test.rb +1 -2
- data/test/unit/compute_profile_test.rb +10 -10
- data/test/unit/config_report_test.rb +1 -0
- data/test/unit/helpers/command.rb +0 -8
- data/test/unit/host_test.rb +14 -61
- data/test/unit/hostgroup_test.rb +7 -26
- data/test/unit/id_resolver_test.rb +0 -28
- data/test/unit/mail_notification_test.rb +4 -4
- data/test/unit/model_test.rb +47 -47
- data/test/unit/operating_system_test.rb +10 -16
- data/test/unit/option_builders_test.rb +88 -83
- data/test/unit/settings_test.rb +4 -4
- data/test/unit/smart_proxy_test.rb +0 -12
- data/test/unit/usergroup_test.rb +10 -10
- metadata +115 -128
- data/lib/hammer_cli_foreman/command_extensions/puppet_environment.rb +0 -29
- data/lib/hammer_cli_foreman/command_extensions/puppet_environments.rb +0 -29
- data/lib/hammer_cli_foreman/config_group.rb +0 -45
- data/lib/hammer_cli_foreman/option_sources/puppet_environment_params.rb +0 -59
- data/lib/hammer_cli_foreman/puppet_class.rb +0 -61
- data/lib/hammer_cli_foreman/puppet_environment.rb +0 -65
- data/lib/hammer_cli_foreman/smart_class_parameter.rb +0 -189
- data/test/functional/config_group_test.rb +0 -50
- data/test/functional/proxy_test.rb +0 -86
- data/test/functional/smart_class_parameter_test.rb +0 -97
- data/test/reports/TEST-Minitest-Result.xml +0 -4344
- data/test/unit/config_group_test.rb +0 -82
- data/test/unit/puppet_class_test.rb +0 -72
- data/test/unit/puppet_environment_test.rb +0 -114
- data/test/unit/smart_class_parameter_test.rb +0 -113
|
@@ -170,15 +170,33 @@ module HammerCLIForeman
|
|
|
170
170
|
attr_reader :resource
|
|
171
171
|
|
|
172
172
|
def build(builder_params={})
|
|
173
|
+
resource_name_map = builder_params[:resource_mapping] || {}
|
|
173
174
|
@searchables.for(@resource).collect do |s|
|
|
174
175
|
option(
|
|
175
176
|
optionamize("--#{s.name}"),
|
|
176
177
|
s.name.upcase,
|
|
177
178
|
s.description,
|
|
178
|
-
:
|
|
179
|
+
referenced_resource: @resource.singular_name,
|
|
180
|
+
aliased_resource: aliased_name(resource_name(s.name), resource_name_map)
|
|
179
181
|
)
|
|
180
182
|
end
|
|
181
183
|
end
|
|
184
|
+
|
|
185
|
+
def aliased_name(name, resource_name_map)
|
|
186
|
+
return if name.nil?
|
|
187
|
+
|
|
188
|
+
resource_name_map[name.to_s] || resource_name_map[name.to_sym] || name
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def resource_name(param)
|
|
192
|
+
if param =~ /^id[s]?$/
|
|
193
|
+
@resource.singular_name
|
|
194
|
+
elsif param =~ /_id[s]?$/
|
|
195
|
+
param.gsub(/_id[s]?$/, '')
|
|
196
|
+
else
|
|
197
|
+
nil
|
|
198
|
+
end
|
|
199
|
+
end
|
|
182
200
|
end
|
|
183
201
|
|
|
184
202
|
|
|
@@ -194,23 +212,43 @@ module HammerCLIForeman
|
|
|
194
212
|
|
|
195
213
|
def build(builder_params={})
|
|
196
214
|
resource_name_map = builder_params[:resource_mapping] || {}
|
|
197
|
-
|
|
215
|
+
command = builder_params[:command]
|
|
216
|
+
dependent_options(@resource, resource_name_map, command)
|
|
198
217
|
end
|
|
199
218
|
|
|
200
219
|
protected
|
|
201
220
|
|
|
202
|
-
def dependent_options(resource, resource_name_map)
|
|
221
|
+
def dependent_options(resource, resource_name_map, command)
|
|
203
222
|
options = []
|
|
204
223
|
searchables = @searchables.for(resource)
|
|
205
224
|
resource_name = resource.singular_name
|
|
206
225
|
aliased_name = aliased(resource_name, resource_name_map)
|
|
207
226
|
types = searchables.map(&:name).push('id').map(&:capitalize).join('/')
|
|
208
|
-
associated_resource =
|
|
209
|
-
family =
|
|
210
|
-
referenced_resource
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
227
|
+
associated_resource = aliased_name.to_s.tr('_', ' ')
|
|
228
|
+
family = command.option_families.find do |f|
|
|
229
|
+
f.head.referenced_resource == resource_name
|
|
230
|
+
end
|
|
231
|
+
unless family
|
|
232
|
+
# If there is no family it probably means that we explicitly want to
|
|
233
|
+
# expand options via
|
|
234
|
+
# build_options do |o|
|
|
235
|
+
# o.expand.including(:resource)
|
|
236
|
+
# end
|
|
237
|
+
# instead of generating it from API docs (it may not be even present there)
|
|
238
|
+
family = HammerCLI::Options::OptionFamily.new(
|
|
239
|
+
description: _('%{types} of associated %{resource}') % { types: types, resource: associated_resource },
|
|
240
|
+
creator: command
|
|
241
|
+
)
|
|
242
|
+
options << family.parent(
|
|
243
|
+
optionamize("--#{aliased_name}-id"),
|
|
244
|
+
"#{aliased_name}_id".upcase,
|
|
245
|
+
description("#{aliased_name}_id", @context[:action]),
|
|
246
|
+
attribute_name: HammerCLI.option_accessor_name("#{resource_name}_id"),
|
|
247
|
+
referenced_resource: resource_name,
|
|
248
|
+
aliased_resource: aliased_name,
|
|
249
|
+
format: HammerCLI::Options::Normalizers::Number.new
|
|
250
|
+
)
|
|
251
|
+
end
|
|
214
252
|
|
|
215
253
|
unless searchables.empty?
|
|
216
254
|
first = searchables[0]
|
|
@@ -221,31 +259,25 @@ module HammerCLIForeman
|
|
|
221
259
|
options << family.child(
|
|
222
260
|
optionamize("--#{aliased_name}"),
|
|
223
261
|
"#{aliased_name}_#{first.name}".upcase,
|
|
224
|
-
first.description ||
|
|
225
|
-
attribute_name: HammerCLI.option_accessor_name("#{resource_name}_#{first.name}")
|
|
262
|
+
first.description || ' ',
|
|
263
|
+
attribute_name: HammerCLI.option_accessor_name("#{resource_name}_#{first.name}"),
|
|
264
|
+
referenced_resource: resource_name,
|
|
265
|
+
aliased_resource: aliased_name
|
|
226
266
|
)
|
|
227
267
|
# Other options are named by the resource plus the searchable name
|
|
228
268
|
# Eg. --organization-label with accessor option_organization_label
|
|
229
269
|
remaining.each do |s|
|
|
230
|
-
options << family.
|
|
270
|
+
options << family.child(
|
|
231
271
|
optionamize("--#{aliased_name}-#{s.name}"),
|
|
232
272
|
"#{aliased_name}_#{s.name}".upcase,
|
|
233
|
-
s.description ||
|
|
273
|
+
s.description || ' ',
|
|
234
274
|
attribute_name: HammerCLI.option_accessor_name("#{resource_name}_#{s.name}"),
|
|
235
|
-
|
|
275
|
+
referenced_resource: resource_name,
|
|
276
|
+
aliased_resource: aliased_name
|
|
236
277
|
)
|
|
237
278
|
end
|
|
238
279
|
end
|
|
239
280
|
|
|
240
|
-
unless options.any? { |o| o.handles?("--#{aliased_name}-id") }
|
|
241
|
-
options << family.parent(
|
|
242
|
-
optionamize("--#{aliased_name}-id"),
|
|
243
|
-
"#{aliased_name}_id".upcase,
|
|
244
|
-
description("#{aliased_name}_id", @context[:action]),
|
|
245
|
-
attribute_name: HammerCLI.option_accessor_name("#{resource_name}_id"),
|
|
246
|
-
format: HammerCLI::Options::Normalizers::Number.new
|
|
247
|
-
)
|
|
248
|
-
end
|
|
249
281
|
options
|
|
250
282
|
end
|
|
251
283
|
|
|
@@ -266,15 +298,25 @@ module HammerCLIForeman
|
|
|
266
298
|
class UpdateDependentSearchablesOptionBuilder < DependentSearchablesOptionBuilder
|
|
267
299
|
protected
|
|
268
300
|
|
|
269
|
-
def dependent_options(resource, resource_name_map)
|
|
301
|
+
def dependent_options(resource, resource_name_map, command)
|
|
270
302
|
options = []
|
|
271
303
|
searchables = @searchables.for(resource)
|
|
272
304
|
resource_name = resource.singular_name
|
|
273
305
|
aliased_name = aliased(resource_name, resource_name_map)
|
|
306
|
+
# Those options are not coming from API docs, thus create a new family only
|
|
274
307
|
family = HammerCLI::Options::OptionFamily.new(
|
|
275
308
|
prefix: 'new-',
|
|
276
309
|
aliased_resource: aliased_name,
|
|
277
|
-
referenced_resource: resource_name
|
|
310
|
+
referenced_resource: resource_name,
|
|
311
|
+
creator: command
|
|
312
|
+
)
|
|
313
|
+
|
|
314
|
+
options << family.parent(
|
|
315
|
+
optionamize("--new-#{aliased_name}-id"),
|
|
316
|
+
"new_#{aliased_name}_id".upcase,
|
|
317
|
+
_('Use to update associated %s') % aliased_name,
|
|
318
|
+
attribute_name: HammerCLI.option_accessor_name("new_#{resource_name}_id"),
|
|
319
|
+
format: HammerCLI::Options::Normalizers::Number.new
|
|
278
320
|
)
|
|
279
321
|
unless searchables.empty?
|
|
280
322
|
first = searchables[0]
|
|
@@ -285,73 +327,63 @@ module HammerCLIForeman
|
|
|
285
327
|
options << family.child(
|
|
286
328
|
optionamize("--new-#{aliased_name}"),
|
|
287
329
|
"new_#{aliased_name}_#{first.name}".upcase,
|
|
288
|
-
_('Use to update'),
|
|
330
|
+
_('Use to update associated %s') % aliased_name,
|
|
289
331
|
attribute_name: HammerCLI.option_accessor_name("new_#{resource_name}_#{first.name}")
|
|
290
332
|
)
|
|
291
333
|
# Other options are named by the resource plus the searchable name
|
|
292
334
|
# Eg. --new-organization-label with accessor option_new_organization_label
|
|
293
335
|
remaining.each do |s|
|
|
294
|
-
options << family.
|
|
336
|
+
options << family.child(
|
|
295
337
|
optionamize("--new-#{aliased_name}-#{s.name}"),
|
|
296
338
|
"new_#{aliased_name}_#{s.name}".upcase,
|
|
297
|
-
_('Use to update'),
|
|
339
|
+
_('Use to update associated %s') % aliased_name,
|
|
298
340
|
attribute_name: HammerCLI.option_accessor_name("new_#{resource_name}_#{s.name}")
|
|
299
341
|
)
|
|
300
342
|
end
|
|
301
343
|
end
|
|
302
344
|
|
|
303
|
-
unless options.any? { |o| o.handles?("--new-#{aliased_name}-id") }
|
|
304
|
-
options << family.parent(
|
|
305
|
-
optionamize("--new-#{aliased_name}-id"),
|
|
306
|
-
"new_#{aliased_name}_id".upcase,
|
|
307
|
-
_('Use to update'),
|
|
308
|
-
attribute_name: HammerCLI.option_accessor_name("new_#{resource_name}_id"),
|
|
309
|
-
format: HammerCLI::Options::Normalizers::Number.new
|
|
310
|
-
)
|
|
311
|
-
end
|
|
312
345
|
options
|
|
313
346
|
end
|
|
314
347
|
end
|
|
315
348
|
|
|
316
349
|
class DependentSearchablesArrayOptionBuilder < DependentSearchablesOptionBuilder
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
def dependent_options(resource, resource_name_map)
|
|
350
|
+
def dependent_options(resource, resource_name_map, command)
|
|
320
351
|
options = []
|
|
321
352
|
searchables = @searchables.for(resource)
|
|
322
353
|
resource_name = resource.singular_name
|
|
323
354
|
|
|
324
355
|
aliased_name = aliased(resource_name, resource_name_map)
|
|
325
356
|
aliased_plural_name = aliased(resource.name, resource_name_map)
|
|
326
|
-
|
|
327
357
|
unless searchables.empty?
|
|
328
358
|
first = searchables[0]
|
|
329
359
|
remaining = searchables[1..-1] || []
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
referenced_resource: resource_name,
|
|
335
|
-
aliased_resource: aliased_name,
|
|
336
|
-
description: _('%{types} of associated %{resource}') % { types: types, resource: associated_resource }
|
|
337
|
-
)
|
|
360
|
+
# Find family created by HammerCLI::Apipie::OptionBuilder for *_ids options
|
|
361
|
+
family = command.option_families.find do |f|
|
|
362
|
+
f.head.referenced_resource == resource_name && f.formats.include?(HammerCLI::Options::Normalizers::List)
|
|
363
|
+
end
|
|
338
364
|
# First option is named by the resource
|
|
339
365
|
# Eg. --organizations with accessor option_organization_names
|
|
340
366
|
options << family.child(
|
|
341
367
|
optionamize("--#{aliased_plural_name}"),
|
|
342
368
|
"#{aliased_name}_#{first.plural_name}".upcase,
|
|
343
369
|
' ',
|
|
344
|
-
attribute_name: HammerCLI.option_accessor_name("#{resource_name}_#{first.plural_name}")
|
|
370
|
+
attribute_name: HammerCLI.option_accessor_name("#{resource_name}_#{first.plural_name}"),
|
|
371
|
+
format: HammerCLI::Options::Normalizers::List.new,
|
|
372
|
+
referenced_resource: resource_name,
|
|
373
|
+
aliased_resource: aliased_name
|
|
345
374
|
)
|
|
346
375
|
|
|
347
376
|
# Other options are named by the resource plus the searchable name
|
|
348
377
|
# Eg. --organization-labels with accessor option_organization_labels
|
|
349
378
|
remaining.each do |s|
|
|
350
|
-
options << family.
|
|
379
|
+
options << family.child(
|
|
351
380
|
optionamize("--#{aliased_name}-#{s.plural_name}"),
|
|
352
381
|
"#{aliased_name}_#{s.plural_name}".upcase,
|
|
353
382
|
' ',
|
|
354
|
-
attribute_name: HammerCLI.option_accessor_name("#{resource_name}_#{s.plural_name}")
|
|
383
|
+
attribute_name: HammerCLI.option_accessor_name("#{resource_name}_#{s.plural_name}"),
|
|
384
|
+
format: HammerCLI::Options::Normalizers::List.new,
|
|
385
|
+
referenced_resource: resource_name,
|
|
386
|
+
aliased_resource: aliased_name
|
|
355
387
|
)
|
|
356
388
|
end
|
|
357
389
|
end
|
|
@@ -6,29 +6,53 @@ module HammerCLIForeman
|
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
def param_updatable?(param_resource)
|
|
9
|
-
param_resource && @command.respond_to?(
|
|
9
|
+
param_resource && @command.respond_to?(cli_option_resource_id(param_resource))
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def available_id_params
|
|
13
13
|
IdParamsFilter.new(:only_required => false).for_action(@command.resource.action(@command.action))
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
def
|
|
16
|
+
def needs_resolving?(param_option, param_resource, all_opts)
|
|
17
|
+
return false unless param_updatable?(param_resource)
|
|
18
|
+
|
|
19
|
+
cli_searchables_set = @command.searchables.for(param_resource).any? do |s|
|
|
20
|
+
option = HammerCLI.option_accessor_name("#{param_resource.singular_name}_#{s.name}")
|
|
21
|
+
next false unless @command.respond_to?(option)
|
|
22
|
+
|
|
23
|
+
!@command.send(option).nil?
|
|
24
|
+
end
|
|
25
|
+
if cli_searchables_set
|
|
26
|
+
# Remove set '<resource_name>_id' option to force resolving in case of
|
|
27
|
+
# '<resource_name>_[name|title]' was set from CLI
|
|
28
|
+
all_opts.delete(param_option)
|
|
29
|
+
true
|
|
30
|
+
else
|
|
31
|
+
# Don't resolve if resource id was set via CLI
|
|
32
|
+
return false if @command.send(cli_option_resource_id(param_resource))
|
|
33
|
+
|
|
34
|
+
all_opts[param_option].nil?
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def get_options(_defined_options, result)
|
|
17
39
|
# resolve all '<resource_name>_id' parameters if they are defined as options
|
|
18
40
|
# (they can be skipped using .without or .expand.except)
|
|
19
41
|
return result if @command.action.nil?
|
|
42
|
+
|
|
20
43
|
available_id_params.each do |api_param|
|
|
21
44
|
param_resource = HammerCLIForeman.param_to_resource(api_param.name)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
45
|
+
param_option = HammerCLI.option_accessor_name(api_param.name)
|
|
46
|
+
next unless needs_resolving?(param_option, param_resource, result)
|
|
47
|
+
|
|
48
|
+
resource_id = @command.get_resource_id(
|
|
49
|
+
param_resource, scoped: true, required: api_param.required?, all_options: result
|
|
50
|
+
)
|
|
51
|
+
result[param_option] = resource_id if resource_id
|
|
26
52
|
end
|
|
27
53
|
result
|
|
28
|
-
|
|
29
54
|
rescue HammerCLIForeman::MissingSearchOptions => e
|
|
30
|
-
|
|
31
|
-
switches = @command.class.find_options(:referenced_resource => e.resource.singular_name).map(&:long_switch)
|
|
55
|
+
switches = @command.class.find_options(referenced_resource: e.resource.singular_name).map(&:long_switch)
|
|
32
56
|
|
|
33
57
|
if switches.empty?
|
|
34
58
|
error_message = _("Could not find %{resource}. Some search options were missing, please see --help.")
|
|
@@ -40,12 +64,18 @@ module HammerCLIForeman
|
|
|
40
64
|
|
|
41
65
|
raise MissingSearchOptions.new(
|
|
42
66
|
error_message % {
|
|
43
|
-
:
|
|
44
|
-
:
|
|
67
|
+
resource: e.resource.singular_name,
|
|
68
|
+
switches: switches.join(', ')
|
|
45
69
|
},
|
|
46
70
|
e.resource
|
|
47
71
|
)
|
|
48
72
|
end
|
|
73
|
+
|
|
74
|
+
private
|
|
75
|
+
|
|
76
|
+
def cli_option_resource_id(resource)
|
|
77
|
+
HammerCLI.option_accessor_name("#{resource.singular_name}_id")
|
|
78
|
+
end
|
|
49
79
|
end
|
|
50
80
|
end
|
|
51
81
|
end
|
|
@@ -6,25 +6,57 @@ module HammerCLIForeman
|
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
def param_updatable?(param_resource)
|
|
9
|
-
param_resource && @command.respond_to?(
|
|
9
|
+
param_resource && @command.respond_to?(cli_option_resource_ids(param_resource))
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def available_ids_params
|
|
13
13
|
IdArrayParamsFilter.new(:only_required => false).for_action(@command.resource.action(@command.action))
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
def
|
|
17
|
-
return
|
|
16
|
+
def needs_resolving?(param_option, param_resource, all_opts)
|
|
17
|
+
return false unless param_updatable?(param_resource)
|
|
18
|
+
|
|
19
|
+
cli_searchables_set = @command.searchables.for(param_resource).any? do |s|
|
|
20
|
+
option = HammerCLI.option_accessor_name("#{param_resource.singular_name}_#{s.plural_name}")
|
|
21
|
+
next false unless @command.respond_to?(option)
|
|
22
|
+
|
|
23
|
+
!@command.send(option).nil?
|
|
24
|
+
end
|
|
25
|
+
if cli_searchables_set
|
|
26
|
+
# Remove set '<resource_name>_ids' option to force resolving in case of
|
|
27
|
+
# '<resource_name>_[names|titles]' were set from CLI
|
|
28
|
+
all_opts.delete(param_option)
|
|
29
|
+
true
|
|
30
|
+
else
|
|
31
|
+
# Don't resolve if resource ids were set via CLI
|
|
32
|
+
return false if @command.send(cli_option_resource_ids(param_resource))
|
|
33
|
+
|
|
34
|
+
all_opts[param_option].nil?
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def get_options(_defined_options, result)
|
|
18
39
|
# resolve all '<resource_name>_ids' parameters if they are defined as options
|
|
40
|
+
return result if @command.action.nil?
|
|
41
|
+
|
|
19
42
|
available_ids_params.each do |api_param|
|
|
20
43
|
param_resource = HammerCLIForeman.param_to_resource(api_param.name)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
44
|
+
param_option = HammerCLI.option_accessor_name(api_param.name)
|
|
45
|
+
next unless needs_resolving?(param_option, param_resource, result)
|
|
46
|
+
|
|
47
|
+
resource_ids = @command.get_resource_ids(
|
|
48
|
+
param_resource, scoped: true, required: api_param.required?, all_options: result
|
|
49
|
+
)
|
|
50
|
+
result[param_option] = resource_ids if resource_ids
|
|
25
51
|
end
|
|
26
52
|
result
|
|
27
53
|
end
|
|
54
|
+
|
|
55
|
+
private
|
|
56
|
+
|
|
57
|
+
def cli_option_resource_ids(resource)
|
|
58
|
+
HammerCLI.option_accessor_name("#{resource.singular_name}_ids")
|
|
59
|
+
end
|
|
28
60
|
end
|
|
29
61
|
end
|
|
30
62
|
end
|
|
@@ -3,6 +3,5 @@ require 'hammer_cli_foreman/option_sources/ids_params'
|
|
|
3
3
|
require 'hammer_cli_foreman/option_sources/self_param'
|
|
4
4
|
require 'hammer_cli_foreman/option_sources/user_params'
|
|
5
5
|
require 'hammer_cli_foreman/option_sources/fields_params'
|
|
6
|
-
require 'hammer_cli_foreman/option_sources/puppet_environment_params'
|
|
7
6
|
require 'hammer_cli_foreman/option_sources/new_params'
|
|
8
7
|
require 'hammer_cli_foreman/option_sources/referenced_resource_id_params'
|
|
@@ -36,7 +36,6 @@ module HammerCLIForeman
|
|
|
36
36
|
HammerCLIForeman::References.partition_tables(self)
|
|
37
37
|
HammerCLIForeman::References.domains(self)
|
|
38
38
|
HammerCLIForeman::References.realms(self)
|
|
39
|
-
HammerCLIForeman::References.environments(self)
|
|
40
39
|
HammerCLIForeman::References.hostgroups(self)
|
|
41
40
|
HammerCLIForeman::References.parameters(self)
|
|
42
41
|
collection :locations, _("Locations"), :numbered => false, :hide_blank => true do
|
|
@@ -59,8 +58,6 @@ module HammerCLIForeman
|
|
|
59
58
|
failure_message _("Could not create the organization")
|
|
60
59
|
|
|
61
60
|
build_options
|
|
62
|
-
|
|
63
|
-
extend_with(HammerCLIForeman::CommandExtensions::PuppetEnvironments.new)
|
|
64
61
|
end
|
|
65
62
|
|
|
66
63
|
|
|
@@ -73,8 +70,6 @@ module HammerCLIForeman
|
|
|
73
70
|
failure_message _("Could not update the organization")
|
|
74
71
|
|
|
75
72
|
build_options
|
|
76
|
-
|
|
77
|
-
extend_with(HammerCLIForeman::CommandExtensions::PuppetEnvironments.new)
|
|
78
73
|
end
|
|
79
74
|
|
|
80
75
|
|
|
@@ -114,7 +109,6 @@ module HammerCLIForeman
|
|
|
114
109
|
|
|
115
110
|
|
|
116
111
|
HammerCLIForeman::AssociatingCommands::Hostgroup.extend_command(self)
|
|
117
|
-
HammerCLIForeman::AssociatingCommands::PuppetEnvironment.extend_command(self)
|
|
118
112
|
HammerCLIForeman::AssociatingCommands::Domain.extend_command(self)
|
|
119
113
|
HammerCLIForeman::AssociatingCommands::Medium.extend_command(self)
|
|
120
114
|
HammerCLIForeman::AssociatingCommands::Subnet.extend_command(self)
|
|
@@ -19,7 +19,12 @@ module HammerCLIForeman
|
|
|
19
19
|
response = send_request
|
|
20
20
|
print_data(response)
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
if HammerCLIForeman::CommandExtensions::Ping.failed?(response)
|
|
23
|
+
HammerCLIForeman::CommandExtensions::Ping.check_for_unrecognized(
|
|
24
|
+
response, output_definition
|
|
25
|
+
)
|
|
26
|
+
return 1
|
|
27
|
+
end
|
|
23
28
|
|
|
24
29
|
HammerCLI::EX_OK
|
|
25
30
|
end
|
|
@@ -112,14 +112,6 @@ module HammerCLIForeman
|
|
|
112
112
|
end
|
|
113
113
|
end
|
|
114
114
|
|
|
115
|
-
def self.environments(dsl)
|
|
116
|
-
dsl.build do
|
|
117
|
-
collection :environments, _("Environments"), :numbered => false do
|
|
118
|
-
custom_field Fields::Reference
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
|
|
123
115
|
def self.hostgroups(dsl)
|
|
124
116
|
dsl.build do
|
|
125
117
|
collection :hostgroups, _("Hostgroups"), :numbered => false do
|
|
@@ -153,14 +145,6 @@ module HammerCLIForeman
|
|
|
153
145
|
end
|
|
154
146
|
end
|
|
155
147
|
|
|
156
|
-
def self.puppetclasses(dsl)
|
|
157
|
-
dsl.build do
|
|
158
|
-
collection :puppetclasses, _("Puppetclasses"), :numbered => false do
|
|
159
|
-
custom_field Fields::Reference
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
|
|
164
148
|
def self.operating_systems(dsl)
|
|
165
149
|
dsl.build do
|
|
166
150
|
collection :operatingsystems, _("Operating systems"), :numbered => false do
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module HammerCLIForeman
|
|
2
|
+
class Registration < HammerCLIForeman::Command
|
|
3
|
+
resource :registration_commands
|
|
4
|
+
|
|
5
|
+
class GenerateCommand < HammerCLIForeman::CreateCommand
|
|
6
|
+
command_name 'generate-command'
|
|
7
|
+
failure_message _("Failed to generate registration command")
|
|
8
|
+
|
|
9
|
+
def print_data(registration_command)
|
|
10
|
+
puts registration_command
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
build_options
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
autoload_subcommands
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -20,7 +20,7 @@ module HammerCLIForeman
|
|
|
20
20
|
data
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
build_options
|
|
23
|
+
build_options
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
class UpdateCommand < HammerCLIForeman::UpdateCommand
|
|
@@ -29,7 +29,7 @@ module HammerCLIForeman
|
|
|
29
29
|
success_message _("Setting [%{name}] updated to [%{value}].")
|
|
30
30
|
failure_message _("Could not update the setting")
|
|
31
31
|
|
|
32
|
-
build_options
|
|
32
|
+
build_options
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
class InfoCommand < HammerCLIForeman::InfoCommand
|
|
@@ -42,7 +42,7 @@ module HammerCLIForeman
|
|
|
42
42
|
field :value, _("Value")
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
build_options
|
|
45
|
+
build_options
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
|
|
@@ -10,8 +10,9 @@ module HammerCLIForeman
|
|
|
10
10
|
output do
|
|
11
11
|
field :id, _("Id")
|
|
12
12
|
field :name, _("Name")
|
|
13
|
+
field :status, _("Status")
|
|
13
14
|
field :url, _("URL")
|
|
14
|
-
field :_features, _( "Features"), Fields::List, :
|
|
15
|
+
field :_features, _( "Features"), Fields::List, :hide_blank => true
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
def extend_data(proxy)
|
|
@@ -22,12 +23,13 @@ module HammerCLIForeman
|
|
|
22
23
|
build_options
|
|
23
24
|
end
|
|
24
25
|
|
|
25
|
-
|
|
26
26
|
class InfoCommand < HammerCLIForeman::InfoCommand
|
|
27
|
-
|
|
28
27
|
output ListCommand.output_definition do
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
field :version, _("Version")
|
|
29
|
+
field :hosts_count, _("Host_count")
|
|
30
|
+
collection :features, _("Features") do
|
|
31
|
+
field :name, _('Name')
|
|
32
|
+
field :version, _('Version')
|
|
31
33
|
end
|
|
32
34
|
HammerCLIForeman::References.taxonomies(self)
|
|
33
35
|
HammerCLIForeman::References.timestamps(self)
|
|
@@ -60,58 +62,6 @@ module HammerCLIForeman
|
|
|
60
62
|
build_options
|
|
61
63
|
end
|
|
62
64
|
|
|
63
|
-
|
|
64
|
-
class ImportPuppetClassesCommand < HammerCLIForeman::Command
|
|
65
|
-
action :import_puppetclasses
|
|
66
|
-
|
|
67
|
-
command_name "import-classes"
|
|
68
|
-
|
|
69
|
-
option "--dryrun", :flag, _("Do not run the import")
|
|
70
|
-
|
|
71
|
-
output do
|
|
72
|
-
field :message, _("Result"), Fields::LongText
|
|
73
|
-
collection :results, _("Changed environments"), :hide_blank => true do
|
|
74
|
-
field :name, nil
|
|
75
|
-
collection :new_puppetclasses, _("New classes"), :hide_blank => true, :numbered => false do
|
|
76
|
-
field nil, nil
|
|
77
|
-
end
|
|
78
|
-
collection :updated_puppetclasses, _("Updated classes"), :hide_blank => true, :numbered => false do
|
|
79
|
-
field nil, nil
|
|
80
|
-
end
|
|
81
|
-
collection :obsolete_puppetclasses, _("Removed classes"), :hide_blank => true, :numbered => false do
|
|
82
|
-
field nil, nil
|
|
83
|
-
end
|
|
84
|
-
collection :ignored_puppetclasses, _("Ignored classes"), :hide_blank => true, :numbered => false do
|
|
85
|
-
field nil, nil
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
build_options do |o|
|
|
91
|
-
o.without(:smart_proxy_id, :dryrun)
|
|
92
|
-
o.expand.except(:smart_proxies)
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def request_params
|
|
96
|
-
opts = super
|
|
97
|
-
opts['dryrun'] = option_dryrun? || false
|
|
98
|
-
opts
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def transform_format(data)
|
|
102
|
-
# Overriding the default behavior that tries to remove nesting
|
|
103
|
-
# when there's only {"message": "..."}
|
|
104
|
-
data
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def print_data(record)
|
|
108
|
-
print_record(output_definition, record)
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
extend_with(HammerCLIForeman::CommandExtensions::PuppetEnvironment.new)
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
|
|
115
65
|
class RefreshFeaturesCommand < HammerCLIForeman::Command
|
|
116
66
|
|
|
117
67
|
action :refresh
|
|
@@ -5,25 +5,13 @@ module HammerCLIForeman
|
|
|
5
5
|
resource :provisioning_templates
|
|
6
6
|
|
|
7
7
|
module TemplateCreateUpdateCommons
|
|
8
|
-
|
|
9
8
|
def option_snippet
|
|
10
9
|
option_type && (option_type == "snippet")
|
|
11
10
|
end
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
signal_usage_error _("unknown template kind")
|
|
17
|
-
else
|
|
18
|
-
table[option_type]
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def kinds
|
|
23
|
-
HammerCLIForeman.collection_to_common_format(
|
|
24
|
-
HammerCLIForeman.foreman_resource!(:template_kinds).call(:index))
|
|
25
|
-
end
|
|
26
|
-
|
|
12
|
+
# This method is for IdParams option source to make resolver work for
|
|
13
|
+
# --type option
|
|
14
|
+
def option_template_kind_id; end
|
|
27
15
|
end
|
|
28
16
|
|
|
29
17
|
class ListCommand < HammerCLIForeman::ListCommand
|
|
@@ -56,9 +56,9 @@ module HammerCLIForeman
|
|
|
56
56
|
success_message _("User [%{login}] created.")
|
|
57
57
|
failure_message _("Could not create the user")
|
|
58
58
|
|
|
59
|
-
extend_with(HammerCLIForeman::CommandExtensions::User.new)
|
|
60
|
-
|
|
61
59
|
build_options
|
|
60
|
+
|
|
61
|
+
extend_with(HammerCLIForeman::CommandExtensions::User.new)
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
|
|
@@ -66,9 +66,9 @@ module HammerCLIForeman
|
|
|
66
66
|
success_message _("User [%{login}] updated.")
|
|
67
67
|
failure_message _("Could not update the user")
|
|
68
68
|
|
|
69
|
-
extend_with(HammerCLIForeman::CommandExtensions::User.new)
|
|
70
|
-
|
|
71
69
|
build_options
|
|
70
|
+
|
|
71
|
+
extend_with(HammerCLIForeman::CommandExtensions::User.new)
|
|
72
72
|
end
|
|
73
73
|
|
|
74
74
|
|