hammer_cli_foreman 0.1.4 → 0.2.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.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/config/foreman.yml +16 -0
  3. data/doc/host_create.md +102 -54
  4. data/doc/release_notes.md +20 -0
  5. data/lib/hammer_cli_foreman.rb +8 -0
  6. data/lib/hammer_cli_foreman/commands.rb +33 -9
  7. data/lib/hammer_cli_foreman/compute_resource.rb +13 -2
  8. data/lib/hammer_cli_foreman/domain.rb +24 -1
  9. data/lib/hammer_cli_foreman/environment.rb +1 -2
  10. data/lib/hammer_cli_foreman/host.rb +131 -73
  11. data/lib/hammer_cli_foreman/hostgroup.rb +18 -8
  12. data/lib/hammer_cli_foreman/i18n.rb +2 -6
  13. data/lib/hammer_cli_foreman/id_resolver.rb +41 -6
  14. data/lib/hammer_cli_foreman/interface.rb +165 -0
  15. data/lib/hammer_cli_foreman/output/fields.rb +7 -0
  16. data/lib/hammer_cli_foreman/output/formatters.rb +3 -5
  17. data/lib/hammer_cli_foreman/puppet_class.rb +16 -2
  18. data/lib/hammer_cli_foreman/settings.rb +37 -0
  19. data/lib/hammer_cli_foreman/smart_class_parameter.rb +75 -11
  20. data/lib/hammer_cli_foreman/smart_variable.rb +146 -0
  21. data/lib/hammer_cli_foreman/user.rb +9 -3
  22. data/lib/hammer_cli_foreman/version.rb +1 -1
  23. data/locale/Makefile +9 -17
  24. data/locale/de/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  25. data/locale/de/hammer-cli-foreman.edit.po +2403 -0
  26. data/locale/de/hammer-cli-foreman.po +302 -355
  27. data/locale/de/hammer-cli-foreman.po.time_stamp +0 -0
  28. data/locale/en/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  29. data/locale/en/hammer-cli-foreman.edit.po +2260 -0
  30. data/locale/en/hammer-cli-foreman.po +946 -823
  31. data/locale/en/hammer-cli-foreman.po.time_stamp +0 -0
  32. data/locale/en_GB/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  33. data/locale/en_GB/hammer-cli-foreman.edit.po +2267 -0
  34. data/locale/en_GB/hammer-cli-foreman.po +297 -351
  35. data/locale/en_GB/hammer-cli-foreman.po.time_stamp +0 -0
  36. data/locale/es/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  37. data/locale/es/hammer-cli-foreman.edit.po +2427 -0
  38. data/locale/es/hammer-cli-foreman.po +301 -354
  39. data/locale/es/hammer-cli-foreman.po.time_stamp +0 -0
  40. data/locale/fr/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  41. data/locale/fr/hammer-cli-foreman.edit.po +2427 -0
  42. data/locale/fr/hammer-cli-foreman.po +299 -353
  43. data/locale/fr/hammer-cli-foreman.po.time_stamp +0 -0
  44. data/locale/hammer-cli-foreman.pot +1413 -1112
  45. data/locale/it/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  46. data/locale/it/hammer-cli-foreman.edit.po +2402 -0
  47. data/locale/it/hammer-cli-foreman.po +299 -353
  48. data/locale/it/hammer-cli-foreman.po.time_stamp +0 -0
  49. data/locale/ja/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  50. data/locale/ja/hammer-cli-foreman.edit.po +2401 -0
  51. data/locale/ja/hammer-cli-foreman.po +338 -391
  52. data/locale/ja/hammer-cli-foreman.po.time_stamp +0 -0
  53. data/locale/ko/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  54. data/locale/ko/hammer-cli-foreman.edit.po +2401 -0
  55. data/locale/ko/hammer-cli-foreman.po +299 -353
  56. data/locale/ko/hammer-cli-foreman.po.time_stamp +0 -0
  57. data/locale/pt_BR/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  58. data/locale/pt_BR/hammer-cli-foreman.edit.po +2417 -0
  59. data/locale/pt_BR/hammer-cli-foreman.po +312 -365
  60. data/locale/pt_BR/hammer-cli-foreman.po.time_stamp +0 -0
  61. data/locale/ru/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  62. data/locale/ru/hammer-cli-foreman.edit.po +2401 -0
  63. data/locale/ru/hammer-cli-foreman.po +300 -354
  64. data/locale/ru/hammer-cli-foreman.po.time_stamp +0 -0
  65. data/locale/zh_CN/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  66. data/locale/zh_CN/hammer-cli-foreman.edit.po +2400 -0
  67. data/locale/zh_CN/hammer-cli-foreman.po +299 -353
  68. data/locale/zh_CN/hammer-cli-foreman.po.time_stamp +0 -0
  69. data/locale/zh_TW/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  70. data/locale/zh_TW/hammer-cli-foreman.edit.po +2400 -0
  71. data/locale/zh_TW/hammer-cli-foreman.po +299 -353
  72. data/locale/zh_TW/hammer-cli-foreman.po.time_stamp +0 -0
  73. data/test/unit/apipie_resource_mock.rb +7 -0
  74. data/test/unit/commands_test.rb +42 -0
  75. data/test/unit/data/1.7/foreman_api.json +1 -0
  76. data/test/unit/dependency_resolver_test.rb +4 -2
  77. data/test/unit/environment_test.rb +2 -2
  78. data/test/unit/host_test.rb +50 -27
  79. data/test/unit/hostgroup_test.rb +19 -3
  80. data/test/unit/media_test.rb +2 -2
  81. data/test/unit/puppet_class_test.rb +17 -2
  82. data/test/unit/smart_class_parameter_test.rb +26 -2
  83. data/test/unit/smart_variable_test.rb +134 -0
  84. data/test/unit/test_helper.rb +1 -1
  85. metadata +36 -4
@@ -54,8 +54,7 @@ module HammerCLIForeman
54
54
  end
55
55
 
56
56
  class SCParamsCommand < HammerCLIForeman::SmartClassParametersList
57
- parent_resource :environments
58
- build_options
57
+ build_options_for :environments
59
58
  end
60
59
 
61
60
 
@@ -1,6 +1,9 @@
1
+ require 'hammer_cli_foreman/fact'
1
2
  require 'hammer_cli_foreman/report'
2
3
  require 'hammer_cli_foreman/puppet_class'
3
4
  require 'hammer_cli_foreman/smart_class_parameter'
5
+ require 'hammer_cli_foreman/smart_variable'
6
+ require 'hammer_cli_foreman/interface'
4
7
 
5
8
  require 'highline/import'
6
9
 
@@ -52,7 +55,7 @@ module HammerCLIForeman
52
55
  :provision_method, :capabilities, :flavour_ref, :image_ref, :start,
53
56
  :network, :cpus, :memory, :provider, :type, :tenant_id, :image_id,
54
57
  # ----------------------------------------------------------------------------------
55
- :puppet_class_ids, :host_parameters_attributes]
58
+ :puppet_class_ids, :host_parameters_attributes, :interfaces_attributes]
56
59
  end
57
60
 
58
61
  def self.ask_password
@@ -62,29 +65,37 @@ module HammerCLIForeman
62
65
 
63
66
  def request_params
64
67
  params = super
65
- params['host']['owner_id'] ||= get_resource_id(HammerCLIForeman.foreman_resource(:users), :required => false, :scoped => true)
66
- params['host']['puppet_proxy_id'] ||= proxy_id(option_puppet_proxy)
67
- params['host']['puppet_ca_proxy_id'] ||= proxy_id(option_puppet_ca_proxy)
68
- params['host']['puppetclass_ids'] = option_puppetclass_ids || puppet_class_ids(option_puppet_classes)
68
+
69
+ owner_id = get_resource_id(HammerCLIForeman.foreman_resource(:users), :required => false, :scoped => true)
70
+ params['host']['owner_id'] ||= owner_id unless owner_id.nil?
71
+
72
+ puppet_proxy_id = proxy_id(option_puppet_proxy)
73
+ params['host']['puppet_proxy_id'] ||= puppet_proxy_id unless puppet_proxy_id.nil?
74
+
75
+ puppet_ca_proxy_id = proxy_id(option_puppet_ca_proxy)
76
+ params['host']['puppet_ca_proxy_id'] ||= puppet_ca_proxy_id unless puppet_ca_proxy_id.nil?
77
+
78
+ puppetclass_ids = option_puppetclass_ids || puppet_class_ids(option_puppet_classes)
79
+ params['host']['puppetclass_ids'] = puppetclass_ids unless puppetclass_ids.nil?
69
80
 
70
81
  params['host']['build'] = option_build unless option_build.nil?
71
82
  params['host']['managed'] = option_managed unless option_managed.nil?
72
83
  params['host']['enabled'] = option_enabled unless option_enabled.nil?
84
+
73
85
  params['host']['host_parameters_attributes'] = parameter_attributes
74
86
  params['host']['compute_attributes'] = option_compute_attributes || {}
75
87
  params['host']['compute_attributes']['volumes_attributes'] = nested_attributes(option_volume_list)
76
- if option_compute_resource_id
77
- params['host']['compute_attributes']['interfaces_attributes'] = nested_attributes(option_interface_list)
78
- params['host']['compute_attributes']['nics_attributes'] = nested_attributes(option_interface_list)
79
- else
80
- params['host']['interfaces_attributes'] = nested_attributes(option_interface_list)
81
- end
88
+ params['host']['interfaces_attributes'] = interfaces_attributes
89
+
90
+ # check primary and provision interfaces, only for create
91
+ check_mandatory_interfaces(params['host']['interfaces_attributes']) if params['id'].nil?
82
92
 
83
93
  params['host']['root_pass'] = option_root_password unless option_root_password.nil?
84
94
 
85
95
  if option_ask_root_password
86
96
  params['host']['root_pass'] = HammerCLIForeman::CommonHostUpdateOptions::ask_password
87
97
  end
98
+
88
99
  params
89
100
  end
90
101
 
@@ -115,6 +126,30 @@ module HammerCLIForeman
115
126
  nested_hash
116
127
  end
117
128
 
129
+ def interfaces_attributes
130
+ # move each attribute starting with "compute_" to compute_attributes
131
+ nic_list = option_interface_list.collect do |nic|
132
+ compute_attributes = {}
133
+ nic.keys.each do |key|
134
+ if key.start_with? 'compute_'
135
+ compute_attributes[key.gsub('compute_', '')] = nic.delete(key)
136
+ end
137
+ end
138
+ nic['compute_attributes'] = compute_attributes unless compute_attributes.empty?
139
+ nic
140
+ end
141
+ nested_attributes(nic_list)
142
+ end
143
+
144
+ def check_mandatory_interfaces(nics)
145
+ unless nics.any? { |key, nic| nic['primary'] == 'true' }
146
+ signal_usage_error _('At least one interface must be set as primary')
147
+ end
148
+ unless nics.any? { |key, nic| nic['provision'] == 'true' }
149
+ signal_usage_error _('At least one interface must be set as provision')
150
+ end
151
+ end
152
+
118
153
  end
119
154
 
120
155
 
@@ -140,15 +175,18 @@ module HammerCLIForeman
140
175
  class InfoCommand < HammerCLIForeman::InfoCommand
141
176
 
142
177
  def extend_data(host)
178
+ host['compute_resource_name'] ||= _('Bare Metal')
179
+ host['image_file'] = nil if host['image_file'].empty?
180
+ host['interfaces'] = host['interfaces'].map do |nic|
181
+ nic['_type'] = HammerCLIForeman::Interface.format_type(nic)
182
+ nic
183
+ end if host['interfaces']
184
+
143
185
  # FIXME: temporary fetching parameters until the api gets fixed.
144
186
  # Noramlly they should come in the host's json.
145
187
  # http://projects.theforeman.org/issues/5820
146
- host["parameters"] = get_parameters(host["id"])
188
+ host['parameters'] = get_parameters(host["id"])
147
189
 
148
- host["_bmc_interfaces"] =
149
- host["interfaces"].select{|intfs| intfs["type"] == "Nic::BMC" } rescue []
150
- host["_managed_interfaces"] =
151
- host["interfaces"].select{|intfs| intfs["type"] == "Nic::Managed" } rescue []
152
190
  host
153
191
  end
154
192
 
@@ -157,70 +195,73 @@ module HammerCLIForeman
157
195
  HammerCLIForeman.collection_to_common_format(params)
158
196
  end
159
197
 
160
- output ListCommand.output_definition do
161
- field :uuid, _("UUID")
162
- field :certname, _("Cert name")
163
198
 
199
+ output do
200
+ field :id, _("Id")
201
+ field :uuid, _("UUID"), Fields::Field, :hide_blank => true
202
+ field :name, _("Name")
203
+ field nil, _("Organization"), Fields::SingleReference, :key => :organization, :hide_blank => true
204
+ field nil, _("Location"), Fields::SingleReference, :key => :location, :hide_blank => true
205
+ field nil, _("Host Group"), Fields::SingleReference, :key => :hostgroup
206
+ field nil, _("Compute Resource"), Fields::SingleReference, :key => :compute_resource
207
+ field nil, _("Compute Profile"), Fields::SingleReference, :key => :compute_profile, :hide_blank => true
164
208
  field nil, _("Environment"), Fields::SingleReference, :key => :environment
165
-
166
- field :managed, _("Managed")
167
- field :enabled, _("Enabled")
168
- field :build, _("Build")
169
-
170
- field :use_image, _("Use image")
171
- field :disk, _("Disk")
172
- field :image_file, _("Image file")
173
-
174
- field :sp_name, _("SP Name")
175
- field :sp_ip, _("SP IP")
176
- field :sp_mac, _("SP MAC")
177
-
178
- field nil, _("SP Subnet"), Fields::SingleReference, :key => :sp_subnet
209
+ field :puppet_ca_proxy_id, _("Puppet CA Id")
210
+ field :puppet_proxy_id, _("Puppet Master Id")
211
+ field :certname, _("Cert name")
212
+ field :managed, _("Managed"), Fields::Boolean
179
213
 
180
214
  field :installed_at, _("Installed at"), Fields::Date
181
215
  field :last_report, _("Last report"), Fields::Date
182
216
 
183
- field :puppet_ca_proxy_id, _("Puppet CA Proxy Id")
184
- field nil, _("Medium"), Fields::SingleReference, :key => :medium
185
- field nil, _("Model"), Fields::SingleReference, :key => :model
186
- field :owner_id, _("Owner Id")
187
- field nil, _("Subnet"), Fields::SingleReference, :key => :subnet
188
- field nil, _("Domain"), Fields::SingleReference, :key => :domain
189
- field :puppet_proxy_id, _("Puppet Proxy Id")
190
- field :owner_type, _("Owner Type")
191
- field nil, _("Partition Table"), Fields::SingleReference, :key => :ptable
192
- field nil, _("Architecture"), Fields::SingleReference, :key => :architecture
193
- field nil, _("Image"), Fields::SingleReference, :key => :image
194
- field nil, _("Compute Resource"), Fields::SingleReference, :key => :compute_resource
195
-
196
- field :comment, _("Comment")
197
-
198
- collection :_bmc_interfaces, _("BMC Network Interfaces"), :hide_blank => true do
199
- field :id, _("Id")
200
- field :name, _("Name")
217
+ label _("Network") do
201
218
  field :ip, _("IP")
202
219
  field :mac, _("MAC")
203
- field :domain_id, _("Domain Id")
204
- field :domain_name, _("Domain Name")
205
- field :subnet_id, _("Subnet Id")
206
- field :subnet_name, _("Subnet Name")
207
- field :username, _("BMC Username")
208
- field :password, _("BMC Password")
220
+ field nil, _("Subnet"), Fields::SingleReference, :key => :subnet
221
+ field nil, _("Domain"), Fields::SingleReference, :key => :domain
222
+ field nil, _("Service provider"), Fields::Label, :hide_blank => true do
223
+ field :sp_name, _("SP Name"), Fields::Field, :hide_blank => true
224
+ field :sp_ip, _("SP IP"), Fields::Field, :hide_blank => true
225
+ field :sp_mac, _("SP MAC"), Fields::Field, :hide_blank => true
226
+ field nil, _("SP Subnet"), Fields::SingleReference, :key => :sp_subnet, :hide_blank => true
227
+ end
209
228
  end
210
229
 
211
- collection :_managed_interfaces, _("Managed Network Interfaces"), :hide_blank => true do
212
- field :id, _("Id")
213
- field :name, _("Name")
214
- field :ip, _("IP")
215
- field :mac, _("MAC")
216
- field :domain_id, _("Domain Id")
217
- field :domain_name, _("Domain Name")
218
- field :subnet_id, _("Subnet Id")
219
- field :subnet_name, _("Subnet Name")
230
+ collection :interfaces, _("Network interfaces") do
231
+ field :id, _('Id')
232
+ field :identifier, _('Identifier')
233
+ field :_type, _('Type')
234
+ field :mac, _('MAC address')
235
+ field :ip, _('IP address')
236
+ field :fqdn, _('FQDN')
237
+ end
238
+
239
+ label _("Operating system") do
240
+ field nil, _("Architecture"), Fields::SingleReference, :key => :architecture
241
+ field nil, _("Operating System"), Fields::SingleReference, :key => :operatingsystem
242
+ # provision_method
243
+ # for network based
244
+ field :build, _("Build"), Fields::Boolean
245
+ field nil, _("Medium"), Fields::SingleReference, :key => :medium
246
+ field nil, _("Partition Table"), Fields::SingleReference, :key => :ptable
247
+ field :disk, _("Custom partition table"), Fields::LongText
248
+ # image
249
+ # for image based
250
+ field nil, _("Image"), Fields::SingleReference, :key => :image, :hide_blank => true
251
+ field :image_file, _("Image file"), Fields::Field, :hide_blank => true
252
+ field :use_image, _("Use image"), Fields::Boolean, :hide_blank => true
220
253
  end
221
254
 
222
255
  HammerCLIForeman::References.parameters(self)
223
- HammerCLIForeman::References.timestamps(self)
256
+
257
+ # additional info
258
+ label _("Additional info") do
259
+ field :owner_id, _("Owner Id")
260
+ field :owner_type, _("Owner Type")
261
+ field :enabled, _("Enabled"), Fields::Boolean
262
+ field nil, _("Model"), Fields::SingleReference, :key => :model, :hide_blank => true
263
+ field :comment, _("Comment"), Fields::LongText
264
+ end
224
265
  end
225
266
 
226
267
  build_options
@@ -294,10 +335,9 @@ module HammerCLIForeman
294
335
  end
295
336
 
296
337
 
297
- class PuppetClassesCommand < HammerCLIForeman::AssociatedResourceListCommand
338
+ class PuppetClassesCommand < HammerCLIForeman::ListCommand
298
339
  command_name "puppet-classes"
299
- resource :puppetclasses, :index
300
- parent_resource :hosts
340
+ resource :puppetclasses
301
341
 
302
342
  output HammerCLIForeman::PuppetClass::ListCommand.output_definition
303
343
 
@@ -305,7 +345,10 @@ module HammerCLIForeman
305
345
  HammerCLIForeman::PuppetClass::ListCommand.unhash_classes(super)
306
346
  end
307
347
 
308
- build_options :without => [:host_id, :hostgroup_id, :environment_id]
348
+ build_options do |o|
349
+ o.without(:hostgroup_id, :environment_id)
350
+ o.expand.only(:hosts)
351
+ end
309
352
  end
310
353
 
311
354
 
@@ -462,11 +505,26 @@ module HammerCLIForeman
462
505
  end
463
506
 
464
507
  class SCParamsCommand < HammerCLIForeman::SmartClassParametersList
465
- parent_resource :hosts
466
- build_options
508
+ build_options_for :hosts
509
+
510
+ def validate_options
511
+ super
512
+ validator.any(:option_host_name, :option_host_id).required
513
+ end
514
+ end
515
+
516
+ class SmartVariablesCommand < HammerCLIForeman::SmartVariablesList
517
+ build_options_for :hosts
518
+
519
+ def validate_options
520
+ super
521
+ validator.any(:option_host_name, :option_host_id).required
522
+ end
467
523
  end
468
524
 
469
525
  autoload_subcommands
526
+
527
+ subcommand 'interface', HammerCLIForeman::Interface.desc, HammerCLIForeman::Interface
470
528
  end
471
529
 
472
530
  end
@@ -1,4 +1,5 @@
1
1
  require 'hammer_cli_foreman/smart_class_parameter'
2
+ require 'hammer_cli_foreman/smart_variable'
2
3
  require 'hammer_cli_foreman/puppet_class'
3
4
 
4
5
  module HammerCLIForeman
@@ -115,13 +116,10 @@ module HammerCLIForeman
115
116
  HammerCLIForeman::PuppetClass::ListCommand.unhash_classes(super)
116
117
  end
117
118
 
118
- def request_params
119
- params = super
120
- params['hostgroup_id'] = get_identifier
121
- params
119
+ build_options do |o|
120
+ o.without(:host_id, :environment_id)
121
+ o.expand.only(:hostgroups)
122
122
  end
123
-
124
- build_options
125
123
  end
126
124
 
127
125
 
@@ -145,10 +143,22 @@ module HammerCLIForeman
145
143
  end
146
144
 
147
145
  class SCParamsCommand < HammerCLIForeman::SmartClassParametersList
148
- parent_resource :hostgroups
149
- build_options
146
+ build_options_for :hostgroups
147
+
148
+ def validate_options
149
+ super
150
+ validator.any(:option_hostgroup_name, :option_hostgroup_id).required
151
+ end
150
152
  end
151
153
 
154
+ class SmartVariablesCommand < HammerCLIForeman::SmartVariablesList
155
+ build_options_for :hostgroups
156
+
157
+ def validate_options
158
+ super
159
+ validator.any(:option_hostgroup_name, :option_hostgroup_id).required
160
+ end
161
+ end
152
162
 
153
163
  autoload_subcommands
154
164
  end
@@ -24,14 +24,10 @@ module HammerCLIForeman
24
24
  '/usr/share/locale'
25
25
  end
26
26
 
27
- def domain_name
28
- "#{super}@system"
29
- end
30
-
31
27
  end
32
28
 
33
29
  end
34
30
  end
35
31
 
36
- HammerCLI::I18n.add_domain(HammerCLIForeman::I18n::LocaleDomain.new)
37
- HammerCLI::I18n.add_domain(HammerCLIForeman::I18n::SystemLocaleDomain.new)
32
+ domain = [HammerCLIForeman::I18n::LocaleDomain.new, HammerCLIForeman::I18n::SystemLocaleDomain.new].find { |d| d.available? }
33
+ HammerCLI::I18n.add_domain(domain) if domain
@@ -40,23 +40,27 @@ module HammerCLIForeman
40
40
  :fact_value => [],
41
41
  :filter => [],
42
42
  :host => [ s_name(_("Host name")) ],
43
- :hostgroup => [ s_name(_("Hostgroup name")) ],
43
+ :hostgroup => [ s_name(_("Hostgroup name")), s("title", _("Hostgroup title"),:editable => false) ],
44
44
  # :image => [],
45
+ :interface => [],
45
46
  :location => [ s_name(_("Location name")) ],
46
47
  :medium => [ s_name(_("Medium name")) ],
47
48
  :model => [ s_name(_("Model name")) ],
48
49
  :organization => [ s_name(_("Organization name")) ],
49
50
  :operatingsystem => [ s("title", _("Operating system title"), :editable => false) ],
51
+ :override_value => [],
50
52
  :ptable => [ s_name(_("Partition table name")) ],
51
53
  :proxy => [ s_name(_("Proxy name")) ],
52
54
  :puppetclass => [ s_name(_("Puppet class name")) ],
53
55
  :report => [ s_name(_("Report name")) ],
54
56
  :role => [ s_name(_("User role name")) ],
57
+ :setting => [ s_name(_("Setting name"), :editable => false) ],
55
58
  :subnet => [ s_name(_("Subnet name")) ],
56
59
  :template => [],
57
60
  :user => [ s("login", _("User's login to search by")) ],
58
61
  :common_parameter => [ s_name(_("Common parameter name")) ],
59
- :smart_class_parameter => [ s_name(_("Smart class parameter name")) ]
62
+ :smart_class_parameter => [ s_name(_("Smart class parameter name")) ],
63
+ :smart_variable => [ s_name(_("Smart variable name")) ]
60
64
  }
61
65
  DEFAULT_SEARCHABLES = [ s_name(_("Name to search by")) ]
62
66
 
@@ -127,11 +131,11 @@ module HammerCLIForeman
127
131
 
128
132
  self.class.send(:define_method, method_name) do |options|
129
133
  get_id(resource.name, options)
130
- end unless respond_to?(method_name)
134
+ end unless respond_to?(method_name, true)
131
135
 
132
136
  self.class.send(:define_method, plural_method_name) do |options|
133
137
  get_ids(resource.name, options)
134
- end unless respond_to?(plural_method_name)
138
+ end unless respond_to?(plural_method_name, true)
135
139
  end
136
140
  end
137
141
 
@@ -151,11 +155,16 @@ module HammerCLIForeman
151
155
  end
152
156
 
153
157
  def find_resource(resource_name, options)
158
+ results = find_resource_raw(resource_name, options)
154
159
  resource = @api.resource(resource_name)
155
- results = resolved_call(resource_name, :index, options)
156
160
  pick_result(results, resource)
157
161
  end
158
162
 
163
+ def find_resource_raw(resource_name, options)
164
+ resolved_call(resource_name, :index, options)
165
+ end
166
+
167
+
159
168
  def resolved_call(resource_name, action_name, options)
160
169
  resource = @api.resource(resource_name)
161
170
  action = resource.action(action_name)
@@ -195,7 +204,7 @@ module HammerCLIForeman
195
204
 
196
205
  def search_options(options, resource)
197
206
  method = "create_#{resource.name}_search_options"
198
- search_options = if respond_to?(method)
207
+ search_options = if respond_to?(method, true)
199
208
  send(method, options)
200
209
  else
201
210
  create_search_options(options, resource)
@@ -221,6 +230,32 @@ module HammerCLIForeman
221
230
  0
222
231
  end
223
232
 
233
+ # puppet class search results are in non-standard format
234
+ # and needs to be un-hashed first
235
+ def puppetclass_id(options)
236
+ return options[HammerCLI.option_accessor_name("id")] if options[HammerCLI.option_accessor_name("id")]
237
+ resource = @api.resource(:puppetclasses)
238
+ results = find_resource_raw(:puppetclasses, options)
239
+ require('hammer_cli_foreman/puppet_class')
240
+ results = HammerCLIForeman::PuppetClass::ListCommand.unhash_classes(results)
241
+ pick_result(results, resource)['id']
242
+ end
243
+
244
+ def create_smart_class_parameters_search_options(options)
245
+ search_options = {}
246
+ value = options[HammerCLI.option_accessor_name('name')]
247
+ search_options[:search] = "key = \"#{value}\""
248
+ search_options[:puppetclass_id] = puppetclass_id(scoped_options("puppetclass", options))
249
+ search_options
250
+ end
251
+
252
+ def create_smart_variables_search_options(options)
253
+ search_options = {}
254
+ value = options[HammerCLI.option_accessor_name('name')]
255
+ search_options[:search] = "key = \"#{value}\""
256
+ search_options
257
+ end
258
+
224
259
  def create_search_options(options, resource)
225
260
  searchables(resource).each do |s|
226
261
  value = options[HammerCLI.option_accessor_name(s.name.to_s)]