hammer_cli_foreman 0.1.3 → 0.1.4

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.

Potentially problematic release.


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

Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/doc/release_notes.md +18 -0
  3. data/lib/hammer_cli_foreman.rb +4 -0
  4. data/lib/hammer_cli_foreman/auth_source.rb +10 -0
  5. data/lib/hammer_cli_foreman/auth_source_ldap.rb +70 -0
  6. data/lib/hammer_cli_foreman/commands.rb +47 -3
  7. data/lib/hammer_cli_foreman/credentials.rb +35 -4
  8. data/lib/hammer_cli_foreman/exceptions.rb +10 -1
  9. data/lib/hammer_cli_foreman/external_usergroup.rb +83 -0
  10. data/lib/hammer_cli_foreman/host.rb +26 -22
  11. data/lib/hammer_cli_foreman/hostgroup.rb +12 -5
  12. data/lib/hammer_cli_foreman/i18n.rb +4 -0
  13. data/lib/hammer_cli_foreman/id_resolver.rb +81 -13
  14. data/lib/hammer_cli_foreman/operating_system.rb +5 -44
  15. data/lib/hammer_cli_foreman/option_builders.rb +64 -5
  16. data/lib/hammer_cli_foreman/organization.rb +3 -3
  17. data/lib/hammer_cli_foreman/param_filters.rb +18 -2
  18. data/lib/hammer_cli_foreman/references.rb +9 -1
  19. data/lib/hammer_cli_foreman/role.rb +2 -5
  20. data/lib/hammer_cli_foreman/usergroup.rb +4 -0
  21. data/lib/hammer_cli_foreman/version.rb +1 -1
  22. data/locale/de/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  23. data/locale/de/hammer-cli-foreman.po +2169 -0
  24. data/locale/en/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  25. data/locale/en/hammer-cli-foreman.po +1 -1
  26. data/locale/en_GB/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  27. data/locale/en_GB/hammer-cli-foreman.po +254 -81
  28. data/locale/es/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  29. data/locale/es/hammer-cli-foreman.po +268 -94
  30. data/locale/fr/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  31. data/locale/fr/hammer-cli-foreman.po +258 -84
  32. data/locale/hammer-cli-foreman.pot +428 -321
  33. data/locale/it/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  34. data/locale/it/hammer-cli-foreman.po +2168 -0
  35. data/locale/ja/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  36. data/locale/ja/hammer-cli-foreman.po +2167 -0
  37. data/locale/ko/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  38. data/locale/ko/hammer-cli-foreman.po +2167 -0
  39. data/locale/pt_BR/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  40. data/locale/pt_BR/hammer-cli-foreman.po +2167 -0
  41. data/locale/ru/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  42. data/locale/ru/hammer-cli-foreman.po +2166 -0
  43. data/locale/zh_CN/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  44. data/locale/zh_CN/hammer-cli-foreman.po +2166 -0
  45. data/locale/zh_TW/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  46. data/locale/zh_TW/hammer-cli-foreman.po +2166 -0
  47. data/test/unit/auth_source_ldap_test.rb +95 -0
  48. data/test/unit/credentials_test.rb +20 -7
  49. data/test/unit/data/1.6/foreman_api.json +1 -1
  50. data/test/unit/data/1.6/foreman_api_back.json +1 -0
  51. data/test/unit/data/1.6/whatever.json +1 -0
  52. data/test/unit/external_usergroup_test.rb +103 -0
  53. data/test/unit/helpers/command.rb +5 -1
  54. data/test/unit/host_test.rb +4 -4
  55. data/test/unit/hostgroup_test.rb +5 -5
  56. data/test/unit/media_test.rb +2 -2
  57. data/test/unit/operating_system_test.rb +7 -1
  58. data/test/unit/param_filters_test.rb +65 -0
  59. data/test/unit/smart_class_parameter_test.rb +1 -1
  60. metadata +335 -309
  61. data/lib/hammer_cli_foreman/smart_variables.rb +0 -111
@@ -6,18 +6,21 @@ module HammerCLIForeman
6
6
  module HostgroupUpdateCreateCommons
7
7
 
8
8
  def self.included(base)
9
- base.option "--puppetclass-ids", "PUPPETCLASS_IDS", _("List of puppetclass ids"),
9
+ base.option "--puppet-class-ids", "PUPPETCLASS_IDS", _("List of puppetclass ids"),
10
10
  :format => HammerCLI::Options::Normalizers::List.new
11
11
  base.option "--puppet-ca-proxy", "PUPPET_CA_PROXY_NAME", _("Name of puppet CA proxy")
12
12
  base.option "--puppet-proxy", "PUPPET_PROXY_NAME", _("Name of puppet proxy")
13
+ base.option "--parent", "PARENT_NAME", _("Name of parent hostgroup")
14
+ base.option "--puppet-classes", "PUPPET_CLASS_NAMES", "",
15
+ :format => HammerCLI::Options::Normalizers::List.new
13
16
  end
14
17
 
15
18
  def request_params
16
19
  params = super
17
-
20
+ params['hostgroup']["parent_id"] ||= resolver.hostgroup_id('option_name' => option_parent) if option_parent
18
21
  params['hostgroup']["puppet_proxy_id"] ||= proxy_id(option_puppet_proxy)
19
22
  params['hostgroup']["puppet_ca_proxy_id"] ||= proxy_id(option_puppet_ca_proxy)
20
- params['hostgroup']['puppetclass_ids'] = option_puppetclass_ids
23
+ params['hostgroup']['puppetclass_ids'] = option_puppet_class_ids || puppet_class_ids(option_puppet_classes)
21
24
  params
22
25
  end
23
26
 
@@ -27,6 +30,10 @@ module HammerCLIForeman
27
30
  resolver.smart_proxy_id('option_name' => name) if name
28
31
  end
29
32
 
33
+ def puppet_class_ids(names)
34
+ resolver.puppetclass_ids('option_names' => names) if names
35
+ end
36
+
30
37
  end
31
38
 
32
39
  class Hostgroup < HammerCLIForeman::Command
@@ -38,11 +45,10 @@ module HammerCLIForeman
38
45
  output do
39
46
  field :id, _("Id")
40
47
  field :name, _("Name")
41
- field :label, _("Label")
48
+ field :title, _("Title")
42
49
  field nil, _("Operating System"), Fields::SingleReference, :key => :operatingsystem
43
50
  field nil, _("Environment"), Fields::SingleReference, :key => :environment
44
51
  field nil, _("Model"), Fields::SingleReference, :key => :model
45
- field :ancestry, _("Ancestry")
46
52
  end
47
53
 
48
54
  build_options
@@ -64,6 +70,7 @@ module HammerCLIForeman
64
70
  HammerCLIForeman::References.puppetclasses(self)
65
71
  HammerCLIForeman::References.parameters(self)
66
72
  HammerCLIForeman::References.taxonomies(self)
73
+ field :ancestry, _("Parent Id")
67
74
  end
68
75
 
69
76
  build_options
@@ -24,6 +24,10 @@ module HammerCLIForeman
24
24
  '/usr/share/locale'
25
25
  end
26
26
 
27
+ def domain_name
28
+ "#{super}@system"
29
+ end
30
+
27
31
  end
28
32
 
29
33
  end
@@ -10,6 +10,10 @@ module HammerCLIForeman
10
10
 
11
11
  attr_reader :name, :description
12
12
 
13
+ def plural_name
14
+ ApipieBindings::Inflector.pluralize(@name)
15
+ end
16
+
13
17
  def editable?
14
18
  @editable
15
19
  end
@@ -37,12 +41,12 @@ module HammerCLIForeman
37
41
  :filter => [],
38
42
  :host => [ s_name(_("Host name")) ],
39
43
  :hostgroup => [ s_name(_("Hostgroup name")) ],
40
- :image => [],
44
+ # :image => [],
41
45
  :location => [ s_name(_("Location name")) ],
42
46
  :medium => [ s_name(_("Medium name")) ],
43
47
  :model => [ s_name(_("Model name")) ],
44
48
  :organization => [ s_name(_("Organization name")) ],
45
- :operatingsystem => [],
49
+ :operatingsystem => [ s("title", _("Operating system title"), :editable => false) ],
46
50
  :ptable => [ s_name(_("Partition table name")) ],
47
51
  :proxy => [ s_name(_("Proxy name")) ],
48
52
  :puppetclass => [ s_name(_("Puppet class name")) ],
@@ -81,6 +85,7 @@ module HammerCLIForeman
81
85
  return scoped_options unless resource
82
86
 
83
87
  option_names = searchables(resource).map { |s| s.name }
88
+ option_names += searchables(resource).map { |s| s.plural_name }
84
89
  option_names << "id"
85
90
 
86
91
  option_names.each do |name|
@@ -98,15 +103,35 @@ module HammerCLIForeman
98
103
  end
99
104
 
100
105
 
106
+ def puppetclass_id(options)
107
+ if options[HammerCLI.option_accessor_name("id")]
108
+ return options[HammerCLI.option_accessor_name("id")]
109
+ else
110
+ resource = @api.resource(:puppetclasses)
111
+ results = resolved_call(:puppetclasses, :index, options)[0]
112
+ results = results.values.flatten
113
+ return pick_result(results, resource)['id']
114
+ end
115
+ end
116
+
117
+ def puppetclass_ids(options)
118
+ options[HammerCLI.option_accessor_name("ids")] || find_resources(:puppetclasses, options).collect{|h| h.values}.flatten.map{|h| h['id']}
119
+ end
120
+
101
121
  protected
102
122
 
103
123
  def define_id_finders
104
124
  @api.resources.each do |resource|
105
125
  method_name = "#{resource.singular_name}_id"
126
+ plural_method_name = "#{resource.singular_name}_ids"
106
127
 
107
128
  self.class.send(:define_method, method_name) do |options|
108
129
  get_id(resource.name, options)
109
130
  end unless respond_to?(method_name)
131
+
132
+ self.class.send(:define_method, plural_method_name) do |options|
133
+ get_ids(resource.name, options)
134
+ end unless respond_to?(plural_method_name)
110
135
  end
111
136
  end
112
137
 
@@ -114,31 +139,57 @@ module HammerCLIForeman
114
139
  options[HammerCLI.option_accessor_name("id")] || find_resource(resource_name, options)['id']
115
140
  end
116
141
 
142
+ def get_ids(resource_name, options)
143
+ options[HammerCLI.option_accessor_name("ids")] || find_resources(resource_name, options).map{|r| r['id']}
144
+ end
145
+
146
+ def find_resources(resource_name, options)
147
+ resource = @api.resource(resource_name)
148
+ results = resolved_call(resource_name, :index, options)
149
+ raise ResolverError.new(_("one of %s not found") % resource.name, resource) if results.count < expected_record_count(options, resource)
150
+ results
151
+ end
152
+
117
153
  def find_resource(resource_name, options)
118
154
  resource = @api.resource(resource_name)
155
+ results = resolved_call(resource_name, :index, options)
156
+ pick_result(results, resource)
157
+ end
158
+
159
+ def resolved_call(resource_name, action_name, options)
160
+ resource = @api.resource(resource_name)
161
+ action = resource.action(action_name)
119
162
 
120
163
  search_options = search_options(options, resource)
121
- IdParamsFilter.new(:only_required => true).for_action(resource.action(:index)).each do |param|
164
+ IdParamsFilter.new(:only_required => true).for_action(action).each do |param|
122
165
  search_options[param.name] ||= send(param.name, scoped_options(param.name.gsub(/_id$/, ""), options))
123
166
  end
124
- resource.action(:index).routes.each do |route|
167
+ search_options = route_options(options, action).merge(search_options)
168
+
169
+ results = resource.call(action_name, search_options)
170
+ results = HammerCLIForeman.collection_to_common_format(results)
171
+ results
172
+ end
173
+
174
+ def route_options(options, action)
175
+ return {} if action.routes.any? { |r| r.params_in_path.empty? }
176
+
177
+ route_options = {}
178
+
179
+ action.routes.each do |route|
125
180
  route.params_in_path.each do |param|
126
181
  key = HammerCLI.option_accessor_name(param.to_s)
127
182
  if options[key]
128
- search_options[param] ||= options[key]
183
+ route_options[param] ||= options[key]
129
184
  end
130
185
  end
131
186
  end
132
-
133
- results = resource.call(:index, search_options)
134
- results = HammerCLIForeman.collection_to_common_format(results)
135
-
136
- pick_result(results, resource)
187
+ route_options
137
188
  end
138
189
 
139
190
  def pick_result(results, resource)
140
- raise ResolverError.new(_("%s not found") % resource.singular_name) if results.empty?
141
- raise ResolverError.new(_("%s found more than once") % resource.singular_name) if results.count > 1
191
+ raise ResolverError.new(_("%s not found") % resource.singular_name, resource) if results.empty?
192
+ raise ResolverError.new(_("%s found more than once") % resource.singular_name, resource) if results.count > 1
142
193
  results[0]
143
194
  end
144
195
 
@@ -149,7 +200,7 @@ module HammerCLIForeman
149
200
  else
150
201
  create_search_options(options, resource)
151
202
  end
152
- raise MissingSeachOptions.new(_("Missing options to search %s") % resource.singular_name) if search_options.empty?
203
+ raise MissingSeachOptions.new(_("Missing options to search %s") % resource.singular_name, resource) if search_options.empty?
153
204
  search_options
154
205
  end
155
206
 
@@ -157,11 +208,28 @@ module HammerCLIForeman
157
208
  @searchables.for(resource)
158
209
  end
159
210
 
211
+ def expected_record_count(options, resource)
212
+ searchables(resource).each do |s|
213
+ value = options[HammerCLI.option_accessor_name(s.name.to_s)]
214
+ values = options[HammerCLI.option_accessor_name(s.plural_name.to_s)]
215
+ if value
216
+ return 1
217
+ elsif values
218
+ return values.count
219
+ end
220
+ end
221
+ 0
222
+ end
223
+
160
224
  def create_search_options(options, resource)
161
225
  searchables(resource).each do |s|
162
226
  value = options[HammerCLI.option_accessor_name(s.name.to_s)]
227
+ values = options[HammerCLI.option_accessor_name(s.plural_name.to_s)]
163
228
  if value
164
229
  return {:search => "#{s.name} = \"#{value}\""}
230
+ elsif values
231
+ query = values.map{|v| "#{s.name} = \"#{v}\"" }.join(" or ")
232
+ return {:search => query}
165
233
  end
166
234
  end
167
235
  {}
@@ -8,7 +8,7 @@ module HammerCLIForeman
8
8
 
9
9
  output do
10
10
  field :id, _("Id")
11
- field :fullname, _("Full name")
11
+ field :title, _("Title")
12
12
  field :release_name, _("Release name")
13
13
  field :family, _("Family")
14
14
  end
@@ -41,56 +41,17 @@ module HammerCLIForeman
41
41
 
42
42
 
43
43
  class CreateCommand < HammerCLIForeman::CreateCommand
44
-
45
- #FIXME: replace with build_options when they are added to the api docs
46
- option "--architecture-ids", "ARCH_IDS", _("set associated architectures"),
47
- :format => HammerCLI::Options::Normalizers::List.new
48
- option "--config-template-ids", "CONFIG_TPL_IDS", _("set associated templates"),
49
- :format => HammerCLI::Options::Normalizers::List.new
50
- option "--medium-ids", "MEDIUM_IDS", _("set associated installation media"),
51
- :format => HammerCLI::Options::Normalizers::List.new
52
- option "--ptable-ids", "PTABLE_IDS", _("set associated partition tables"),
53
- :format => HammerCLI::Options::Normalizers::List.new
54
-
55
44
  success_message _("Operating system created")
56
45
  failure_message _("Could not create the operating system")
57
46
 
58
- def request_params
59
- params = super
60
- params["operatingsystem"]["architecture_ids"] = option_architecture_ids if option_architecture_ids
61
- params["operatingsystem"]["config_template_ids"] = option_config_template_ids if option_config_template_ids
62
- params["operatingsystem"]["medium_ids"] = option_medium_ids if option_medium_ids
63
- params["operatingsystem"]["ptable_ids"] = option_ptable_ids if option_ptable_ids
64
- params
65
- end
66
-
67
47
  build_options
68
48
  end
69
49
 
70
50
 
71
51
  class UpdateCommand < HammerCLIForeman::UpdateCommand
72
- #FIXME: replace with build_options when they are added to the api docs
73
- option "--architecture-ids", "ARCH_IDS", _("set associated architectures"),
74
- :format => HammerCLI::Options::Normalizers::List.new
75
- option "--config-template-ids", "CONFIG_TPL_IDS", _("set associated templates"),
76
- :format => HammerCLI::Options::Normalizers::List.new
77
- option "--medium-ids", "MEDIUM_IDS", _("set associated installation media"),
78
- :format => HammerCLI::Options::Normalizers::List.new
79
- option "--ptable-ids", "PTABLE_IDS", _("set associated partition tables"),
80
- :format => HammerCLI::Options::Normalizers::List.new
81
-
82
52
  success_message _("Operating system updated")
83
53
  failure_message _("Could not update the operating system")
84
54
 
85
- def request_params
86
- params = super
87
- params["operatingsystem"]["architecture_ids"] = option_architecture_ids if option_architecture_ids
88
- params["operatingsystem"]["config_template_ids"] = option_config_template_ids if option_config_template_ids
89
- params["operatingsystem"]["medium_ids"] = option_medium_ids if option_medium_ids
90
- params["operatingsystem"]["ptable_ids"] = option_ptable_ids if option_ptable_ids
91
- params
92
- end
93
-
94
55
  build_options
95
56
  end
96
57
 
@@ -112,7 +73,7 @@ module HammerCLIForeman
112
73
 
113
74
  def validate_options
114
75
  super
115
- validator.any(:option_operatingsystem_id).required
76
+ validator.any(:option_operatingsystem_id, :option_operatingsystem_title).required
116
77
  end
117
78
 
118
79
  build_options
@@ -126,7 +87,7 @@ module HammerCLIForeman
126
87
 
127
88
  def validate_options
128
89
  super
129
- validator.any(:option_operatingsystem_id).required
90
+ validator.any(:option_operatingsystem_id, :option_operatingsystem_title).required
130
91
  end
131
92
 
132
93
  build_options
@@ -137,7 +98,7 @@ module HammerCLIForeman
137
98
  command_name "set-default-template"
138
99
  resource :os_default_templates
139
100
 
140
- option "--id", "OS ID", _("operatingsystem id"), :required => true
101
+ option "--id", "OS ID", _("operatingsystem id"), :required => true, :referenced_resource => 'operatingsystem'
141
102
  option "--config-template-id", "TPL ID", _("config template id to be set"), :required => true
142
103
 
143
104
 
@@ -203,7 +164,7 @@ module HammerCLIForeman
203
164
  command_name "delete-default-template"
204
165
  resource :os_default_templates
205
166
 
206
- option "--id", "OS ID", _("operatingsystem id"), :required => true
167
+ option "--id", "OS ID", _("operatingsystem id"), :required => true, :referenced_resource => 'operatingsystem'
207
168
  option "--type", "TPL TYPE", _("Type of the config template"), :required => true
208
169
 
209
170
  success_message _("Default template deleted")
@@ -81,6 +81,11 @@ module HammerCLIForeman
81
81
  builders << DependentSearchablesOptionBuilder.new(dep_resource, @searchables)
82
82
  end
83
83
 
84
+ IdArrayParamsFilter.new(:only_required => false).for_action(action).each do |p|
85
+ resource = HammerCLIForeman.param_to_resource(p.name)
86
+ builders << DependentSearchablesArrayOptionBuilder.new(resource, @searchables) unless resource.nil?
87
+ end
88
+
84
89
  builders
85
90
  end
86
91
 
@@ -145,6 +150,10 @@ module HammerCLIForeman
145
150
 
146
151
  protected
147
152
 
153
+ def option(*args)
154
+ HammerCLI::Apipie::OptionDefinition.new(*args)
155
+ end
156
+
148
157
  def description(param_name, action_name)
149
158
  return " " unless @resource.has_action? action_name
150
159
 
@@ -172,7 +181,8 @@ module HammerCLIForeman
172
181
  option(
173
182
  optionamize("--#{s.name}"),
174
183
  s.name.upcase,
175
- s.description
184
+ s.description,
185
+ :referenced_resource => @resource.singular_name
176
186
  )
177
187
  end
178
188
  end
@@ -211,7 +221,8 @@ module HammerCLIForeman
211
221
  optionamize("--#{aliased_name}"),
212
222
  "#{aliased_name}_#{first.name}".upcase,
213
223
  first.description || " ",
214
- :attribute_name => HammerCLI.option_accessor_name("#{resource_name}_#{first.name}")
224
+ :attribute_name => HammerCLI.option_accessor_name("#{resource_name}_#{first.name}"),
225
+ :referenced_resource => resource.singular_name
215
226
  )
216
227
 
217
228
  # Other options are named by the resource plus the searchable name
@@ -221,7 +232,8 @@ module HammerCLIForeman
221
232
  optionamize("--#{aliased_name}-#{s.name}"),
222
233
  "#{aliased_name}_#{s.name}".upcase,
223
234
  s.description || " ",
224
- :attribute_name => HammerCLI.option_accessor_name("#{resource_name}_#{s.name}")
235
+ :attribute_name => HammerCLI.option_accessor_name("#{resource_name}_#{s.name}"),
236
+ :referenced_resource => resource.singular_name
225
237
  )
226
238
  end
227
239
  end
@@ -230,7 +242,8 @@ module HammerCLIForeman
230
242
  optionamize("--#{aliased_name}-id"),
231
243
  "#{aliased_name}_id".upcase,
232
244
  description("id", :show),
233
- :attribute_name => HammerCLI.option_accessor_name("#{resource_name}_id")
245
+ :attribute_name => HammerCLI.option_accessor_name("#{resource_name}_id"),
246
+ :referenced_resource => resource.singular_name
234
247
  )
235
248
  options
236
249
  end
@@ -241,6 +254,52 @@ module HammerCLIForeman
241
254
 
242
255
  end
243
256
 
257
+
258
+
259
+ class DependentSearchablesArrayOptionBuilder < DependentSearchablesOptionBuilder
260
+
261
+
262
+ def dependent_options(resource, resource_name_map)
263
+ options = []
264
+ searchables = @searchables.for(resource)
265
+ resource_name = resource.singular_name
266
+
267
+ aliased_name = aliased(resource_name, resource_name_map)
268
+ aliased_plural_name = aliased(resource.name, resource_name_map)
269
+
270
+ unless searchables.empty?
271
+ first = searchables[0]
272
+ remaining = searchables[1..-1] || []
273
+
274
+ # First option is named by the resource
275
+ # Eg. --organizations with accessor option_organization_names
276
+ options << option(
277
+ optionamize("--#{aliased_plural_name}"),
278
+ "#{aliased_name}_#{first.plural_name}".upcase,
279
+ " ",
280
+ :attribute_name => HammerCLI.option_accessor_name("#{resource_name}_#{first.plural_name}"),
281
+ :format => HammerCLI::Options::Normalizers::List.new,
282
+ :referenced_resource => resource.singular_name
283
+ )
284
+
285
+ # Other options are named by the resource plus the searchable name
286
+ # Eg. --organization-labels with accessor option_organization_labels
287
+ remaining.each do |s|
288
+ options << option(
289
+ optionamize("--#{aliased_name}-#{s.plural_name}"),
290
+ "#{aliased_name}_#{s.plural_name}".upcase,
291
+ " ",
292
+ :attribute_name => HammerCLI.option_accessor_name("#{resource_name}_#{s.plural_name}"),
293
+ :format => HammerCLI::Options::Normalizers::List.new,
294
+ :referenced_resource => resource.singular_name
295
+ )
296
+ end
297
+ end
298
+
299
+ options
300
+ end
301
+ end
302
+
244
303
  class SearchablesUpdateOptionBuilder < SearchablesAbstractOptionBuilder
245
304
 
246
305
  def initialize(resource, searchables)
@@ -276,7 +335,7 @@ module HammerCLIForeman
276
335
 
277
336
  def build(builder_params={})
278
337
  [
279
- option("--id", "ID", description("id", :show))
338
+ option("--id", "ID", description("id", :show), :referenced_resource => @resource.singular_name)
280
339
  ]
281
340
  end
282
341