hammer_cli_foreman 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of hammer_cli_foreman might be problematic. Click here for more details.

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
+