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.
- checksums.yaml +4 -4
- data/README.md +11 -3
- data/doc/developer_docs.md +13 -0
- data/doc/name_id_resolution.md +50 -0
- data/doc/option_builder.md +48 -0
- data/doc/release_notes.md +64 -0
- data/lib/hammer_cli_foreman.rb +100 -23
- data/lib/hammer_cli_foreman/architecture.rb +0 -1
- data/lib/hammer_cli_foreman/associating_commands.rb +71 -0
- data/lib/hammer_cli_foreman/auth.rb +0 -1
- data/lib/hammer_cli_foreman/commands.rb +112 -80
- data/lib/hammer_cli_foreman/common_parameter.rb +5 -3
- data/lib/hammer_cli_foreman/compute_resource.rb +0 -2
- data/lib/hammer_cli_foreman/dependency_resolver.rb +32 -0
- data/lib/hammer_cli_foreman/domain.rb +0 -1
- data/lib/hammer_cli_foreman/environment.rb +0 -2
- data/lib/hammer_cli_foreman/exception_handler.rb +3 -3
- data/lib/hammer_cli_foreman/fact.rb +1 -1
- data/lib/hammer_cli_foreman/filter.rb +102 -0
- data/lib/hammer_cli_foreman/host.rb +5 -7
- data/lib/hammer_cli_foreman/hostgroup.rb +4 -3
- data/lib/hammer_cli_foreman/id_resolver.rb +60 -51
- data/lib/hammer_cli_foreman/image.rb +0 -1
- data/lib/hammer_cli_foreman/location.rb +7 -3
- data/lib/hammer_cli_foreman/media.rb +1 -1
- data/lib/hammer_cli_foreman/model.rb +1 -1
- data/lib/hammer_cli_foreman/operating_system.rb +4 -6
- data/lib/hammer_cli_foreman/option_builders.rb +285 -0
- data/lib/hammer_cli_foreman/organization.rb +7 -3
- data/lib/hammer_cli_foreman/param_filters.rb +61 -0
- data/lib/hammer_cli_foreman/parameter.rb +5 -3
- data/lib/hammer_cli_foreman/partition_table.rb +1 -1
- data/lib/hammer_cli_foreman/puppet_class.rb +1 -1
- data/lib/hammer_cli_foreman/references.rb +16 -0
- data/lib/hammer_cli_foreman/report.rb +1 -1
- data/lib/hammer_cli_foreman/role.rb +78 -0
- data/lib/hammer_cli_foreman/smart_class_parameter.rb +1 -1
- data/lib/hammer_cli_foreman/smart_proxy.rb +17 -2
- data/lib/hammer_cli_foreman/smart_variables.rb +111 -0
- data/lib/hammer_cli_foreman/subnet.rb +1 -1
- data/lib/hammer_cli_foreman/template.rb +10 -4
- data/lib/hammer_cli_foreman/user.rb +5 -1
- data/lib/hammer_cli_foreman/usergroup.rb +58 -0
- data/lib/hammer_cli_foreman/version.rb +1 -1
- data/locale/Makefile +12 -11
- data/locale/README.md +18 -0
- data/locale/en/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/en/hammer-cli-foreman.po +1584 -0
- data/locale/en_GB/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/en_GB/hammer-cli-foreman.po +1975 -0
- data/locale/es/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/es/hammer-cli-foreman.po +1976 -0
- data/locale/fr/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/fr/hammer-cli-foreman.po +1976 -0
- data/locale/hammer-cli-foreman.pot +1197 -787
- data/test/unit/api_test.rb +25 -0
- data/test/unit/architecture_test.rb +1 -0
- data/test/unit/commands_test.rb +18 -0
- data/test/unit/common_parameter_test.rb +1 -0
- data/test/unit/compute_resource_test.rb +1 -0
- data/test/unit/data/1.6/foreman_api.json +1 -0
- data/test/unit/dependency_resolver_test.rb +42 -0
- data/test/unit/domain_test.rb +1 -0
- data/test/unit/environment_test.rb +1 -0
- data/test/unit/fact_test.rb +1 -0
- data/test/unit/filter_test.rb +133 -0
- data/test/unit/helpers/command.rb +0 -13
- data/test/unit/host_test.rb +3 -0
- data/test/unit/hostgroup_test.rb +1 -0
- data/test/unit/id_resolver_test.rb +21 -68
- data/test/unit/image_test.rb +1 -1
- data/test/unit/location_test.rb +2 -0
- data/test/unit/media_test.rb +2 -0
- data/test/unit/model_test.rb +1 -0
- data/test/unit/operating_system_test.rb +1 -0
- data/test/unit/option_builders_test.rb +543 -0
- data/test/unit/organization_test.rb +1 -0
- data/test/unit/param_filters_test.rb +143 -0
- data/test/unit/partition_table_test.rb +1 -0
- data/test/unit/puppet_class_test.rb +1 -0
- data/test/unit/report_test.rb +1 -0
- data/test/unit/role_test.rb +94 -0
- data/test/unit/smart_class_parameter_test.rb +1 -0
- data/test/unit/smart_proxy_test.rb +14 -1
- data/test/unit/subnet_test.rb +1 -0
- data/test/unit/template_test.rb +1 -0
- data/test/unit/test_helper.rb +1 -1
- data/test/unit/user_test.rb +1 -0
- data/test/unit/usergroup_test.rb +80 -0
- metadata +50 -7
- data/lib/hammer_cli_foreman/searchables_option_builder.rb +0 -99
- data/test/unit/searchables_option_builder_test.rb +0 -172
|
@@ -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) ||
|
|
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(
|
|
36
|
-
|
|
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
|
|
117
|
-
params =
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
|
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.
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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 =
|
|
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.
|
|
317
|
-
|
|
318
|
-
if resource_defined?
|
|
319
|
-
|
|
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.
|
|
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(
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
|
@@ -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
|
|
@@ -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
|
-
|
|
77
|
-
|
|
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
|
|
@@ -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
|
+
|