kanrisuru 0.4.1 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 32ef1fec88bcaf4f6be97051f73a7b2056a18bde09c782044efa79c5e7f322e0
4
- data.tar.gz: bf6ec2b44a5c7967d3a836421fe1ce787d4c7afe5a6f1665fce987a7721a441f
3
+ metadata.gz: 9e7d36fe867d1049287c11431cb348332d61b0a80e16163fa6a799fcc0fc26bb
4
+ data.tar.gz: 0fef10f6eb28e176839f8b3a2995416fdb4c88fbfa8b4e24e2c36d719871237e
5
5
  SHA512:
6
- metadata.gz: 0ba1a8a90c07f1e783b43f0f5ddcf7280b895ab48a3badc889006591474ce5250ed48f8479a3f302392a6a489b27b202703ecda0fa58cb7e4c9b1610edfb7941
7
- data.tar.gz: 0a81ae9c65d740212c9cac4024ac8fc1b5a1edb3b82a3b72d3f22f27352edf1bf0bea2e3a7d72f046d7db635fd920f833b0c904621a7b0dac1af3807bd1856da
6
+ metadata.gz: a96f6c7a0219c0ced7c87faa5923e2c8842dadd429787033885e89444af63943f41f7da88622224573d34940c8b5b3eb44c7fa324d20e146f9bae3e172c8b9b0
7
+ data.tar.gz: c9cd28b4caf3daba48127d522a0f3f08ac925ee40c058320267cced2b0461b223378d314d48d248e2c614dca82533e12adba761c76e96b6bce976a3021700a5f
data/.rubocop.yml CHANGED
@@ -7,6 +7,19 @@ AllCops:
7
7
  Style/Documentation:
8
8
  Enabled: false
9
9
 
10
+ Style/WordArray:
11
+ Exclude:
12
+ - lib/kanrisuru/util/dmi_type.rb
13
+
14
+ Lint/SymbolConversion:
15
+ Exclude:
16
+ - lib/kanrisuru/util/dmi_type.rb
17
+
18
+ Naming/InclusiveLanguage:
19
+ Exclude:
20
+ - lib/kanrisuru/core/dmi.rb
21
+ - spec/unit/core/dmi_spec.rb
22
+
10
23
  Metrics/AbcSize:
11
24
  Enabled: false
12
25
 
@@ -16,6 +16,8 @@ require_relative 'core/ip'
16
16
  require_relative 'core/socket'
17
17
  require_relative 'core/apt'
18
18
  require_relative 'core/yum'
19
+ require_relative 'core/zypper'
20
+ require_relative 'core/dmi'
19
21
 
20
22
  module Kanrisuru
21
23
  module Remote
@@ -36,6 +38,8 @@ module Kanrisuru
36
38
  os_include Kanrisuru::Core::Socket
37
39
  os_include Kanrisuru::Core::Apt
38
40
  os_include Kanrisuru::Core::Yum
41
+ os_include Kanrisuru::Core::Zypper
42
+ os_include Kanrisuru::Core::Dmi
39
43
  end
40
44
 
41
45
  class Cluster
@@ -54,6 +58,8 @@ module Kanrisuru
54
58
  os_collection Kanrisuru::Core::Socket
55
59
  os_collection Kanrisuru::Core::Apt
56
60
  os_collection Kanrisuru::Core::Yum
61
+ os_collection Kanrisuru::Core::Zypper
62
+ os_collection Kanrisuru::Core::Dmi
57
63
  end
58
64
  end
59
65
  end
@@ -7,9 +7,9 @@ module Kanrisuru
7
7
 
8
8
  os_define :debian, :apt
9
9
 
10
- AptSource = Struct.new(:url, :dist, :architecture)
11
- AptPackageOverview = Struct.new(:package, :version, :suites, :architecture, :installed, :upgradeable, :automatic)
12
- AptPackageDetail = Struct.new(
10
+ Source = Struct.new(:url, :dist, :architecture)
11
+ PackageOverview = Struct.new(:package, :version, :suites, :architecture, :installed, :upgradeable, :automatic)
12
+ PackageDetail = Struct.new(
13
13
  :package,
14
14
  :version,
15
15
  :priority,
@@ -224,7 +224,7 @@ module Kanrisuru
224
224
  rows << current_row
225
225
  end
226
226
 
227
- current_row = AptPackageDetail.new
227
+ current_row = PackageDetail.new
228
228
  current_row.package = extract_single_line(line)
229
229
  when /^Version:/
230
230
  current_row.version = extract_single_line(line)
@@ -293,7 +293,7 @@ module Kanrisuru
293
293
 
294
294
  def parse_apt_sources(string)
295
295
  url, dist, architecture, = string.split
296
- AptSource.new(url, dist, architecture)
296
+ Source.new(url, dist, architecture)
297
297
  end
298
298
 
299
299
  def parse_apt_line(line)
@@ -317,7 +317,7 @@ module Kanrisuru
317
317
  automatic = values[3].include?('automatic')
318
318
  end
319
319
 
320
- AptPackageOverview.new(package, version, suites, architecture, installed, upgradeable, automatic)
320
+ PackageOverview.new(package, version, suites, architecture, installed, upgradeable, automatic)
321
321
  end
322
322
  end
323
323
  end
@@ -0,0 +1,533 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kanrisuru
4
+ module Core
5
+ module Dmi
6
+ extend OsPackage::Define
7
+
8
+ os_define :linux, :dmi
9
+
10
+ ## Type 0: BIOS Information
11
+ BIOS = Struct.new(
12
+ :dmi_type, :dmi_handle, :dmi_size,
13
+ :vendor, :version, :release_date, :address, :runtime_size,
14
+ :rom_size, :characteristics, :bios_revision, :firmware_revision
15
+ )
16
+
17
+ ## Type 1: Sytem Information
18
+ System = Struct.new(
19
+ :dmi_type, :dmi_handle, :dmi_size,
20
+ :manufacturer, :product_name, :version, :serial_number,
21
+ :uuid, :wake_up_type, :sku_number, :family
22
+ )
23
+
24
+ ## Type 2: Baseboard Information
25
+ Baseboard = Struct.new(
26
+ :dmi_type, :dmi_handle, :dmi_size,
27
+ :type, :manufacturer, :product_name, :version, :serial_number, :asset_tag,
28
+ :features, :location_in_chassis, :chassis_handle, :contained_object_handles
29
+ )
30
+
31
+ ## Type 3: Chassis Information
32
+ Chassis = Struct.new(
33
+ :dmi_type, :dmi_handle, :dmi_size,
34
+ :manufacturer, :type, :lock, :version, :serial_number,
35
+ :asset_tag, :boot_up_state, :power_supply_state, :thermal_state,
36
+ :security_status, :oem_information, :height, :number_of_power_cords,
37
+ :contained_elements, :sku_number
38
+ )
39
+
40
+ ## Type 4: Processor Information
41
+ Processor = Struct.new(
42
+ :dmi_type, :dmi_handle, :dmi_size,
43
+ :socket_designation, :type, :family, :manufacturer, :id, :signature, :flags,
44
+ :version, :voltage, :external_clock, :max_speed, :current_speed,
45
+ :status, :upgrade, :l1_cache_handle, :l2_cache_handle, :l3_cache_handle,
46
+ :serial_number, :asset_tag, :part_number, :core_count, :core_enabled, :thread_count,
47
+ :characteristics
48
+ )
49
+
50
+ ## Type 5: Memory Controller Information
51
+ MemoryController = Struct.new(
52
+ :dmi_type, :dmi_handle, :dmi_size,
53
+ :error_detecting_method, :error_correcting_capabilities, :supported_interleave,
54
+ :current_interleave, :maximum_memory_module_size, :maximum_total_memory_size,
55
+ :supported_seeds, :supported_memory_types, :memory_module_voltage, :associated_memory_slots,
56
+ :enabled_error_correcting_capabilities
57
+ )
58
+
59
+ ## Type 6: Memory Module Information
60
+ MemoryModule = Struct.new(
61
+ :dmi_type, :dmi_handle, :dmi_size,
62
+ :socket_designation, :bank_connections, :current_speed, :type, :installed_size, :enabled_size,
63
+ :error_status
64
+ )
65
+
66
+ ## Type 7: Cache Information
67
+ Cache = Struct.new(
68
+ :dmi_type, :dmi_handle, :dmi_size,
69
+ :socket_designation, :configuration, :operational_mode, :location,
70
+ :installed_size, :maximum_size, :supported_sram_types, :installed_sram_type,
71
+ :speed, :error_correction_type, :system_type, :associativity
72
+ )
73
+
74
+ ## Type 8: Port Connector Information
75
+ PortConnector = Struct.new(
76
+ :dmi_type, :dmi_handle, :dmi_size,
77
+ :internal_reference_designator,
78
+ :internal_connector_type,
79
+ :external_reference_designator,
80
+ :external_connector_type,
81
+ :port_type
82
+ )
83
+
84
+ ## Type 9: Sytem Slots
85
+ SystemSlots = Struct.new(
86
+ :dmi_type, :dmi_handle, :dmi_size,
87
+ :designation, :type, :current_usage, :slot_length,
88
+ :id, :characteristics, :bus_address,
89
+ :data_bus_width, :peer_devices
90
+ )
91
+
92
+ ## Type 10: On Board Device Information
93
+ OnBoardDevice = Struct.new(
94
+ :dmi_type, :dmi_handle, :dmi_size,
95
+ :type, :status, :description
96
+ )
97
+
98
+ ## Type 11: OEM Strings
99
+ OEMStrings = Struct.new(
100
+ :dmi_type, :dmi_handle, :dmi_size,
101
+ :strings
102
+ )
103
+
104
+ ## Type 12: System Configuration Options
105
+ SystemConfigurationOptions = Struct.new(
106
+ :dmi_type, :dmi_handle, :dmi_size,
107
+ :options
108
+ )
109
+
110
+ ## Type 13: BIOS Language Information
111
+ BIOSLanguage = Struct.new(
112
+ :dmi_type, :dmi_handle, :dmi_size,
113
+ :language_description_format, :installed_languages, :currently_installed_language
114
+ )
115
+
116
+ ## Type 14: Group Associations
117
+ GroupAssociation = Struct.new(
118
+ :dmi_type, :dmi_handle, :dmi_size,
119
+ :name, :items
120
+ )
121
+
122
+ ## Type 15: System Event Log
123
+ SystemEventLog = Struct.new(
124
+ :dmi_type, :dmi_handle, :dmi_size,
125
+ :area_length, :header_start_offset, :header_length, :data_start_offset,
126
+ :access_method, :change_token, :header_format, :supported_log_type_descriptors,
127
+ :descriptors
128
+ )
129
+
130
+ ## Type 16: Physical Memory Array
131
+ PhysicalMemoryArray = Struct.new(
132
+ :dmi_type, :dmi_handle, :dmi_size,
133
+ :location, :use, :error_correction_type, :maximum_capacity,
134
+ :error_information_handle, :number_of_devices
135
+ )
136
+
137
+ ## Type 17: Memory Device
138
+ MemoryDevice = Struct.new(
139
+ :dmi_type, :dmi_handle, :dmi_size,
140
+ :array_handle, :error_information_handle, :total_width,
141
+ :data_width, :mem_size, :form_factor, :set, :locator,
142
+ :bank_locator, :type, :type_detail, :speed,
143
+ :manufacturer, :serial_number, :asset_tag,
144
+ :part_number, :rank, :configured_clock_speed,
145
+ :minimum_voltage, :maximum_voltage,
146
+ :configured_voltage, :configured_memory_speed,
147
+ :firmware_version, :model_manufacturer_id, :module_product_id,
148
+ :memory_subsystem_controller_manufacturer_id,
149
+ :memory_subsystem_controller_product_id,
150
+ :non_volatile_size, :cache_size, :logical_size
151
+ )
152
+
153
+ ## Type 18: 32-bit Memory Error Information
154
+ MemoryError32Bit = Struct.new(
155
+ :dmi_type, :dmi_handle, :dmi_size,
156
+ :type, :granularity, :operation, :vendor_syndrome, :memory_array_address,
157
+ :device_address, :resolution
158
+ )
159
+
160
+ ## Type 19: Memory Array Mapped Address
161
+ MemoryArrayMappedAddress = Struct.new(
162
+ :dmi_type, :dmi_handle, :dmi_size,
163
+ :starting_address, :ending_address, :range_size,
164
+ :physical_array_handle, :partition_width
165
+ )
166
+
167
+ ## Type 20: Memory Device Mapped Address
168
+ MemoryDeviceMappedAddress = Struct.new(
169
+ :dmi_type, :dmi_handle, :dmi_size,
170
+ :starting_address, :ending_address, :range_size,
171
+ :physical_device_handle, :memory_array_mapped_address_handle,
172
+ :partition_row_position, :interleave_position,
173
+ :interleaved_data_depth
174
+ )
175
+
176
+ ## Type 21: Built-In Pointing Device
177
+ BuiltInPointingDevice = Struct.new(
178
+ :dmi_type, :dmi_handle, :dmi_size,
179
+ :type, :inteface, :buttons
180
+ )
181
+
182
+ ## Type 22: Portable Battery
183
+ PortableBattery = Struct.new(
184
+ :dmi_type, :dmi_handle, :dmi_size,
185
+ :location, :manufacturer, :manufacture_date,
186
+ :serial_number, :name, :chemistry,
187
+ :design_capacity, :design_voltage, :maximum_error,
188
+ :sbds_version, :sbds_serial_number, :sbds_manufacturer_date,
189
+ :sbds_chemistry, :oem_specific_information
190
+ )
191
+
192
+ ## Type 23: System Reset
193
+ SystemReset = Struct.new(
194
+ :dmi_type, :dmi_handle, :dmi_size,
195
+ :status, :watchdog_timer, :boot_option,
196
+ :boot_option_on_limit, :timer_interval,
197
+ :reset_count, :reset_limit, :timeout
198
+ )
199
+
200
+ ## Type 24: Hardware Security
201
+ HardwareSecurity = Struct.new(
202
+ :dmi_type, :dmi_handle, :dmi_size,
203
+ :power_on_password_status, :keyboard_password_status,
204
+ :administrator_password_status, :front_panel_reset_status
205
+ )
206
+
207
+ ## Type 25: System Power Controls
208
+ SystemPowerControls = Struct.new(
209
+ :dmi_type, :dmi_handle, :dmi_size,
210
+ :next_scheduled_power_on
211
+ )
212
+
213
+ ## Type 26: Voltage Probe
214
+ VoltageProbe = Struct.new(
215
+ :dmi_type, :dmi_handle, :dmi_size,
216
+ :description, :location, :status, :maximum_value,
217
+ :minimum_value, :resolution, :tolerance, :accuracy,
218
+ :oem_specific_information, :nominal_value
219
+ )
220
+
221
+ ## Type 27: Cooling Device
222
+ CoolingDevice = Struct.new(
223
+ :dmi_type, :dmi_handle, :dmi_size,
224
+ :temperature_probe_handle, :type,
225
+ :status, :cooling_unit_group, :oem_specific_information,
226
+ :nominal_speed, :description
227
+ )
228
+
229
+ ## Type 28: Temperature Probe
230
+ TemperatureProbe = Struct.new(
231
+ :dmi_type, :dmi_handle, :dmi_size,
232
+ :description, :location, :status,
233
+ :maximum_value, :minimum_value, :resolution,
234
+ :tolerance, :accuracy, :oem_specific_information,
235
+ :nominal_value
236
+ )
237
+
238
+ ## Type 29: Electrical Current Probe
239
+ ElectricalCurrentProbe = Struct.new(
240
+ :dmi_type, :dmi_handle, :dmi_size,
241
+ :description, :location, :status,
242
+ :maximum_value, :minimum_value, :resolution,
243
+ :tolerance, :accuracy, :oem_specific_information,
244
+ :nominal_value
245
+ )
246
+
247
+ ## Type 30: Out-of-band Remote Access
248
+ OutOfBandRemoteAccess = Struct.new(
249
+ :dmi_type, :dmi_handle, :dmi_size,
250
+ :manufacturer_name, :inbound_connection,
251
+ :outbound_connection
252
+ )
253
+
254
+ ## Type 31: Boot Integrity Services Entry Point
255
+ BootIntegrityServices = Struct.new(
256
+ :dmi_type, :dmi_handle, :dmi_size,
257
+ :checksum,
258
+ :sixteen_bit_entry_point_address,
259
+ :thirty_two_bit_entry_point_address
260
+ )
261
+
262
+ ## Type 32: System Boot
263
+ SystemBoot = Struct.new(
264
+ :dmi_type, :dmi_handle, :dmi_size,
265
+ :status
266
+ )
267
+
268
+ ## Type 33: 64-bit Memory Error
269
+ MemoryError64Bit = Struct.new(
270
+ :dmi_type, :dmi_handle, :dmi_size,
271
+ :type, :granularity, :operation, :vendor_syndrome, :memory_array_address,
272
+ :device_address, :resolution
273
+ )
274
+
275
+ ## Type 34: Management Device
276
+ ManagementDevice = Struct.new(
277
+ :dmi_type, :dmi_handle, :dmi_size,
278
+ :description, :type, :address, :address_type
279
+ )
280
+
281
+ ## Type 35: Management Device Component
282
+ ManagementDeviceComponent = Struct.new(
283
+ :dmi_type, :dmi_handle, :dmi_size,
284
+ :description, :management_device_handle, :component_handle,
285
+ :threshold_handle
286
+ )
287
+
288
+ ## Type 36: Management Device Threshold Data
289
+ ManagementDeviceThresholdData = Struct.new(
290
+ :dmi_type, :dmi_handle, :dmi_size,
291
+ :lower_non_critical_threshold,
292
+ :upper_non_critical_threshold,
293
+ :lower_critical_threshold,
294
+ :upper_critical_threshold,
295
+ :lower_non_recoverable_threshold,
296
+ :upper_non_recoverable_threshold
297
+ )
298
+
299
+ ## Type 37: Memory Channel
300
+ MemoryChannelDevice = Struct.new(
301
+ :load,
302
+ :handle
303
+ )
304
+
305
+ MemoryChannel = Struct.new(
306
+ :dmi_type, :dmi_handle, :dmi_size,
307
+ :type, :maximal_load, :devices
308
+ )
309
+
310
+ ## Type 38: IPMI Device Information
311
+ IPMIDevice = Struct.new(
312
+ :dmi_type, :dmi_handle, :dmi_size,
313
+ :interface_type, :specification_version, :i2c_slave_address,
314
+ :nv_storage_device_address, :nv_storage_device, :base_address, :register_spacing,
315
+ :interrupt_polarity, :interrupt_trigger_mode, :interrupt_number
316
+ )
317
+
318
+ ## Type 39: System Power Supply
319
+ SystemPowerSupply = Struct.new(
320
+ :dmi_type, :dmi_handle, :dmi_size,
321
+ :power_unit_group, :location, :name,
322
+ :manufacturer, :serial_number, :asset_tag, :model_part_number,
323
+ :revision, :max_power_capacity, :status,
324
+ :type, :input_voltage_range_switching,
325
+ :plugged, :hot_replaceable,
326
+ :input_voltage_probe_handle,
327
+ :cooling_device_handle,
328
+ :input_current_probe_handle
329
+ )
330
+
331
+ ## Type 40: Additional Information
332
+ AdditionalInformation = Struct.new(
333
+ :dmi_type, :dmi_handle, :dmi_size,
334
+ :referenced_handle, :referenced_offset,
335
+ :string, :value
336
+ )
337
+
338
+ ## Type 41: On Board Devices Extended Information
339
+ OnboardDevicesExtendedInformation = Struct.new(
340
+ :dmi_type, :dmi_handle, :dmi_size,
341
+ :reference_designation, :type, :status,
342
+ :type_instance, :bus_address
343
+ )
344
+
345
+ ## Type 42: Management Controller Host Interface
346
+ ProtocolRecord = Struct.new(
347
+ :protocol_id,
348
+ :protocol_type_specific_data
349
+ )
350
+
351
+ ManagementControllerHostInterface = Struct.new(
352
+ :dmi_type, :dmi_handle, :dmi_size,
353
+ :interface_type, :vendor_id, :device_type,
354
+ :protocol_records, :host_ip_assignment_type, :host_ip_address_format
355
+ )
356
+
357
+ ## Type 43: TPM Device
358
+ TPMDevice = Struct.new(
359
+ :dmi_type, :dmi_handle, :dmi_size,
360
+ :specification_version, :firmware_revision,
361
+ :description, :characteristics, :oem_specific_information
362
+ )
363
+
364
+ def dmi(opts = {})
365
+ command = Kanrisuru::Command.new('dmidecode')
366
+ dmi_type_opts(command, opts)
367
+
368
+ execute_shell(command)
369
+
370
+ Kanrisuru::Result.new(command) do |cmd|
371
+ lines = cmd.to_a
372
+
373
+ rows = []
374
+ current_struct = nil
375
+ wrapped_field_line = nil
376
+
377
+ lines.each do |line|
378
+ next if Kanrisuru::Util.blank?(line)
379
+
380
+ case line
381
+ when /^Handle/
382
+ if current_struct
383
+ rows << current_struct
384
+
385
+ current_struct = nil
386
+ wrapped_field_line = nil
387
+ end
388
+
389
+ values = line.split(', ')
390
+ handle = values[0].split('Handle ')[1]
391
+
392
+ type = values[1].split(/(\d+)/)[1].to_i
393
+ type = Kanrisuru::Util::DmiType[type]
394
+ next if Kanrisuru::Util.blank?(type)
395
+
396
+ bytes = values[2].split(/(\d+)/)[1]
397
+
398
+ current_struct = dmi_type_to_struct(type)
399
+ current_struct.dmi_handle = handle
400
+ current_struct.dmi_type = type
401
+ current_struct.dmi_size = bytes.to_i
402
+ when /:/
403
+ values = line.split(': ')
404
+
405
+ field = values[0].strip
406
+ value = values[1] ? values[1].strip : ''
407
+
408
+ dmi_append_field(current_struct, field, value)
409
+
410
+ case line
411
+ when 'Characteristics:'
412
+ current_struct.characteristics = []
413
+ wrapped_field_line = :characteristics
414
+ when 'Flags:'
415
+ current_struct.flags = []
416
+ wrapped_field_line = :flags
417
+ when 'Supported SRAM Types:'
418
+ current_struct.supported_sram_types = []
419
+ wrapped_field_line = :supported_sram_types
420
+ when 'Features:'
421
+ current_struct.features = []
422
+ wrapped_field_line = :features
423
+ when 'Strings:'
424
+ current_struct.strings = []
425
+ wrapped_field_line = :strings
426
+ end
427
+ else
428
+ current_struct[wrapped_field_line] << line.strip if wrapped_field_line
429
+ end
430
+ end
431
+
432
+ rows << current_struct if current_struct
433
+
434
+ rows
435
+ end
436
+ end
437
+
438
+ private
439
+
440
+ def dmi_append_field(struct, field, value)
441
+ field = dmi_field_translate(struct, field)
442
+ field = field.to_sym
443
+
444
+ if struct.respond_to?(field)
445
+ case struct.dmi_type
446
+ when 'OEM Strings'
447
+ if struct.strings
448
+ struct[field] << value
449
+ else
450
+ struct.strings = [value]
451
+ end
452
+ else
453
+ struct[field] = value
454
+ end
455
+ else
456
+ Kanrisuru.logger.warn("Field does not exist for: #{struct.dmi_type}: #{field} => #{value}")
457
+ end
458
+ end
459
+
460
+ def dmi_field_translate(struct, field)
461
+ field = field.downcase
462
+ field = field.gsub(/\s/, '_')
463
+ field = field.gsub('-', '_')
464
+ field = field.gsub(':', '')
465
+
466
+ case struct.dmi_type
467
+ when 'Memory Device'
468
+ case field
469
+ when 'size'
470
+ return 'mem_size'
471
+ end
472
+ when 'System Slots'
473
+ case field
474
+ when 'length'
475
+ return 'slot_length'
476
+ end
477
+ when 'OEM Strings'
478
+ case field
479
+ when /^string/
480
+ return 'strings'
481
+ end
482
+ when 'Boot Integrity Services'
483
+ case field
484
+ when '16_bit_entry_point_address'
485
+ return 'sixteen_bit_entry_point_address'
486
+ when '32_bit_entry_point_address'
487
+ return 'thirty_two_bit_entry_point_address'
488
+ end
489
+ end
490
+
491
+ field
492
+ end
493
+
494
+ def dmi_type_to_struct(type)
495
+ type =
496
+ case type
497
+ when '32-bit Memory Error'
498
+ 'Memory Error 32 Bit'
499
+ when '64-bit Memory Error'
500
+ 'Memory Error 64 Bit'
501
+ else
502
+ type
503
+ end
504
+
505
+ type_camelized = Kanrisuru::Util.camelize(type.gsub(/\s/, ''))
506
+ struct_class = Kanrisuru::Core::Dmi.const_get(type_camelized)
507
+ struct_class.new
508
+ end
509
+
510
+ def dmi_type_opts(command, opts)
511
+ return unless Kanrisuru::Util.present?(opts[:types])
512
+
513
+ types = opts[:types]
514
+ types = types.instance_of?(Array) ? types : [types]
515
+
516
+ types.each do |type|
517
+ type = parse_dmi_type(type)
518
+ command.append_arg('--type', type)
519
+ end
520
+ end
521
+
522
+ def parse_dmi_type(type)
523
+ raise ArgumentError, 'Invalid DMI type' unless Kanrisuru::Util::DmiType.valid?(type)
524
+
525
+ if type.instance_of?(Integer)
526
+ type
527
+ else
528
+ Kanrisuru::Util::DmiType[type]
529
+ end
530
+ end
531
+ end
532
+ end
533
+ end