ohai 16.0.20 → 16.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/lib/ohai/dsl/plugin.rb +1 -1
  4. data/lib/ohai/mash.rb +21 -201
  5. data/lib/ohai/mixin/command.rb +1 -1
  6. data/lib/ohai/mixin/dmi_decode.rb +1 -1
  7. data/lib/ohai/plugins/aix/uptime.rb +1 -1
  8. data/lib/ohai/plugins/aix/virtualization.rb +5 -5
  9. data/lib/ohai/plugins/azure.rb +1 -1
  10. data/lib/ohai/plugins/bsd/virtualization.rb +2 -2
  11. data/lib/ohai/plugins/cpu.rb +2 -2
  12. data/lib/ohai/plugins/darwin/hardware.rb +2 -2
  13. data/lib/ohai/plugins/darwin/network.rb +3 -3
  14. data/lib/ohai/plugins/darwin/platform.rb +3 -6
  15. data/lib/ohai/plugins/darwin/virtualization.rb +1 -1
  16. data/lib/ohai/plugins/ec2.rb +5 -5
  17. data/lib/ohai/plugins/eucalyptus.rb +1 -1
  18. data/lib/ohai/plugins/gce.rb +2 -2
  19. data/lib/ohai/plugins/hostname.rb +2 -2
  20. data/lib/ohai/plugins/kernel.rb +8 -7
  21. data/lib/ohai/plugins/linux/interrupts.rb +1 -1
  22. data/lib/ohai/plugins/linux/mdadm.rb +1 -1
  23. data/lib/ohai/plugins/linux/network.rb +8 -6
  24. data/lib/ohai/plugins/linux/platform.rb +8 -8
  25. data/lib/ohai/plugins/linux/selinux.rb +68 -0
  26. data/lib/ohai/plugins/linux/virtualization.rb +12 -9
  27. data/lib/ohai/plugins/network.rb +1 -1
  28. data/lib/ohai/plugins/openstack.rb +1 -1
  29. data/lib/ohai/plugins/rackspace.rb +2 -2
  30. data/lib/ohai/plugins/solaris2/virtualization.rb +1 -1
  31. data/lib/ohai/plugins/ssh_host_key.rb +1 -1
  32. data/lib/ohai/plugins/virtualbox.rb +2 -2
  33. data/lib/ohai/plugins/vmware.rb +1 -1
  34. data/lib/ohai/plugins/windows/network.rb +1 -1
  35. data/lib/ohai/provides_map.rb +2 -2
  36. data/lib/ohai/util/win32.rb +1 -1
  37. data/lib/ohai/version.rb +1 -1
  38. data/ohai.gemspec +1 -0
  39. metadata +23 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 474ba3761494212a1559a82eb0fea84b9ec142762b53cdb4625a6b0d3bf1a9e8
4
- data.tar.gz: a809312e61ca2626c073c64e95043c053c6a49bb524e758a6d219345377aadbb
3
+ metadata.gz: b791ee540d095a6bbdca2f681a5b2dbbe8574f2b58e5ba9c274fdaccc210c86f
4
+ data.tar.gz: db0fc191334ce76a8c0effc4a66afd1c9f025125e10186feb0f3ebf03dbb1768
5
5
  SHA512:
6
- metadata.gz: e12e1ef3e93b78b95c6482cc5d9a4a192cd1759b4021ae2a9a11422f0ea50adaea2f739c6baccaa87dd61d3b97c7ced7204944452a5d97eee0c386d52b9ef60c
7
- data.tar.gz: 8cdb5bbcc612d1f4c19b4193f385a62769c0e3d06e4e1eb3aa6f7d8cc4a9acfcb23d3f175faf7c4f6e7e684cbf47af582afef5df54596e62489edb27453991e1
6
+ metadata.gz: 9b5f2dfbe7e517ef9f0bb6fa334bb66e8b6623356fabe0211aa895e416a50fbb6b97d39cfc422cc7727d2d943aa3aa8ff4e3f5fe71877f702212b55a83484115
7
+ data.tar.gz: d1a23eb7a0cc5aa5619edb4568ae2e4f0e930d4356ecea2356a789c8c37b49ea0660d9c39b11bddb577f78871dc0c383e2af2bb03c8eac6120fe680e89797622
data/Gemfile CHANGED
@@ -22,6 +22,6 @@ end
22
22
  group :debug do
23
23
  gem "pry"
24
24
  gem "pry-byebug"
25
- gem "pry-stack_explorer"
25
+ gem "pry-stack_explorer", "~> 0.4.0" # pin until we drop ruby < 2.6
26
26
  gem "rb-readline"
27
27
  end
@@ -65,7 +65,7 @@ module Ohai
65
65
  #
66
66
  # @return [String]
67
67
  def self.dev_null
68
- if RUBY_PLATFORM =~ /mswin|mingw|windows/
68
+ if RUBY_PLATFORM.match?(/mswin|mingw|windows/)
69
69
  "NUL"
70
70
  else
71
71
  "/dev/null"
@@ -1,201 +1,21 @@
1
- # Copyright (c) 2009 Dan Kubb
2
-
3
- # Permission is hereby granted, free of charge, to any person obtaining
4
- # a copy of this software and associated documentation files (the
5
- # "Software"), to deal in the Software without restriction, including
6
- # without limitation the rights to use, copy, modify, merge, publish,
7
- # distribute, sublicense, and/or sell copies of the Software, and to
8
- # permit persons to whom the Software is furnished to do so, subject to
9
- # the following conditions:
10
-
11
- # The above copyright notice and this permission notice shall be
12
- # included in all copies or substantial portions of the Software.
13
-
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
-
22
- # ---
23
- # ---
24
-
25
- # Some portions of blank.rb and mash.rb are verbatim copies of software
26
- # licensed under the MIT license. That license is included below:
27
-
28
- # Copyright (c) 2005-2008 David Heinemeier Hansson
29
-
30
- # Permission is hereby granted, free of charge, to any person obtaining
31
- # a copy of this software and associated documentation files (the
32
- # "Software"), to deal in the Software without restriction, including
33
- # without limitation the rights to use, copy, modify, merge, publish,
34
- # distribute, sublicense, and/or sell copies of the Software, and to
35
- # permit persons to whom the Software is furnished to do so, subject to
36
- # the following conditions:
37
-
38
- # The above copyright notice and this permission notice shall be
39
- # included in all copies or substantial portions of the Software.
40
-
41
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
42
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
43
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
44
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
45
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
46
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
47
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
48
-
49
- # This class has dubious semantics and we only have it so that people can write
50
- # params[:key] instead of params['key'].
51
- class Mash < Hash
52
-
53
- # @param constructor [Object] The default value for the mash.
54
- # If constructor is a Hash, a new mash will be created based on the keys of the hash and
55
- # no default value will be set.
56
- def initialize(constructor = {})
57
- if constructor.is_a?(Hash)
58
- super()
59
- update(constructor)
60
- else
61
- super(constructor)
62
- end
63
- end
64
-
65
- # @param key [Object] The default value for the mash.
66
- # If key is a Symbol and it is a key in the mash, then the default value will be set to
67
- # the value matching the key.
68
- def default(key = nil)
69
- if key.is_a?(Symbol) && include?(key = key.to_s)
70
- self[key]
71
- else
72
- super
73
- end
74
- end
75
-
76
- alias_method :regular_writer, :[]= unless method_defined?(:regular_writer)
77
- alias_method :regular_update, :update unless method_defined?(:regular_update)
78
-
79
- # @param key [Object] The key to set.
80
- # @param value [Object] The value to set the key to.
81
- #
82
- # @see Mash#convert_key
83
- # @see Mash#convert_value
84
- def []=(key, value)
85
- regular_writer(convert_key(key), convert_value(value))
86
- end
87
-
88
- # @param other_hash [Hash]
89
- # A hash to update values in the mash with. The keys and the values will be
90
- # converted to Mash format.
91
- #
92
- # @return [Mash] The updated mash.
93
- def update(other_hash)
94
- other_hash.each_pair { |key, value| regular_writer(convert_key(key), convert_value(value)) }
95
- self
96
- end
97
-
98
- alias_method :merge!, :update
99
-
100
- # @param key [Object] The key to check for. This will be run through convert_key.
101
- #
102
- # @return [Boolean] True if the key exists in the mash.
103
- def key?(key)
104
- super(convert_key(key))
105
- end
106
-
107
- # def include? def has_key? def member?
108
- alias_method :include?, :key?
109
- alias_method :has_key?, :key?
110
- alias_method :member?, :key?
111
-
112
- # @param key [Object] The key to fetch. This will be run through convert_key.
113
- # @param extras [Array] Default value.
114
- #
115
- # @return [Object] The value at key or the default value.
116
- def fetch(key, *extras)
117
- super(convert_key(key), *extras)
118
- end
119
-
120
- # @param indices [Array] The keys to retrieve values for. These will be run through +convert_key+.
121
- #
122
- # @return [Array] The values at each of the provided keys
123
- def values_at(*indices)
124
- indices.collect { |key| self[convert_key(key)] }
125
- end
126
-
127
- # @param hash [Hash] The hash to merge with the mash.
128
- #
129
- # @return [Mash] A new mash with the hash values merged in.
130
- def merge(hash)
131
- dup.update(hash)
132
- end
133
-
134
- # @param key [Object] The key to delete from the mash.
135
- def delete(key)
136
- super(convert_key(key))
137
- end
138
-
139
- # @param keys [Array<String, Symbol>] The mash keys to exclude.
140
- #
141
- # @return [Mash] A new mash without the selected keys.
142
- #
143
- # @example
144
- # { :one => 1, :two => 2, :three => 3 }.except(:one)
145
- # #=> { "two" => 2, "three" => 3 }
146
- def except(*keys)
147
- super(*keys.map { |k| convert_key(k) })
148
- end
149
-
150
- # Used to provide the same interface as Hash.
151
- #
152
- # @return [Mash] This mash unchanged.
153
- def stringify_keys!; self end
154
-
155
- # @return [Hash] The mash as a Hash with symbolized keys.
156
- def symbolize_keys
157
- h = Hash.new(default)
158
- each { |key, val| h[key.to_sym] = val }
159
- h
160
- end
161
-
162
- # @return [Hash] The mash as a Hash with string keys.
163
- def to_hash
164
- Hash.new(default).merge(self)
165
- end
166
-
167
- # Convert a Hash into a Mash. The input Hash's default value is maintained
168
- # @return [Mash]
169
- def self.from_hash(hash)
170
- mash = Mash.new(hash)
171
- mash.default = hash.default
172
- mash
173
- end
174
-
175
- protected
176
-
177
- # @param key [Object] The key to convert.
178
- # @return [Object] The converted key. If the key was a symbol, it will be converted to a string.
179
- #
180
- # @api private
181
- def convert_key(key)
182
- key.is_a?(Symbol) ? key.to_s : key
183
- end
184
-
185
- # @param value [Object] The value to convert.
186
- #
187
- # @return [Object]
188
- # The converted value. A Hash or an Array of hashes, will be converted to
189
- # their Mash equivalents.
190
- #
191
- # @api private
192
- def convert_value(value)
193
- if value.class == Hash
194
- Mash.from_hash(value)
195
- elsif value.is_a?(Array)
196
- value.collect { |e| convert_value(e) }
197
- else
198
- value
199
- end
200
- end
201
- end
1
+ #
2
+ # Copyright:: Copyright (c) Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require "chef-utils/mash" unless defined?(ChefUtils::Mash)
19
+
20
+ # For historical reasons we inject Mash directly into the top level class namespace
21
+ Mash = ChefUtils::Mash unless defined?(Mash)
@@ -30,7 +30,7 @@ module Ohai
30
30
  options = options.dup
31
31
  # unless specified by the caller timeout after configured timeout (default 30 seconds)
32
32
  options[:timeout] ||= Ohai::Config.ohai[:shellout_timeout]
33
- unless RUBY_PLATFORM =~ /mswin|mingw32|windows/
33
+ unless RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
34
34
  options[:env] = options.key?(:env) ? options[:env].dup : {}
35
35
  options[:env]["PATH"] ||= ((ENV["PATH"] || "").split(":") + %w{/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin}).join(":")
36
36
  end
@@ -26,7 +26,7 @@ module ::Ohai::Mixin::DmiDecode
26
26
  when /VMware/
27
27
  return "vmware"
28
28
  when /Microsoft/
29
- return "hyperv" if product =~ /Virtual Machine/
29
+ return "hyperv" if /Virtual Machine/.match?(product)
30
30
  when /Amazon EC2/
31
31
  return "amazonec2"
32
32
  when /QEMU/
@@ -30,7 +30,7 @@ Ohai.plugin(:Uptime) do
30
30
  so = shell_out("LC_ALL=POSIX ps -o etime= -p 1").stdout.strip
31
31
 
32
32
  # Here we'll check our shell_out for a dash, which indicates there is a # of days involved
33
- # We'll chunk off the days, hours (where applicable), minutes, seconds into seperate vars
33
+ # We'll chunk off the days, hours (where applicable), minutes, seconds into separate vars
34
34
  # We also need to do this because ps -o etime= will not display days if the machine has been up for less than 24 hours
35
35
  # If the machine has been up for less than one hour, the shell_out will not output hours hence our else
36
36
  # see here: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/com.ibm.aix.cmds4/ps.htm#ps__row-d3e109655
@@ -57,7 +57,7 @@ Ohai.plugin(:Virtualization) do
57
57
  sections.each do |line|
58
58
  case title
59
59
  when "network"
60
- next if line =~ /^Interface|^---/
60
+ next if /^Interface|^---/.match?(line)
61
61
 
62
62
  splat = line.strip.split
63
63
  key = splat[0].downcase
@@ -68,7 +68,7 @@ Ohai.plugin(:Virtualization) do
68
68
  }
69
69
  wpars[wpar_name][title][key] = value
70
70
  when "user-specified routes"
71
- next if line =~ /^Type|^---/
71
+ next if /^Type|^---/.match?(line)
72
72
 
73
73
  splat = line.strip.split
74
74
  key = splat[2].downcase
@@ -78,7 +78,7 @@ Ohai.plugin(:Virtualization) do
78
78
  }
79
79
  wpars[wpar_name][title][key] = value
80
80
  when "file systems"
81
- next if line =~ /^MountPoint|^---/
81
+ next if /^MountPoint|^---/.match?(line)
82
82
 
83
83
  splat = line.strip.split
84
84
  key = splat[1].downcase
@@ -93,7 +93,7 @@ Ohai.plugin(:Virtualization) do
93
93
  privileges ||= ""
94
94
  wpars[wpar_name][title]["Privileges"] ||= []
95
95
 
96
- if line =~ /^Privileges/
96
+ if /^Privileges/.match?(line)
97
97
  privileges << line.split(":")[1].strip
98
98
  else
99
99
  privileges << line.strip
@@ -101,7 +101,7 @@ Ohai.plugin(:Virtualization) do
101
101
 
102
102
  wpars[wpar_name][title]["Privileges"] += privileges.split(",")
103
103
  when "device exports"
104
- next if line =~ /^Name|^---/
104
+ next if /^Name|^---/.match?(line)
105
105
 
106
106
  splat = line.strip.split
107
107
  key = splat[0].downcase
@@ -57,7 +57,7 @@ Ohai.plugin(:Azure) do
57
57
  has_245 = false
58
58
  if File.exist?("/var/lib/dhcp/dhclient.eth0.leases")
59
59
  File.open("/var/lib/dhcp/dhclient.eth0.leases").each do |line|
60
- if line =~ /unknown-245/
60
+ if /unknown-245/.match?(line)
61
61
  logger.trace("Plugin Azure: Found unknown-245 DHCP option used by Azure.")
62
62
  has_245 = true
63
63
  break
@@ -76,7 +76,7 @@ Ohai.plugin(:Virtualization) do
76
76
  # Detect KVM/QEMU paravirt guests from cpu, report as KVM
77
77
  # hw.model: QEMU Virtual CPU version 0.9.1
78
78
  so = shell_out("sysctl -n hw.model")
79
- if so.stdout =~ /QEMU Virtual CPU|KVM processor/
79
+ if /QEMU Virtual CPU|KVM processor/.match?(so.stdout)
80
80
  virtualization[:system] = "kvm"
81
81
  virtualization[:role] = "guest"
82
82
  virtualization[:systems][:kvm] = "guest"
@@ -96,7 +96,7 @@ Ohai.plugin(:Virtualization) do
96
96
  "xen"
97
97
  when /kvm/
98
98
  so = shell_out("sysctl -n kern.hostuuid")
99
- so.stdout =~ /^ec2/ ? "amazonec2" : "kvm"
99
+ /^ec2/.match?(so.stdout) ? "amazonec2" : "kvm"
100
100
  when /bhyve/
101
101
  "bhyve"
102
102
  end
@@ -305,7 +305,7 @@ Ohai.plugin(:CPU) do
305
305
  cpu[index] = Mash.new
306
306
  cpu[index][:status] = status
307
307
  cpu[index][:location] = location
308
- if status =~ /Available/
308
+ if /Available/.match?(status)
309
309
  cpu[:available] += 1
310
310
  lsattr = shell_out("lsattr -El #{name}").stdout.lines
311
311
  lsattr.each do |attribute|
@@ -364,7 +364,7 @@ Ohai.plugin(:CPU) do
364
364
  cpu["cpustates"][value] += 1
365
365
  when /core_id/
366
366
  cpu[instance]["core_id"] = value
367
- # Detect hyperthreading/multithreading
367
+ # Detect hyperthreading/multithreading
368
368
  cpucores.push(value) if cpucores.index(value).nil?
369
369
  when /family|fpu_type|model|stepping|vendor_id/
370
370
  cpu[instance][key] = value
@@ -41,8 +41,8 @@ Ohai.plugin(:Hardware) do
41
41
  hardware.merge!(hw_hash[0]["_items"][0])
42
42
 
43
43
  # ProductName: Mac OS X
44
- # ProductVersion: 10.12.5
45
- # BuildVersion: 16F73
44
+ # ProductVersion: 10.15.6
45
+ # BuildVersion: 19G46c
46
46
  shell_out("sw_vers").stdout.lines.each do |line|
47
47
  case line
48
48
  when /^ProductName:\s*(.*)$/
@@ -66,8 +66,8 @@ Ohai.plugin(:Network) do
66
66
 
67
67
  def scope_lookup(scope)
68
68
  return "Node" if scope.eql?("::1")
69
- return "Link" if scope =~ /^fe80\:/
70
- return "Site" if scope =~ /^fec0\:/
69
+ return "Link" if /^fe80\:/.match?(scope)
70
+ return "Site" if /^fec0\:/.match?(scope)
71
71
 
72
72
  "Global"
73
73
  end
@@ -79,7 +79,7 @@ Ohai.plugin(:Network) do
79
79
  def locate_interface(ifaces, ifname, mac)
80
80
  return ifname unless ifaces[ifname].nil?
81
81
  # oh well, time to go hunting!
82
- return ifname.chop if ifname =~ /\*$/
82
+ return ifname.chop if /\*$/.match?(ifname)
83
83
 
84
84
  ifaces.each_key do |ifc|
85
85
  ifaces[ifc][:addresses].each_key do |addr|
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
- # Copyright:: Copyright (c) 2008-2016 Chef Software, Inc.
3
+ # Copyright:: Copyright (c) Chef Software, Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -23,11 +23,6 @@ Ohai.plugin(:Platform) do
23
23
  so = shell_out((Ohai.abs_path( "/usr/bin/sw_vers" )).to_s)
24
24
  so.stdout.lines do |line|
25
25
  case line
26
- when /^ProductName:\s+(.+)$/
27
- macname = $1
28
- macname.downcase!
29
- macname.tr!(" ", "_")
30
- platform macname
31
26
  when /^ProductVersion:\s+(.+)$/
32
27
  platform_version $1
33
28
  when /^BuildVersion:\s+(.+)$/
@@ -35,6 +30,8 @@ Ohai.plugin(:Platform) do
35
30
  end
36
31
  end
37
32
 
33
+ # if we're on darwin assume we're on mac_os_x
34
+ platform "mac_os_x"
38
35
  platform_family "mac_os_x"
39
36
  end
40
37
  end
@@ -82,7 +82,7 @@ Ohai.plugin(:Virtualization) do
82
82
  virtualization[:systems][:parallels] = "host"
83
83
  elsif ioreg_exists?
84
84
  so = shell_out("ioreg -l")
85
- if so.stdout =~ /pci1ab8,4000/
85
+ if /pci1ab8,4000/.match?(so.stdout)
86
86
  virtualization[:system] = "parallels"
87
87
  virtualization[:role] = "guest"
88
88
  virtualization[:systems][:parallels] = "guest"
@@ -41,7 +41,7 @@ Ohai.plugin(:EC2) do
41
41
  # @return [Boolean] do we have Amazon DMI data?
42
42
  def has_ec2_amazon_dmi?
43
43
  # detect a version of '4.2.amazon'
44
- if file_val_if_exists("/sys/class/dmi/id/bios_vendor") =~ /Amazon/
44
+ if /Amazon/.match?(file_val_if_exists("/sys/class/dmi/id/bios_vendor"))
45
45
  logger.trace("Plugin EC2: has_ec2_amazon_dmi? == true")
46
46
  true
47
47
  else
@@ -56,7 +56,7 @@ Ohai.plugin(:EC2) do
56
56
  # @return [Boolean] do we have Amazon DMI data?
57
57
  def has_ec2_xen_dmi?
58
58
  # detect a version of '4.2.amazon'
59
- if file_val_if_exists("/sys/class/dmi/id/bios_version") =~ /amazon/
59
+ if /amazon/.match?(file_val_if_exists("/sys/class/dmi/id/bios_version"))
60
60
  logger.trace("Plugin EC2: has_ec2_xen_dmi? == true")
61
61
  true
62
62
  else
@@ -68,7 +68,7 @@ Ohai.plugin(:EC2) do
68
68
  # looks for a xen UUID that starts with ec2 from within the Linux sys tree
69
69
  # @return [Boolean] do we have a Xen UUID or not?
70
70
  def has_ec2_xen_uuid?
71
- if file_val_if_exists("/sys/hypervisor/uuid") =~ /^ec2/
71
+ if /^ec2/.match?(file_val_if_exists("/sys/hypervisor/uuid"))
72
72
  logger.trace("Plugin EC2: has_ec2_xen_uuid? == true")
73
73
  return true
74
74
  end
@@ -81,10 +81,10 @@ Ohai.plugin(:EC2) do
81
81
  # linux hosts
82
82
  # @return [Boolean] do we have a Xen Identifying Number or not?
83
83
  def has_ec2_identifying_number?
84
- if RUBY_PLATFORM =~ /mswin|mingw32|windows/
84
+ if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
85
85
  require "wmi-lite/wmi"
86
86
  wmi = WmiLite::Wmi.new
87
- if wmi.first_of("Win32_ComputerSystemProduct")["identifyingnumber"] =~ /^ec2/
87
+ if /^ec2/.match?(wmi.first_of("Win32_ComputerSystemProduct")["identifyingnumber"])
88
88
  logger.trace("Plugin EC2: has_ec2_identifying_number? == true")
89
89
  true
90
90
  end
@@ -42,7 +42,7 @@ Ohai.plugin(:Eucalyptus) do
42
42
  def has_euca_mac?
43
43
  network[:interfaces].each_value do |iface|
44
44
  mac = get_mac_address(iface[:addresses])
45
- if mac =~ /^[dD]0:0[dD]:/
45
+ if /^[dD]0:0[dD]:/.match?(mac)
46
46
  logger.trace("Plugin Eucalyptus: has_euca_mac? == true (#{mac})")
47
47
  return true
48
48
  end
@@ -27,7 +27,7 @@ Ohai.plugin(:GCE) do
27
27
  # this works even if the system lacks dmidecode use by the Dmi plugin
28
28
  # @return [Boolean] do we have Google Compute Engine DMI data?
29
29
  def has_gce_dmi?
30
- if file_val_if_exists("/sys/class/dmi/id/product_name") =~ /Google Compute Engine/
30
+ if /Google Compute Engine/.match?(file_val_if_exists("/sys/class/dmi/id/product_name"))
31
31
  logger.trace("Plugin GCE: has_gce_dmi? == true")
32
32
  true
33
33
  else
@@ -48,7 +48,7 @@ Ohai.plugin(:GCE) do
48
48
  # looks at the Manufacturer and Model WMI values to see if they starts with Google.
49
49
  # @return [Boolean] Are the manufacturer and model Google?
50
50
  def has_gce_system_info?
51
- if RUBY_PLATFORM =~ /mswin|mingw32|windows/
51
+ if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
52
52
  require "wmi-lite/wmi"
53
53
  wmi = WmiLite::Wmi.new
54
54
  computer_system = wmi.first_of("Win32_ComputerSystem")
@@ -171,14 +171,14 @@ Ohai.plugin(:Hostname) do
171
171
  machinename host["name"].to_s
172
172
 
173
173
  info = Socket.gethostbyname(Socket.gethostname)
174
- if info.first =~ /.+?\.(.*)/
174
+ if /.+?\.(.*)/.match?(info.first)
175
175
  fqdn info.first
176
176
  else
177
177
  # host is not in dns. optionally use:
178
178
  # C:\WINDOWS\system32\drivers\etc\hosts
179
179
  info[3..info.length].reverse_each do |addr|
180
180
  hostent = Socket.gethostbyaddr(addr)
181
- if hostent.first =~ /.+?\.(.*)/
181
+ if /.+?\.(.*)/.match?(hostent.first)
182
182
  fqdn hostent.first
183
183
  break
184
184
  end
@@ -4,7 +4,7 @@
4
4
  # Author:: Bryan McLellan (<btm@loftninjas.org>)
5
5
  # Author:: Claire McQuin (<claire@chef.io>)
6
6
  # Author:: James Gartrell (<jgartrel@gmail.com>)
7
- # Copyright:: Copyright (c) 2008-2018 Chef Software, Inc.
7
+ # Copyright:: Copyright (c) Chef Software, Inc.
8
8
  # Copyright:: Copyright (c) 2009 Bryan McLellan
9
9
  # License:: Apache License, Version 2.0
10
10
  #
@@ -137,11 +137,12 @@ Ohai.plugin(:Kernel) do
137
137
  end
138
138
  end
139
139
 
140
- # see if a WMI name is blacklisted so we can avoid writing out
141
- # useless data to ohai
140
+ # see if a WMI name is in the blocked list so we can avoid writing
141
+ # out useless data to ohai
142
+ #
142
143
  # @param [String] name the wmi name to check
143
- # @return [Boolean] is the wmi name blacklisted
144
- def blacklisted_wmi_name?(name)
144
+ # @return [Boolean] is the wmi name in the blocked list
145
+ def blocked_wmi_name?(name)
145
146
  [
146
147
  "creation_class_name", # this is just the wmi name
147
148
  "cs_creation_class_name", # this is just the wmi name
@@ -262,7 +263,7 @@ Ohai.plugin(:Kernel) do
262
263
  host = wmi.first_of("Win32_OperatingSystem")
263
264
  kernel[:os_info] = Mash.new
264
265
  host.wmi_ole_object.properties_.each do |p|
265
- next if blacklisted_wmi_name?(p.name.wmi_underscore)
266
+ next if blocked_wmi_name?(p.name.wmi_underscore)
266
267
 
267
268
  kernel[:os_info][p.name.wmi_underscore.to_sym] = host[p.name.downcase]
268
269
  end
@@ -277,7 +278,7 @@ Ohai.plugin(:Kernel) do
277
278
  kernel[:cs_info] = Mash.new
278
279
  host = wmi.first_of("Win32_ComputerSystem")
279
280
  host.wmi_ole_object.properties_.each do |p|
280
- next if blacklisted_wmi_name?(p.name.wmi_underscore)
281
+ next if blocked_wmi_name?(p.name.wmi_underscore)
281
282
 
282
283
  kernel[:cs_info][p.name.wmi_underscore.to_sym] = host[p.name.downcase]
283
284
  end
@@ -65,7 +65,7 @@ Ohai.plugin(:Interrupts) do
65
65
  interrupts[:irq][irqn][:events_by_cpu][cpu] = fields[cpu].to_i
66
66
  end
67
67
  # Only regular IRQs have extra fields and affinity settings
68
- if /^\d+$/.match(irqn)
68
+ if /^\d+$/.match?(irqn)
69
69
  interrupts[:irq][irqn][:type],
70
70
  interrupts[:irq][irqn][:vector],
71
71
  interrupts[:irq][irqn][:device] =
@@ -105,7 +105,7 @@ Ohai.plugin(:Mdadm) do
105
105
  # gather detailed information on the array
106
106
  so = shell_out("mdadm --detail /dev/#{device}")
107
107
 
108
- # if the mdadm command was sucessful pass so.stdout to create_raid_device_mash to grab the tidbits we want
108
+ # if the mdadm command was successful pass so.stdout to create_raid_device_mash to grab the tidbits we want
109
109
  mdadm[device] = create_raid_device_mash(so.stdout) if so.stdout
110
110
  mdadm[device]["members"] = devices[device]["active"]
111
111
  mdadm[device]["spares"] = devices[device]["spare"]
@@ -78,7 +78,7 @@ Ohai.plugin(:Network) do
78
78
  so.stdout.lines do |line|
79
79
  line.strip!
80
80
  logger.trace("Plugin Network: Parsing #{line}")
81
- if line =~ /\\/
81
+ if /\\/.match?(line)
82
82
  parts = line.split('\\')
83
83
  route_dest = parts.shift.strip
84
84
  route_endings = parts
@@ -108,6 +108,8 @@ Ohai.plugin(:Network) do
108
108
  # http://rubular.com/r/pwTNp65VFf
109
109
  route_entry[k] = $1 if route_ending =~ /\b#{k}\s+([^\s]+)/
110
110
  end
111
+ # https://rubular.com/r/k1sMrRn5yLjgVi
112
+ route_entry["via"] = $1 if route_ending =~ /\bvia\s+inet6\s+([^\s]+)/
111
113
 
112
114
  # a sanity check, especially for Linux-VServer, OpenVZ and LXC:
113
115
  # don't report the route entry if the src address isn't set on the node
@@ -189,11 +191,11 @@ Ohai.plugin(:Network) do
189
191
  next if line.start_with?("Ring parameters for")
190
192
  next if line.strip.nil?
191
193
 
192
- if line =~ /Pre-set maximums/
194
+ if /Pre-set maximums/.match?(line)
193
195
  type = "max"
194
196
  next
195
197
  end
196
- if line =~ /Current hardware settings/
198
+ if /Current hardware settings/.match?(line)
197
199
  type = "current"
198
200
  next
199
201
  end
@@ -222,11 +224,11 @@ Ohai.plugin(:Network) do
222
224
  next if line.start_with?("Channel parameters for")
223
225
  next if line.strip.nil?
224
226
 
225
- if line =~ /Pre-set maximums/
227
+ if /Pre-set maximums/.match?(line)
226
228
  type = "max"
227
229
  next
228
230
  end
229
- if line =~ /Current hardware settings/
231
+ if /Current hardware settings/.match?(line)
230
232
  type = "current"
231
233
  next
232
234
  end
@@ -306,7 +308,7 @@ Ohai.plugin(:Network) do
306
308
  net_counters[tmp_int] ||= Mash.new
307
309
  end
308
310
 
309
- if line =~ /^\s+(ip6tnl|ipip)/
311
+ if /^\s+(ip6tnl|ipip)/.match?(line)
310
312
  iface[tmp_int][:tunnel_info] = {}
311
313
  words = line.split
312
314
  words.each_with_index do |word, index|
@@ -195,7 +195,7 @@ Ohai.plugin(:Platform) do
195
195
  elsif File.exist?("/etc/debian_version")
196
196
  # Ubuntu and Debian both have /etc/debian_version
197
197
  # Ubuntu should always have a working lsb, debian does not by default
198
- if lsb[:id] =~ /Ubuntu/i
198
+ if /Ubuntu/i.match?(lsb[:id])
199
199
  platform "ubuntu"
200
200
  platform_version lsb[:release]
201
201
  else
@@ -222,7 +222,7 @@ Ohai.plugin(:Platform) do
222
222
  suse_version = suse_release.scan(/VERSION = (\d+)\nPATCHLEVEL = (\d+)/).flatten.join(".")
223
223
  suse_version = suse_release[/VERSION = ([\d\.]{2,})/, 1] if suse_version == ""
224
224
  platform_version suse_version
225
- if suse_release =~ /^openSUSE/
225
+ if /^openSUSE/.match?(suse_release)
226
226
  # opensuse releases >= 42 are openSUSE Leap
227
227
  if platform_version.to_i < 42
228
228
  platform "opensuse"
@@ -256,23 +256,23 @@ Ohai.plugin(:Platform) do
256
256
  platform_version shell_out("/bin/uname -r").stdout.strip
257
257
  elsif File.exist?("/usr/lib/os-release")
258
258
  contents = File.read("/usr/lib/os-release")
259
- if /clear-linux-os/ =~ contents # Clear Linux https://clearlinux.org/
259
+ if /clear-linux-os/.match?(contents) # Clear Linux https://clearlinux.org/
260
260
  platform "clearlinux"
261
261
  platform_version contents[/VERSION_ID=(\d+)/, 1]
262
262
  end
263
- elsif lsb[:id] =~ /RedHat/i
263
+ elsif /RedHat/i.match?(lsb[:id])
264
264
  platform "redhat"
265
265
  platform_version lsb[:release]
266
- elsif lsb[:id] =~ /Amazon/i
266
+ elsif /Amazon/i.match?(lsb[:id])
267
267
  platform "amazon"
268
268
  platform_version lsb[:release]
269
- elsif lsb[:id] =~ /ScientificSL/i
269
+ elsif /ScientificSL/i.match?(lsb[:id])
270
270
  platform "scientific"
271
271
  platform_version lsb[:release]
272
- elsif lsb[:id] =~ /XenServer/i
272
+ elsif /XenServer/i.match?(lsb[:id])
273
273
  platform "xenserver"
274
274
  platform_version lsb[:release]
275
- elsif lsb[:id] =~ /XCP/i
275
+ elsif /XCP/i.match?(lsb[:id])
276
276
  platform "xcp"
277
277
  platform_version lsb[:release]
278
278
  elsif lsb[:id] # LSB can provide odd data that changes between releases, so we currently fall back on it rather than dealing with its subtleties
@@ -0,0 +1,68 @@
1
+ #
2
+ # Author:: Davide Cavalca <dcavalca@fb.com>
3
+ # Copyright:: Copyright (c) 2020 Facebook
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ Ohai.plugin(:Selinux) do
20
+ provides "selinux/status", "selinux/policy_booleans", "selinux/process_contexts", "selinux/file_contexts"
21
+ optional true
22
+
23
+ collect_data(:linux) do
24
+ sestatus_path = which("sestatus")
25
+ if sestatus_path
26
+ sestatus = shell_out("#{sestatus_path} -v -b")
27
+
28
+ selinux Mash.new unless selinux
29
+ selinux[:status] ||= Mash.new
30
+ selinux[:policy_booleans] ||= Mash.new
31
+ selinux[:process_contexts] ||= Mash.new
32
+ selinux[:file_contexts] ||= Mash.new
33
+ section = nil
34
+
35
+ sestatus.stdout.split("\n").each do |line|
36
+ line.chomp!
37
+
38
+ case line
39
+ when "Policy booleans:"
40
+ section = :policy_booleans
41
+ next
42
+ when "Process contexts:"
43
+ section = :process_contexts
44
+ next
45
+ when "File contexts:"
46
+ section = :file_contexts
47
+ next
48
+ else
49
+ if section.nil?
50
+ section = :status
51
+ end
52
+ end
53
+
54
+ key, val = line.split(/:?\s\s+/, 2)
55
+ next if key.nil?
56
+
57
+ unless key.start_with?("/")
58
+ key.downcase!
59
+ key.tr!(" ", "_")
60
+ end
61
+
62
+ selinux[section][key] = val
63
+ end
64
+ else
65
+ logger.debug("Plugin Selinux: Could not find sestatus. Skipping plugin.")
66
+ end
67
+ end
68
+ end
@@ -59,7 +59,7 @@ Ohai.plugin(:Virtualization) do
59
59
 
60
60
  # This file should exist on most Xen systems, normally empty for guests
61
61
  if File.exist?("/proc/xen/capabilities")
62
- if File.read("/proc/xen/capabilities") =~ /control_d/i
62
+ if /control_d/i.match?(File.read("/proc/xen/capabilities"))
63
63
  logger.trace("Plugin Virtualization: /proc/xen/capabilities contains control_d. Detecting as Xen host")
64
64
  virtualization[:role] = "host"
65
65
  virtualization[:systems][:xen] = "host"
@@ -70,12 +70,12 @@ Ohai.plugin(:Virtualization) do
70
70
  # Detect Virtualbox from kernel module
71
71
  if File.exist?("/proc/modules")
72
72
  modules = File.read("/proc/modules")
73
- if modules =~ /^vboxdrv/
73
+ if /^vboxdrv/.match?(modules)
74
74
  logger.trace("Plugin Virtualization: /proc/modules contains vboxdrv. Detecting as vbox host")
75
75
  virtualization[:system] = "vbox"
76
76
  virtualization[:role] = "host"
77
77
  virtualization[:systems][:vbox] = "host"
78
- elsif modules =~ /^vboxguest/
78
+ elsif /^vboxguest/.match?(modules)
79
79
  logger.trace("Plugin Virtualization: /proc/modules contains vboxguest. Detecting as vbox guest")
80
80
  virtualization[:system] = "vbox"
81
81
  virtualization[:role] = "guest"
@@ -93,7 +93,7 @@ Ohai.plugin(:Virtualization) do
93
93
 
94
94
  # Detect paravirt KVM/QEMU from cpuinfo, report as KVM
95
95
  if File.exist?("/proc/cpuinfo")
96
- if File.read("/proc/cpuinfo") =~ /QEMU Virtual CPU|Common KVM processor|Common 32-bit KVM processor/
96
+ if /QEMU Virtual CPU|Common KVM processor|Common 32-bit KVM processor/.match?(File.read("/proc/cpuinfo"))
97
97
  logger.trace("Plugin Virtualization: /proc/cpuinfo lists a KVM paravirt CPU string. Detecting as kvm guest")
98
98
  virtualization[:system] = "kvm"
99
99
  virtualization[:role] = "guest"
@@ -105,7 +105,7 @@ Ohai.plugin(:Virtualization) do
105
105
  # guests will have the hypervisor cpu feature that hosts don't have
106
106
  if File.exist?("/sys/devices/virtual/misc/kvm")
107
107
  virtualization[:system] = "kvm"
108
- if File.read("/proc/cpuinfo") =~ /hypervisor/
108
+ if /hypervisor/.match?(File.read("/proc/cpuinfo"))
109
109
  logger.trace("Plugin Virtualization: /sys/devices/virtual/misc/kvm present and /proc/cpuinfo lists the hypervisor feature. Detecting as kvm guest")
110
110
  virtualization[:role] = "guest"
111
111
  virtualization[:systems][:kvm] = "guest"
@@ -190,18 +190,21 @@ Ohai.plugin(:Virtualization) do
190
190
  # Kernel docs, https://www.kernel.org/doc/Documentation/cgroups
191
191
  if File.exist?("/proc/self/cgroup")
192
192
  cgroup_content = File.read("/proc/self/cgroup")
193
- if cgroup_content =~ %r{^\d+:[^:]+:/(lxc|docker)/.+$} ||
194
- cgroup_content =~ %r{^\d+:[^:]+:/[^/]+/(lxc|docker)-?.+$}
193
+ # These two REs catch many different examples. Here's a specific one
194
+ # from when it is docker and there is no subsystem name.
195
+ # https://rubular.com/r/dV13hiU9KxmiWB
196
+ if cgroup_content =~ %r{^\d+:[^:]*:/(lxc|docker)/.+$} ||
197
+ cgroup_content =~ %r{^\d+:[^:]*:/[^/]+/(lxc|docker)-?.+$}
195
198
  logger.trace("Plugin Virtualization: /proc/self/cgroup indicates #{$1} container. Detecting as #{$1} guest")
196
199
  virtualization[:system] = $1
197
200
  virtualization[:role] = "guest"
198
201
  virtualization[:systems][$1.to_sym] = "guest"
199
- elsif File.read("/proc/1/environ") =~ /container=lxc/
202
+ elsif /container=lxc/.match?(File.read("/proc/1/environ"))
200
203
  logger.trace("Plugin Virtualization: /proc/1/environ indicates lxc container. Detecting as lxc guest")
201
204
  virtualization[:system] = "lxc"
202
205
  virtualization[:role] = "guest"
203
206
  virtualization[:systems][:lxc] = "guest"
204
- elsif File.read("/proc/1/environ") =~ /container=systemd-nspawn/
207
+ elsif /container=systemd-nspawn/.match?(File.read("/proc/1/environ"))
205
208
  logger.trace("Plugin Virtualization: /proc/1/environ indicates nspawn container. Detecting as nspawn guest")
206
209
  virtualization[:system] = "nspawn"
207
210
  virtualization[:role] = "guest"
@@ -54,7 +54,7 @@ Ohai.plugin(:NetworkAddresses) do
54
54
  ipaddresses.sort_by do |v|
55
55
  [ ( scope_prio.index(v[:scope]) || 999999 ),
56
56
  128 - v[:ipaddress].prefix.to_i,
57
- ( family == "inet" ? v[:ipaddress].to_u32 : v[:ipaddress].to_u128 ),
57
+ v[:ipaddress].to_i,
58
58
  ]
59
59
  end
60
60
  end
@@ -49,7 +49,7 @@ Ohai.plugin(:Openstack) do
49
49
  # https://help.dreamhost.com/hc/en-us/articles/228377408-How-to-find-the-default-user-of-an-image
50
50
  def openstack_provider
51
51
  # dream host doesn't support windows so bail early if we're on windows
52
- return "openstack" if RUBY_PLATFORM =~ /mswin|mingw32|windows/
52
+ return "openstack" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
53
53
 
54
54
  if Etc::Passwd.entries.map(&:name).include?("dhc-user")
55
55
  "dreamhost"
@@ -48,7 +48,7 @@ Ohai.plugin(:Rackspace) do
48
48
  # true:: If the rackspace cloud can be identified
49
49
  # false:: Otherwise
50
50
  def has_rackspace_manufacturer?
51
- return false unless RUBY_PLATFORM =~ /mswin|mingw32|windows/
51
+ return false unless RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
52
52
 
53
53
  require "wmi-lite/wmi"
54
54
  wmi = WmiLite::Wmi.new
@@ -102,7 +102,7 @@ Ohai.plugin(:Rackspace) do
102
102
  so = shell_out("xenstore-ls vm-data/provider_data")
103
103
  if so.exitstatus == 0
104
104
  so.stdout.split("\n").each do |line|
105
- rackspace[:region] = line.split[2].delete('\"') if line =~ /^region/
105
+ rackspace[:region] = line.split[2].delete('\"') if /^region/.match?(line)
106
106
  end
107
107
  end
108
108
  rescue Ohai::Exceptions::Exec
@@ -38,7 +38,7 @@ Ohai.plugin(:Virtualization) do
38
38
  psrinfo_path = Ohai.abs_path( "/usr/sbin/psrinfo" )
39
39
  if File.exist?(psrinfo_path)
40
40
  so = shell_out("#{psrinfo_path} -pv")
41
- if so.stdout =~ /QEMU Virtual CPU|Common KVM processor|Common 32-bit KVM processor/
41
+ if /QEMU Virtual CPU|Common KVM processor|Common 32-bit KVM processor/.match?(so.stdout)
42
42
  virtualization[:system] = "kvm"
43
43
  virtualization[:role] = "guest"
44
44
  virtualization[:systems][:kvm] = "guest"
@@ -51,7 +51,7 @@ Ohai.plugin(:SSHHostKey) do
51
51
  if sshd_config
52
52
  File.open(sshd_config) do |conf|
53
53
  conf.each_line do |line|
54
- if line =~ /^hostkey\s/i
54
+ if /^hostkey\s/i.match?(line)
55
55
  pub_file = "#{line.split[1]}.pub"
56
56
  content = IO.read(pub_file).split
57
57
  key_type, key_subtype = extract_keytype?(content)
@@ -93,8 +93,8 @@ Ohai.plugin(:Virtualbox) do
93
93
  so_cmd = "VBoxManage list --sorted #{query_type}"
94
94
  logger.trace(so_cmd)
95
95
  so = shell_out(so_cmd)
96
- # raise an exception if the command fails
97
- # so.error!
96
+ # raise an exception if the command fails
97
+ # so.error!
98
98
 
99
99
  if so.exitstatus == 0
100
100
  # break the result into paragraph blocks, on successive newlines
@@ -51,7 +51,7 @@ Ohai.plugin(:VMware) do
51
51
  # to attribute "vmware[:<parameter>]"
52
52
  %w{hosttime speed sessionid balloon swap memlimit memres cpures cpulimit}.each do |param|
53
53
  vmware[param] = from_cmd("#{vmtools_path} stat #{param}")
54
- if vmware[param] =~ /UpdateInfo failed/
54
+ if /UpdateInfo failed/.match?(vmware[param])
55
55
  vmware[param] = nil
56
56
  end
57
57
  end
@@ -171,7 +171,7 @@ Ohai.plugin(:Network) do
171
171
  iface[cint][:addresses][ip] = Mash.new(prefixlen: ip2.prefix)
172
172
  if ip2.ipv6?
173
173
  iface[cint][:addresses][ip][:family] = "inet6"
174
- iface[cint][:addresses][ip][:scope] = "Link" if ip =~ /^fe80/i
174
+ iface[cint][:addresses][ip][:scope] = "Link" if /^fe80/i.match?(ip)
175
175
  else
176
176
  if iface[cint][:configuration][:ip_subnet]
177
177
  iface[cint][:addresses][ip][:netmask] = ip2.netmask.to_s
@@ -136,8 +136,8 @@ module Ohai
136
136
  private
137
137
 
138
138
  def normalize_and_validate(attribute)
139
- raise Ohai::Exceptions::AttributeSyntaxError, "Attribute contains duplicate '/' characters: #{attribute}" if attribute =~ %r{//+}
140
- raise Ohai::Exceptions::AttributeSyntaxError, "Attribute contains a trailing '/': #{attribute}" if attribute =~ %r{/$}
139
+ raise Ohai::Exceptions::AttributeSyntaxError, "Attribute contains duplicate '/' characters: #{attribute}" if %r{//+}.match?(attribute)
140
+ raise Ohai::Exceptions::AttributeSyntaxError, "Attribute contains a trailing '/': #{attribute}" if %r{/$}.match?(attribute)
141
141
 
142
142
  parts = attribute.split("/")
143
143
  parts.shift if parts.length != 0 && parts[0].length == 0 # attribute begins with a '/'
@@ -19,7 +19,7 @@
19
19
  module Ohai
20
20
  module Util
21
21
  module Win32
22
- if RUBY_PLATFORM =~ /mswin|mingw|windows/
22
+ if RUBY_PLATFORM.match?(/mswin|mingw|windows/)
23
23
 
24
24
  require "ffi" unless defined?(FFI)
25
25
 
@@ -18,5 +18,5 @@
18
18
 
19
19
  module Ohai
20
20
  OHAI_ROOT = File.expand_path(File.dirname(__FILE__))
21
- VERSION = "16.0.20".freeze
21
+ VERSION = "16.3.0".freeze
22
22
  end
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
25
25
  s.add_dependency "wmi-lite", "~> 1.0"
26
26
  s.add_dependency "ffi", "~> 1.9"
27
27
  s.add_dependency "chef-config", ">= 12.8", "< 17"
28
+ s.add_dependency "chef-utils", ">= 16.0", "< 17"
28
29
  # Note for ohai developers: If chef-config causes you grief, try:
29
30
  # bundle install --with development
30
31
  # this should work as long as chef is a development dependency in Gemfile.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ohai
3
3
  version: !ruby/object:Gem::Version
4
- version: 16.0.20
4
+ version: 16.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Jacob
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-25 00:00:00.000000000 Z
11
+ date: 2020-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: systemu
@@ -188,6 +188,26 @@ dependencies:
188
188
  - - "<"
189
189
  - !ruby/object:Gem::Version
190
190
  version: '17'
191
+ - !ruby/object:Gem::Dependency
192
+ name: chef-utils
193
+ requirement: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: '16.0'
198
+ - - "<"
199
+ - !ruby/object:Gem::Version
200
+ version: '17'
201
+ type: :runtime
202
+ prerelease: false
203
+ version_requirements: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '16.0'
208
+ - - "<"
209
+ - !ruby/object:Gem::Version
210
+ version: '17'
191
211
  description: Ohai profiles your system and emits JSON
192
212
  email: adam@chef.io
193
213
  executables:
@@ -282,6 +302,7 @@ files:
282
302
  - lib/ohai/plugins/linux/memory.rb
283
303
  - lib/ohai/plugins/linux/network.rb
284
304
  - lib/ohai/plugins/linux/platform.rb
305
+ - lib/ohai/plugins/linux/selinux.rb
285
306
  - lib/ohai/plugins/linux/sessions.rb
286
307
  - lib/ohai/plugins/linux/sysctl.rb
287
308
  - lib/ohai/plugins/linux/systemd_paths.rb