1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
#
# Author:: Kurt Yoder (ktyopscode@yoderhome.com)
# Copyright:: Copyright (c) 2010 Kurt Yoder
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
module Ohai
module Common
module DMI
# List of IDs and what they translate to
# from 'man 8 dmidecode'
# all-lowercase, all non-alphanumeric converted to '_'
# 128-255 are 'oem_data_[id]'
# Everything else is 'unknown'
IdToDescription = {
0 => 'bios',
1 => 'system',
2 => 'base_board',
3 => 'chassis',
4 => 'processor',
5 => 'memory_controller',
6 => 'memory_module',
7 => 'cache',
8 => 'port_connector',
9 => 'system_slots',
10 => 'on_board_devices',
11 => 'oem_strings',
12 => 'system_configuration_options',
13 => 'bios_language',
14 => 'group_associations',
15 => 'system_event_log',
16 => 'physical_memory_array',
17 => 'memory_device',
18 => '32_bit_memory_error',
19 => 'memory_array_mapped_address',
20 => 'memory_device_mapped_address',
21 => 'built_in_pointing_device',
22 => 'portable_battery',
23 => 'system_reset',
24 => 'hardware_security',
25 => 'system_power_controls',
26 => 'voltage_probe',
27 => 'cooling_device',
28 => 'temperature_probe',
29 => 'electrical_current_probe',
30 => 'out_of_band_remote_access',
31 => 'boot_integrity_services',
32 => 'system_boot',
33 => '64_bit_memory_error',
34 => 'management_device',
35 => 'management_device_component',
36 => 'management_device_threshold_data',
37 => 'memory_channel',
38 => 'ipmi_device',
39 => 'power_supply',
126 => 'disabled_entries',
127 => 'end_of_table_marker',
}
# list of IDs to collect, otherwise we generate pages of hashes about cache chip size and whatnot
# See OHAI-260. When we can give the user a choice, this will be a default.
IdToCapture = [ 0, 1, 2, 3, 4, 6, 11 ]
# look up DMI ID
def id_lookup(id)
begin
id = id.to_i
if (id >= 128) and (id <= 255)
id = "oem_data_#{id}"
elsif DMI::IdToDescription.has_key?(id)
id = DMI::IdToDescription[id]
else
Ohai::Log.debug("unrecognized header id; falling back to 'unknown'")
id = 'unknown'
end
rescue
Ohai::Log.debug("failed to look up id #{id}, returning unchanged")
id
end
end
# create simplified convenience access keys for each record type
# for single occurrences of one type, copy to top level all fields and values
# for multiple occurrences of same type, copy to top level all fields and values that are common to all records
def convenience_keys(dmi)
dmi.each{ |type, records|
in_common = Mash.new
next unless records.class.to_s == 'Mash'
next unless records.has_key?('all_records')
records[:all_records].each{ |record|
record.each{ |field, value|
next if value.class.to_s == 'Mash'
next if field.to_s == 'application_identifier'
next if field.to_s == 'size'
next if field.to_s == 'record_id'
translated = field.downcase.gsub(/[^a-z0-9]/, '_')
value = value.strip
if in_common.has_key?(translated)
in_common[translated] = nil unless in_common[translated] == value
else
in_common[translated] = value
end
}
}
in_common.each{ |field, value|
next if value == nil
dmi[type][field] = value.strip
}
}
end
module_function :id_lookup, :convenience_keys
end
end
end
|