hammer_cli_foreman 0.1.1 → 0.1.2

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 (92) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -3
  3. data/doc/developer_docs.md +13 -0
  4. data/doc/name_id_resolution.md +50 -0
  5. data/doc/option_builder.md +48 -0
  6. data/doc/release_notes.md +64 -0
  7. data/lib/hammer_cli_foreman.rb +100 -23
  8. data/lib/hammer_cli_foreman/architecture.rb +0 -1
  9. data/lib/hammer_cli_foreman/associating_commands.rb +71 -0
  10. data/lib/hammer_cli_foreman/auth.rb +0 -1
  11. data/lib/hammer_cli_foreman/commands.rb +112 -80
  12. data/lib/hammer_cli_foreman/common_parameter.rb +5 -3
  13. data/lib/hammer_cli_foreman/compute_resource.rb +0 -2
  14. data/lib/hammer_cli_foreman/dependency_resolver.rb +32 -0
  15. data/lib/hammer_cli_foreman/domain.rb +0 -1
  16. data/lib/hammer_cli_foreman/environment.rb +0 -2
  17. data/lib/hammer_cli_foreman/exception_handler.rb +3 -3
  18. data/lib/hammer_cli_foreman/fact.rb +1 -1
  19. data/lib/hammer_cli_foreman/filter.rb +102 -0
  20. data/lib/hammer_cli_foreman/host.rb +5 -7
  21. data/lib/hammer_cli_foreman/hostgroup.rb +4 -3
  22. data/lib/hammer_cli_foreman/id_resolver.rb +60 -51
  23. data/lib/hammer_cli_foreman/image.rb +0 -1
  24. data/lib/hammer_cli_foreman/location.rb +7 -3
  25. data/lib/hammer_cli_foreman/media.rb +1 -1
  26. data/lib/hammer_cli_foreman/model.rb +1 -1
  27. data/lib/hammer_cli_foreman/operating_system.rb +4 -6
  28. data/lib/hammer_cli_foreman/option_builders.rb +285 -0
  29. data/lib/hammer_cli_foreman/organization.rb +7 -3
  30. data/lib/hammer_cli_foreman/param_filters.rb +61 -0
  31. data/lib/hammer_cli_foreman/parameter.rb +5 -3
  32. data/lib/hammer_cli_foreman/partition_table.rb +1 -1
  33. data/lib/hammer_cli_foreman/puppet_class.rb +1 -1
  34. data/lib/hammer_cli_foreman/references.rb +16 -0
  35. data/lib/hammer_cli_foreman/report.rb +1 -1
  36. data/lib/hammer_cli_foreman/role.rb +78 -0
  37. data/lib/hammer_cli_foreman/smart_class_parameter.rb +1 -1
  38. data/lib/hammer_cli_foreman/smart_proxy.rb +17 -2
  39. data/lib/hammer_cli_foreman/smart_variables.rb +111 -0
  40. data/lib/hammer_cli_foreman/subnet.rb +1 -1
  41. data/lib/hammer_cli_foreman/template.rb +10 -4
  42. data/lib/hammer_cli_foreman/user.rb +5 -1
  43. data/lib/hammer_cli_foreman/usergroup.rb +58 -0
  44. data/lib/hammer_cli_foreman/version.rb +1 -1
  45. data/locale/Makefile +12 -11
  46. data/locale/README.md +18 -0
  47. data/locale/en/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  48. data/locale/en/hammer-cli-foreman.po +1584 -0
  49. data/locale/en_GB/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  50. data/locale/en_GB/hammer-cli-foreman.po +1975 -0
  51. data/locale/es/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  52. data/locale/es/hammer-cli-foreman.po +1976 -0
  53. data/locale/fr/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  54. data/locale/fr/hammer-cli-foreman.po +1976 -0
  55. data/locale/hammer-cli-foreman.pot +1197 -787
  56. data/test/unit/api_test.rb +25 -0
  57. data/test/unit/architecture_test.rb +1 -0
  58. data/test/unit/commands_test.rb +18 -0
  59. data/test/unit/common_parameter_test.rb +1 -0
  60. data/test/unit/compute_resource_test.rb +1 -0
  61. data/test/unit/data/1.6/foreman_api.json +1 -0
  62. data/test/unit/dependency_resolver_test.rb +42 -0
  63. data/test/unit/domain_test.rb +1 -0
  64. data/test/unit/environment_test.rb +1 -0
  65. data/test/unit/fact_test.rb +1 -0
  66. data/test/unit/filter_test.rb +133 -0
  67. data/test/unit/helpers/command.rb +0 -13
  68. data/test/unit/host_test.rb +3 -0
  69. data/test/unit/hostgroup_test.rb +1 -0
  70. data/test/unit/id_resolver_test.rb +21 -68
  71. data/test/unit/image_test.rb +1 -1
  72. data/test/unit/location_test.rb +2 -0
  73. data/test/unit/media_test.rb +2 -0
  74. data/test/unit/model_test.rb +1 -0
  75. data/test/unit/operating_system_test.rb +1 -0
  76. data/test/unit/option_builders_test.rb +543 -0
  77. data/test/unit/organization_test.rb +1 -0
  78. data/test/unit/param_filters_test.rb +143 -0
  79. data/test/unit/partition_table_test.rb +1 -0
  80. data/test/unit/puppet_class_test.rb +1 -0
  81. data/test/unit/report_test.rb +1 -0
  82. data/test/unit/role_test.rb +94 -0
  83. data/test/unit/smart_class_parameter_test.rb +1 -0
  84. data/test/unit/smart_proxy_test.rb +14 -1
  85. data/test/unit/subnet_test.rb +1 -0
  86. data/test/unit/template_test.rb +1 -0
  87. data/test/unit/test_helper.rb +1 -1
  88. data/test/unit/user_test.rb +1 -0
  89. data/test/unit/usergroup_test.rb +80 -0
  90. metadata +50 -7
  91. data/lib/hammer_cli_foreman/searchables_option_builder.rb +0 -99
  92. data/test/unit/searchables_option_builder_test.rb +0 -172
@@ -45,5 +45,4 @@ module HammerCLIForeman
45
45
  autoload_subcommands
46
46
  end
47
47
 
48
- HammerCLI::ShellMainCommand.subcommand 'auth', _("Foreman connection login/logout."), HammerCLIForeman::Auth
49
48
  end
@@ -2,6 +2,10 @@ module HammerCLIForeman
2
2
 
3
3
  CONNECTION_NAME = 'foreman'
4
4
 
5
+ RESOURCE_NAME_MAPPING = {
6
+ :usergroup => :user_group
7
+ }
8
+
5
9
  def self.credentials
6
10
  @credentials ||= Credentials.new(
7
11
  :username => (HammerCLI::Settings.get(:_params, :username) || ENV['FOREMAN_USERNAME'] || HammerCLI::Settings.get(:foreman, :username)),
@@ -12,11 +16,11 @@ module HammerCLIForeman
12
16
 
13
17
  def self.resource_config
14
18
  config = {}
15
- config[:uri] = HammerCLI::Settings.get(:foreman, :host)
19
+ config[:uri] = HammerCLI::Settings.get(:_params, :host) || HammerCLI::Settings.get(:foreman, :host)
16
20
  config[:credentials] = credentials
17
21
  config[:logger] = Logging.logger['API']
18
22
  config[:api_version] = 2
19
- config[:aggressive_cache_checking] = HammerCLI::Settings.get(:foreman, :refresh_cache) || true
23
+ config[:aggressive_cache_checking] = HammerCLI::Settings.get(:foreman, :refresh_cache) || false
20
24
  config[:headers] = { "Accept-Language" => HammerCLI::I18n.locale }
21
25
  config[:language] = HammerCLI::I18n.locale
22
26
  config[:timeout] = HammerCLI::Settings.get(:foreman, :request_timeout)
@@ -32,8 +36,25 @@ module HammerCLIForeman
32
36
  )
33
37
  end
34
38
 
35
- def self.foreman_resource(resource)
36
- foreman_api_connection.api.resource(resource)
39
+ def self.foreman_resource!(resource_name, options={})
40
+ if options[:singular]
41
+ resource_name = ApipieBindings::Inflector.pluralize(resource_name.to_s).to_sym
42
+ else
43
+ resource_name = resource_name.to_sym
44
+ end
45
+ foreman_api_connection.api.resource(resource_name)
46
+ end
47
+
48
+ def self.foreman_resource(resource_name, options={})
49
+ begin
50
+ foreman_resource!(resource_name, options)
51
+ rescue NameError
52
+ nil
53
+ end
54
+ end
55
+
56
+ def self.param_to_resource(param_name)
57
+ HammerCLIForeman.foreman_resource(param_name.gsub(/_id$/, ""), :singular => true)
37
58
  end
38
59
 
39
60
  def self.collection_to_common_format(data)
@@ -77,10 +98,36 @@ module HammerCLIForeman
77
98
  self.class.resolver
78
99
  end
79
100
 
101
+ def dependency_resolver
102
+ self.class.dependency_resolver
103
+ end
104
+
80
105
  def searchables
81
106
  self.class.searchables
82
107
  end
83
108
 
109
+ def self.create_option_builder
110
+ configurator = BuilderConfigurator.new(searchables, dependency_resolver)
111
+
112
+ builder = ForemanOptionBuilder.new(searchables)
113
+ builder.builders = []
114
+ builder.builders += configurator.builders_for(resource, resource.action(action)) if resource_defined?
115
+ builder.builders += super.builders
116
+ builder
117
+ end
118
+
119
+ def self.resource_name_mapping
120
+ HammerCLIForeman::RESOURCE_NAME_MAPPING
121
+ end
122
+
123
+ def self.build_options(builder_params={})
124
+ builder_params[:resource_mapping] ||= resource_name_mapping
125
+ builder_params = HammerCLIForeman::BuildParams.new(builder_params)
126
+ yield(builder_params) if block_given?
127
+
128
+ super(builder_params.to_hash, &nil)
129
+ end
130
+
84
131
  def get_identifier
85
132
  @identifier ||= get_resource_id(resource)
86
133
  @identifier
@@ -104,6 +151,10 @@ module HammerCLIForeman
104
151
  HammerCLIForeman::IdResolver.new(api, HammerCLIForeman::Searchables.new)
105
152
  end
106
153
 
154
+ def self.dependency_resolver
155
+ HammerCLIForeman::DependencyResolver.new
156
+ end
157
+
107
158
  def self.searchables
108
159
  @searchables ||= HammerCLIForeman::Searchables.new
109
160
  @searchables
@@ -113,16 +164,33 @@ module HammerCLIForeman
113
164
  HammerCLIForeman.record_to_common_format(super)
114
165
  end
115
166
 
116
- def request_params
117
- params = super
118
- resolver.id_params(resource.action(action)).each do |api_param|
119
- param_resource = resolver.param_to_resource(api_param.name)
120
- resource_id = get_resource_id(param_resource, :scoped => true, :required => api_param.required?)
121
- params[api_param.name] = resource_id if resource_id
167
+ def customized_options
168
+ params = options
169
+ # resolve all '<resource_name>_id' parameters if they are defined as options
170
+ # (they can be skipped using .without or .expand.except)
171
+ IdParamsFilter.new(:only_required => false).for_action(resource.action(action)).each do |api_param|
172
+ param_resource = HammerCLIForeman.param_to_resource(api_param.name)
173
+ if param_resource && respond_to?(HammerCLI.option_accessor_name("#{param_resource.singular_name}_id"))
174
+ resource_id = get_resource_id(param_resource, :scoped => true, :required => api_param.required?)
175
+ params[HammerCLI.option_accessor_name(api_param.name)] = resource_id if resource_id
176
+ end
122
177
  end
178
+ # resolve 'id' parameter if it's defined as an option
179
+ id_option_name = HammerCLI.option_accessor_name('id')
180
+ params[id_option_name] ||= get_identifier if respond_to?(id_option_name)
123
181
  params
124
182
  end
125
183
 
184
+ def request_params
185
+ params = customized_options
186
+ params_pruned = method_options(params)
187
+
188
+ # Options defined manualy in commands are removed in method_options.
189
+ # Manual ids are common so its handling is covered here
190
+ id_option_name = HammerCLI.option_accessor_name('id')
191
+ params_pruned['id'] = params[id_option_name] if params[id_option_name]
192
+ params_pruned
193
+ end
126
194
  end
127
195
 
128
196
 
@@ -153,7 +221,7 @@ module HammerCLIForeman
153
221
 
154
222
  def execute
155
223
  if respond_to?(:option_page) && respond_to?(:option_per_page)
156
- self.option_page ||= 1
224
+ self.option_page = (self.option_page || 1).to_i
157
225
  self.option_per_page ||= HammerCLI::Settings.get(:ui, :per_page) || DEFAULT_PER_PAGE
158
226
  browse_collection
159
227
  else
@@ -188,68 +256,37 @@ module HammerCLIForeman
188
256
  d
189
257
  end
190
258
 
191
- def self.custom_option_builders
192
- builders = super
193
- if resource_defined?
194
- builders += [
195
- DependentSearchablesOptionBuilder.new(resolver.dependent_resources(resource, :required => true, :recursive => true), searchables),
196
- DependentSearchablesOptionBuilder.new(resolver.dependent_resources(resource, :required => false, :recursive => false), searchables)
197
- ]
198
- end
199
- builders
200
- end
201
-
202
259
  end
203
260
 
204
261
 
205
262
  class SingleResourceCommand < Command
206
263
 
207
- def self.custom_option_builders
208
- builders = super
209
- if resource_defined?
210
- builders += [
211
- SearchablesOptionBuilder.new(resource, searchables),
212
- DependentSearchablesOptionBuilder.new(resolver.dependent_resources(resource, :required => true, :recursive => true), searchables),
213
- DependentSearchablesOptionBuilder.new(resolver.dependent_resources(resource, :required => false, :recursive => false), searchables)
214
- ]
215
- end
216
- builders
217
- end
218
-
219
- def request_params
220
- params = super
221
- params['id'] ||= get_identifier
222
- params
223
- end
224
-
225
264
  end
226
265
 
227
266
 
228
267
  class AssociatedResourceListCommand < ListCommand
229
268
 
230
- option "--id", "ID", " "
231
-
232
269
  def parent_resource
233
270
  self.class.parent_resource
234
271
  end
235
272
 
236
273
  def self.parent_resource(name=nil)
237
- @parent_api_resource = HammerCLIForeman.foreman_resource(name) unless name.nil?
274
+ @parent_api_resource = HammerCLIForeman.foreman_resource!(name) unless name.nil?
238
275
  return @parent_api_resource if @parent_api_resource
239
276
  return superclass.parent_resource if superclass.respond_to? :parent_resource
240
277
  end
241
278
 
242
- def self.custom_option_builders
243
- [
244
- HammerCLI::Apipie::OptionBuilder.new(resource.action(action), :require_options => false),
245
- SearchablesOptionBuilder.new(parent_resource, searchables)
246
- ]
279
+ def self.create_option_builder
280
+ builder = super
281
+ builder.builders << SearchablesOptionBuilder.new(parent_resource, searchables)
282
+ builder.builders << IdOptionBuilder.new(parent_resource)
283
+ builder
247
284
  end
248
285
 
249
286
  def request_params
250
287
  id_param_name = "#{parent_resource.singular_name}_id"
251
288
 
252
- params = method_options
289
+ params = super
253
290
  params[id_param_name] = get_resource_id(parent_resource)
254
291
  params
255
292
  end
@@ -290,18 +327,6 @@ module HammerCLIForeman
290
327
  super(name) || "create"
291
328
  end
292
329
 
293
- def self.custom_option_builders
294
- builders = super
295
- if resource_defined?
296
- builders += [
297
- SearchablesOptionBuilder.new(resource, searchables),
298
- DependentSearchablesOptionBuilder.new(resolver.dependent_resources(resource, :required => true, :recursive => true), searchables),
299
- DependentSearchablesOptionBuilder.new(resolver.dependent_resources(resource, :required => false, :recursive => false), searchables)
300
- ]
301
- end
302
- builders
303
- end
304
-
305
330
  end
306
331
 
307
332
 
@@ -313,14 +338,10 @@ module HammerCLIForeman
313
338
  super(name) || "update"
314
339
  end
315
340
 
316
- def self.custom_option_builders
317
- builders = super
318
- if resource_defined?
319
- builders += [
320
- SearchablesUpdateOptionBuilder.new(resource, searchables)
321
- ]
322
- end
323
- builders
341
+ def self.create_option_builder
342
+ builder = super
343
+ builder.builders << SearchablesUpdateOptionBuilder.new(resource, searchables) if resource_defined?
344
+ builder
324
345
  end
325
346
 
326
347
  def method_options_for_params(params, include_nil=true)
@@ -349,17 +370,26 @@ module HammerCLIForeman
349
370
 
350
371
  class AssociatedCommand < Command
351
372
 
352
- option "--id", "ID", " "
353
-
354
373
  action :update
355
374
 
356
- def self.custom_option_builders
357
- [
375
+ def self.create_option_builder
376
+ configurator = BuilderConfigurator.new(searchables, dependency_resolver)
377
+
378
+ builder = ForemanOptionBuilder.new(searchables)
379
+ builder.builders = [
358
380
  SearchablesOptionBuilder.new(resource, searchables),
359
- DependentSearchablesOptionBuilder.new(resolver.dependent_resources(resource, :required => true, :recursive => true), searchables),
360
- DependentSearchablesOptionBuilder.new(associated_resource, searchables),
361
- DependentSearchablesOptionBuilder.new(resolver.dependent_resources(associated_resource, :required => true, :recursive => true), searchables)
381
+ DependentSearchablesOptionBuilder.new(associated_resource, searchables)
362
382
  ]
383
+
384
+ resources = []
385
+ resources += dependency_resolver.resource_dependencies(resource, :only_required => true, :recursive => true)
386
+ resources += dependency_resolver.resource_dependencies(associated_resource, :only_required => true, :recursive => true)
387
+ resources.each do |r|
388
+ builder.builders << DependentSearchablesOptionBuilder.new(r, searchables)
389
+ end
390
+ builder.builders << IdOptionBuilder.new(resource)
391
+
392
+ builder
363
393
  end
364
394
 
365
395
  def associated_resource
@@ -367,7 +397,7 @@ module HammerCLIForeman
367
397
  end
368
398
 
369
399
  def self.associated_resource(name=nil)
370
- @associated_api_resource = HammerCLIForeman.foreman_resource(name) unless name.nil?
400
+ @associated_api_resource = HammerCLIForeman.foreman_resource!(name) unless name.nil?
371
401
  return @associated_api_resource if @associated_api_resource
372
402
  return superclass.associated_resource if superclass.respond_to? :associated_resource
373
403
  end
@@ -390,7 +420,7 @@ module HammerCLIForeman
390
420
  end
391
421
 
392
422
  def request_params
393
- params = method_options
423
+ params = super
394
424
  if params.key?(resource.singular_name)
395
425
  params[resource.singular_name] = {"#{association_name}_ids" => get_new_ids }
396
426
  else
@@ -414,7 +444,8 @@ module HammerCLIForeman
414
444
  end
415
445
 
416
446
  def self.desc(desc=nil)
417
- _("Associate a resource")
447
+ description = super(desc) || ''
448
+ description.strip.empty? ? _("Associate a resource") : description
418
449
  end
419
450
 
420
451
  def get_new_ids
@@ -435,7 +466,8 @@ module HammerCLIForeman
435
466
  end
436
467
 
437
468
  def self.desc(desc=nil)
438
- _("Disassociate a resource")
469
+ description = super(desc) || ''
470
+ description.strip.empty? ? _("Disassociate a resource") : description
439
471
  end
440
472
 
441
473
  def get_new_ids
@@ -43,9 +43,7 @@ module HammerCLIForeman
43
43
  end
44
44
 
45
45
  def request_params
46
- params = method_options
47
- params['id'] = option_name
48
- params
46
+ super.update('id' => option_name)
49
47
  end
50
48
 
51
49
  end
@@ -55,6 +53,10 @@ module HammerCLIForeman
55
53
  success_message _("Global parameter [%{name}] deleted.")
56
54
  failure_message _("Could not delete the global parameter [%{name}]")
57
55
 
56
+ def request_params
57
+ super.update('id' => option_name)
58
+ end
59
+
58
60
  build_options :without => :id
59
61
  end
60
62
 
@@ -92,6 +92,4 @@ module HammerCLIForeman
92
92
 
93
93
  end
94
94
 
95
- HammerCLI::MainCommand.subcommand 'compute-resource', _("Manipulate compute resources."), HammerCLIForeman::ComputeResource
96
-
97
95
 
@@ -0,0 +1,32 @@
1
+ module HammerCLIForeman
2
+
3
+
4
+ class DependencyResolver
5
+
6
+ def action_dependencies(action, options={})
7
+ options[:only_required] = (options[:only_required] == true)
8
+ options[:recursive] = !(options[:recursive] == false)
9
+
10
+ resolve_for_action(action, [], options)
11
+ end
12
+
13
+ def resource_dependencies(resource, options={})
14
+ action_dependencies(resource.action(:index), options)
15
+ end
16
+
17
+ protected
18
+
19
+ def resolve_for_action(action, resources_found, options)
20
+ IdParamsFilter.new(:only_required => options[:only_required]).for_action(action).each do |param|
21
+ res = HammerCLIForeman.param_to_resource(param.name)
22
+ if res and !resources_found.map(&:name).include?(res.name)
23
+ resources_found << res
24
+ resolve_for_action(res.action(:index), resources_found, options) if options[:recursive]
25
+ end
26
+ end
27
+ resources_found
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -93,5 +93,4 @@ module HammerCLIForeman
93
93
 
94
94
  end
95
95
 
96
- HammerCLI::MainCommand.subcommand 'domain', _("Manipulate domains."), HammerCLIForeman::Domain
97
96
 
@@ -63,5 +63,3 @@ module HammerCLIForeman
63
63
  end
64
64
 
65
65
  end
66
-
67
- HammerCLI::MainCommand.subcommand 'environment', "Manipulate environments.", HammerCLIForeman::Environment
@@ -72,9 +72,9 @@ module HammerCLIForeman
72
72
 
73
73
  def handle_apipie_docloading_error(e)
74
74
  rake_command = 'foreman-rake apipie:cache'
75
- print_error _("Could not load API description from the server\n"\
76
- " - is your server down?\n"\
77
- " - was \"#{rake_command}\" run on the server when using apipie cache? (typical production settings))\n")
75
+ print_error _("Could not load the API description from the server") + "\n - " +
76
+ _("is the server down?") + "\n - " +
77
+ _("was '%s' run on the server when using apipie cache? (typical production settings)") % rake_command
78
78
  log_full_error e
79
79
  HammerCLI::EX_CONFIG
80
80
  end
@@ -33,4 +33,4 @@ module HammerCLIForeman
33
33
 
34
34
  end
35
35
 
36
- HammerCLI::MainCommand.subcommand 'fact', _("Search facts."), HammerCLIForeman::Fact
36
+
@@ -0,0 +1,102 @@
1
+ module HammerCLIForeman
2
+
3
+ class Filter < HammerCLIForeman::Command
4
+
5
+ resource :filters
6
+
7
+ class ListCommand < HammerCLIForeman::ListCommand
8
+ output do
9
+ field :id, _("Id")
10
+ field :resource_type, _("Resource type")
11
+ field :search, _("Search")
12
+ field :unlimited?, _("Unlimited?"), Fields::Boolean
13
+ field :role, _("Role"), Fields::Reference
14
+ field :permissions, _("Permissions"), Fields::List
15
+ end
16
+
17
+ def extend_data(filter)
18
+ filter['resource_type'] ||= _("(Miscellaneous)")
19
+ filter['search'] ||= _("none")
20
+ filter['permissions'] = filter.fetch('permissions', []).collect{|p| p["name"]}
21
+ filter
22
+ end
23
+
24
+ build_options
25
+ end
26
+
27
+ class InfoCommand < HammerCLIForeman::InfoCommand
28
+ output ListCommand.output_definition do
29
+ HammerCLIForeman::References.taxonomies(self)
30
+ HammerCLIForeman::References.timestamps(self)
31
+ end
32
+
33
+ def extend_data(filter)
34
+ filter['resource_type'] ||= _("(Miscellaneous)")
35
+ filter['search'] ||= _("none")
36
+ filter['permissions'] = filter.fetch('permissions', []).collect{|p| p["name"]}
37
+ filter
38
+ end
39
+
40
+ build_options
41
+ end
42
+
43
+ class CreateCommand < HammerCLIForeman::CreateCommand
44
+ success_message _("Permission filter for [%<resource_type>s] created")
45
+ failure_message _("Could not create the permission filter")
46
+
47
+ build_options
48
+ end
49
+
50
+
51
+ class UpdateCommand < HammerCLIForeman::UpdateCommand
52
+ success_message _("Permission filter for [%<resource_type>s] updated")
53
+ failure_message _("Could not update the permission filter")
54
+
55
+ build_options
56
+ end
57
+
58
+
59
+ class DeleteCommand < HammerCLIForeman::DeleteCommand
60
+ success_message _("Permission filter deleted")
61
+ failure_message _("Could not delete the permission filter")
62
+
63
+ build_options
64
+ end
65
+
66
+
67
+ class AvailablePermissionsCommand < HammerCLIForeman::ListCommand
68
+ resource :permissions, :index
69
+ command_name 'available-permissions'
70
+
71
+ output do
72
+ field :id, _("Id")
73
+ field :name, _("Name")
74
+ field :resource_type, _("Resource")
75
+ end
76
+
77
+ def extend_data(filter)
78
+ filter['resource_type'] ||= _("(Miscellaneous)")
79
+ filter
80
+ end
81
+
82
+ build_options
83
+ end
84
+
85
+ class AvailableResourcesCommand < HammerCLIForeman::ListCommand
86
+ resource :permissions, :resource_types
87
+ command_name 'available-resources'
88
+
89
+ output do
90
+ field :name, _("Name")
91
+ end
92
+
93
+ build_options
94
+ end
95
+
96
+ autoload_subcommands
97
+ end
98
+
99
+ end
100
+
101
+
102
+