ohai 8.0.1 → 8.1.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 +13 -5
- data/lib/ohai/loader.rb +1 -1
- data/lib/ohai/mixin/gce_metadata.rb +2 -1
- data/lib/ohai/plugins/cloud.rb +56 -6
- data/lib/ohai/plugins/cloud_v2.rb +29 -1
- data/lib/ohai/plugins/cloudstack.rb +7 -0
- data/lib/ohai/plugins/digital_ocean.rb +81 -0
- data/lib/ohai/plugins/elixir.rb +32 -0
- data/lib/ohai/plugins/linode.rb +1 -0
- data/lib/ohai/plugins/linux/block_device.rb +5 -0
- data/lib/ohai/plugins/linux/cpu.rb +21 -1
- data/lib/ohai/plugins/linux/filesystem.rb +1 -1
- data/lib/ohai/plugins/linux/network.rb +6 -2
- data/lib/ohai/plugins/linux/platform.rb +2 -0
- data/lib/ohai/plugins/linux/virtualization.rb +14 -3
- data/lib/ohai/plugins/php.rb +13 -6
- data/lib/ohai/plugins/ruby.rb +10 -10
- data/lib/ohai/plugins/rust.rb +32 -0
- data/lib/ohai/plugins/ssh_host_key.rb +6 -0
- data/lib/ohai/util/ip_helper.rb +52 -0
- data/lib/ohai/version.rb +1 -1
- data/spec/data/plugins/php.output +16 -0
- data/spec/unit/plugins/cloud_spec.rb +63 -9
- data/spec/unit/plugins/cloud_v2_spec.rb +123 -25
- data/spec/unit/plugins/cloudstack_spec.rb +1 -1
- data/spec/unit/plugins/digital_ocean_spec.rb +211 -0
- data/spec/unit/plugins/elixir_spec.rb +46 -0
- data/spec/unit/plugins/linux/cpu_spec.rb +112 -35
- data/spec/unit/plugins/linux/filesystem_spec.rb +7 -7
- data/spec/unit/plugins/linux/network_spec.rb +63 -4
- data/spec/unit/plugins/linux/platform_spec.rb +13 -0
- data/spec/unit/plugins/linux/virtualization_spec.rb +146 -21
- data/spec/unit/plugins/php_spec.rb +37 -3
- data/spec/unit/plugins/rust_spec.rb +43 -0
- data/spec/unit/plugins/ssh_host_keys_spec.rb +11 -0
- data/spec/unit/util/ip_helper_spec.rb +128 -0
- metadata +49 -41
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NTMxZTg2ZjdiNDBiZDMwMWNjYjUwZDc5OTI3ZGFhZmIxZDcxZWMxOA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MmFlODM1NWNiYjVhNzAyODdhY2IxMWM4OGNjZjFkY2YxY2E2NDdmOQ==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZjM4Y2YyYWRiYmZmZmYxOTlmMjBjODAxM2VmMWYxOGYyYzQ2NTM3NWM4ZTM3
|
10
|
+
OTIwZGVjM2U2YmRhZWQ2ZWZiMjcyMDg0ZmZiZGMxZjliOGIzMDNiY2Q1MmY0
|
11
|
+
ODdlYWIzZTkwMmFlMWE1NWM5NTY3NjIyY2M3NWM4Y2U2MjgwZWU=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
YjI3ZWYzOGQ3N2Y5OWM2ZDc5NzNlYWYxYzVhYmM5NmExZTI0MTAyNjMzZDEw
|
14
|
+
Mzg1YmEyZjdmZTA4MTMyMDA4ZjdiMDkxZTMxMzE2ZjY1Mzc5ZWUyMTI3Yjcy
|
15
|
+
ZDI1YWY2ZmFlY2E5MjVkMTYxOWE3MmI2ODBhODhmNzVmNDE1YzQ=
|
data/lib/ohai/loader.rb
CHANGED
@@ -111,7 +111,7 @@ module Ohai
|
|
111
111
|
Ohai::Log.warn("[DEPRECATION] Plugin at #{plugin_path} is a version 6 plugin. \
|
112
112
|
Version 6 plugins will not be supported in future releases of Ohai. \
|
113
113
|
Please upgrade your plugin to version 7 plugin syntax. \
|
114
|
-
For more information visit here: docs.
|
114
|
+
For more information visit here: docs.chef.io/ohai_custom.html")
|
115
115
|
|
116
116
|
load_v6_plugin_class(contents, plugin_path, plugin_dir_path)
|
117
117
|
end
|
@@ -21,7 +21,8 @@ module Ohai
|
|
21
21
|
module Mixin
|
22
22
|
module GCEMetadata
|
23
23
|
|
24
|
-
|
24
|
+
# Trailing dot to host is added to avoid DNS search path
|
25
|
+
GCE_METADATA_ADDR = "metadata.google.internal." unless defined?(GCE_METADATA_ADDR)
|
25
26
|
GCE_METADATA_URL = "/computeMetadata/v1beta1/?recursive=true" unless defined?(GCE_METADATA_URL)
|
26
27
|
|
27
28
|
def can_metadata_connect?(addr, port, timeout=2)
|
data/lib/ohai/plugins/cloud.rb
CHANGED
@@ -25,6 +25,7 @@ Ohai.plugin(:Cloud) do
|
|
25
25
|
depends "openstack"
|
26
26
|
depends "azure"
|
27
27
|
depends "cloudstack"
|
28
|
+
depends "digital_ocean"
|
28
29
|
|
29
30
|
# Make top-level cloud hashes
|
30
31
|
#
|
@@ -229,16 +230,59 @@ Ohai.plugin(:Cloud) do
|
|
229
230
|
cloudstack != nil
|
230
231
|
end
|
231
232
|
|
232
|
-
# Fill cloud hash with cloudstack values
|
233
|
+
# Fill cloud hash with cloudstack values. Cloudstack is a bit different in that
|
234
|
+
# the local interface can be a public or private ip is using basic networking.
|
235
|
+
# When using advanced networking, the public_ipv4 passed in the metadata isn't
|
236
|
+
# usually going to be the public ip of the interface, so don't use that value. As
|
237
|
+
# per the Cloudstack documentation its actually the NAT router IP.
|
233
238
|
def get_cloudstack_values
|
234
|
-
cloud[:public_ips] << cloudstack['public_ipv4']
|
235
|
-
cloud[:private_ips] << cloudstack['local_ipv4']
|
236
|
-
cloud[:public_ipv4] = cloudstack['public_ipv4']
|
237
|
-
cloud[:public_hostname] = cloudstack['public_hostname']
|
238
239
|
cloud[:local_ipv4] = cloudstack['local_ipv4']
|
240
|
+
|
241
|
+
if cloudstack['local_ipv4']
|
242
|
+
# Private IPv4 address
|
243
|
+
if cloudstack['local_ipv4'] =~ /\A(10\.|192\.168\.|172\.1[6789]\.|172\.2.\.|172\.3[01]\.)/
|
244
|
+
cloud[:private_ips] << cloudstack['local_ipv4']
|
245
|
+
cloud[:public_ipv4] = nil
|
246
|
+
else
|
247
|
+
cloud[:public_ips] << cloudstack['local_ipv4']
|
248
|
+
# Yes, not a mistake, for basic networking this may be true
|
249
|
+
cloud[:public_ipv4] = cloudstack['local_ipv4']
|
250
|
+
end
|
251
|
+
end
|
252
|
+
cloud[:public_hostname] = cloudstack['public_hostname']
|
239
253
|
cloud[:local_hostname] = cloudstack['local_hostname']
|
240
254
|
cloud[:vm_id] = cloudstack['vm_id']
|
241
|
-
cloud[:
|
255
|
+
cloud[:local_hostname] = cloudstack['local_hostname']
|
256
|
+
cloud[:provider] = 'cloudstack'
|
257
|
+
end
|
258
|
+
|
259
|
+
# ----------------------------------------
|
260
|
+
# digital_ocean
|
261
|
+
# ----------------------------------------
|
262
|
+
|
263
|
+
# Is current cloud digital_ocean?
|
264
|
+
#
|
265
|
+
# === Return
|
266
|
+
# true:: If digital_ocean Mash is defined
|
267
|
+
# false:: Otherwise
|
268
|
+
def on_digital_ocean?
|
269
|
+
digital_ocean != nil
|
270
|
+
end
|
271
|
+
|
272
|
+
# Fill cloud hash with linode values
|
273
|
+
def get_digital_ocean_values
|
274
|
+
public_ipv4 = digital_ocean['networks']['v4'].select {|address| address['type'] == 'public'}
|
275
|
+
private_ipv4 = digital_ocean['networks']['v4'].select {|address| address['type'] == 'private'}
|
276
|
+
public_ipv6 = digital_ocean['networks']['v6'].select {|address| address['type'] == 'public'}
|
277
|
+
private_ipv6 = digital_ocean['networks']['v6'].select {|address| address['type'] == 'private'}
|
278
|
+
cloud[:public_ips].concat public_ipv4+public_ipv6
|
279
|
+
cloud[:private_ips].concat private_ipv4+private_ipv6
|
280
|
+
cloud[:public_ipv4] = public_ipv4.first
|
281
|
+
cloud[:public_ipv6] = public_ipv6.first
|
282
|
+
cloud[:local_ipv4] = private_ipv4.first
|
283
|
+
cloud[:local_ipv6] = private_ipv6.first
|
284
|
+
cloud[:public_hostname] = digital_ocean['name']
|
285
|
+
cloud[:provider] = "digital_ocean"
|
242
286
|
end
|
243
287
|
|
244
288
|
collect_data do
|
@@ -288,5 +332,11 @@ Ohai.plugin(:Cloud) do
|
|
288
332
|
create_objects
|
289
333
|
get_cloudstack_values
|
290
334
|
end
|
335
|
+
|
336
|
+
# setup digital_ocean cloud data
|
337
|
+
if on_digital_ocean?
|
338
|
+
create_objects
|
339
|
+
get_digital_ocean_values
|
340
|
+
end
|
291
341
|
end
|
292
342
|
end
|
@@ -24,6 +24,7 @@ Ohai.plugin(:CloudV2) do
|
|
24
24
|
depends "linode"
|
25
25
|
depends "openstack"
|
26
26
|
depends "azure"
|
27
|
+
depends "digital_ocean"
|
27
28
|
|
28
29
|
# Class to help enforce the interface exposed to node[:cloud] (OHAI-542)
|
29
30
|
#
|
@@ -124,7 +125,7 @@ Ohai.plugin(:CloudV2) do
|
|
124
125
|
def get_gce_values
|
125
126
|
public_ips = gce['instance']['networkInterfaces'].collect do |interface|
|
126
127
|
if interface.has_key?('accessConfigs')
|
127
|
-
interface['accessConfigs'].collect{|ac| ac['externalIp']}
|
128
|
+
interface['accessConfigs'].collect{|ac| ac['externalIp'] unless ac['externalIp'] == ''}
|
128
129
|
end
|
129
130
|
end.flatten.compact
|
130
131
|
|
@@ -270,6 +271,32 @@ Ohai.plugin(:CloudV2) do
|
|
270
271
|
@cloud_attr_obj.provider = "azure"
|
271
272
|
end
|
272
273
|
|
274
|
+
|
275
|
+
# ----------------------------------------
|
276
|
+
# digital_ocean
|
277
|
+
# ----------------------------------------
|
278
|
+
|
279
|
+
# Is current cloud digital_ocean?
|
280
|
+
#
|
281
|
+
# === Return
|
282
|
+
# true:: If digital_ocean Mash is defined
|
283
|
+
# false:: Otherwise
|
284
|
+
def on_digital_ocean?
|
285
|
+
digital_ocean != nil
|
286
|
+
end
|
287
|
+
|
288
|
+
# Fill cloud hash with digital_ocean values
|
289
|
+
def get_digital_ocean_values
|
290
|
+
digital_ocean['networks'].each do |network, addresses|
|
291
|
+
type = network == 'v4' ? 'ipv4' : 'ipv6'
|
292
|
+
addresses.each do |address|
|
293
|
+
@cloud_attr_obj.send("add_#{type}_addr", address['ip_address'], address['type'].to_sym)
|
294
|
+
end
|
295
|
+
end
|
296
|
+
@cloud_attr_obj.public_hostname = digital_ocean['name']
|
297
|
+
@cloud_attr_obj.provider = "digital_ocean"
|
298
|
+
end
|
299
|
+
|
273
300
|
collect_data do
|
274
301
|
require "ipaddr"
|
275
302
|
|
@@ -282,6 +309,7 @@ Ohai.plugin(:CloudV2) do
|
|
282
309
|
get_eucalyptus_values if on_eucalyptus?
|
283
310
|
get_openstack_values if on_openstack?
|
284
311
|
get_azure_values if on_azure?
|
312
|
+
get_digital_ocean_values if on_digital_ocean?
|
285
313
|
|
286
314
|
# set node[:cloud] hash here
|
287
315
|
cloud_v2 @cloud_attr_obj.cloud_mash
|
@@ -1,5 +1,7 @@
|
|
1
1
|
#
|
2
|
+
# Author:: Peter Schroeter <peter.schroeter@rightscale.com>
|
2
3
|
# Author:: Olle Lundberg (<geek@nerd.sh>)
|
4
|
+
# Copyright:: Copyright (c) 2010-2014 RightScale Inc
|
3
5
|
# Copyright:: Copyright (c) 2014 Opscode, Inc.
|
4
6
|
# License:: Apache License, Version 2.0
|
5
7
|
#
|
@@ -31,6 +33,11 @@ Ohai.plugin(:Cloudstack) do
|
|
31
33
|
cloudstack Mash.new
|
32
34
|
Ohai::Log.debug("connecting to the 'cloudstack' metadata service")
|
33
35
|
fetch_metadata.each { |k, v| cloudstack[k] = v }
|
36
|
+
# Note: the cloudstack public_ipv4 is the value of the NAT router (as per cloudstack documentation)
|
37
|
+
# and not necessarily the publicly available IP. cloustack semi-supports floating
|
38
|
+
# ips in that the public ip for an instance can be an IP different from the NAT router
|
39
|
+
cloudstack['router_ipv4'] = cloudstack.delete('public_ipv4')
|
40
|
+
cloudstack['dhcp_lease_provider_ip'] = dhcp_ip
|
34
41
|
else
|
35
42
|
Ohai::Log.debug("unable to connect to the 'cloudstack' metadata service")
|
36
43
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Stafford Brunk (<stafford.brunk@gmail.com>)
|
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
|
+
require 'ohai/util/ip_helper'
|
18
|
+
|
19
|
+
Ohai.plugin(:DigitalOcean) do
|
20
|
+
include Ohai::Util::IpHelper
|
21
|
+
|
22
|
+
DIGITALOCEAN_FILE = '/etc/digitalocean'
|
23
|
+
|
24
|
+
provides "digital_ocean"
|
25
|
+
|
26
|
+
depends "network/interfaces"
|
27
|
+
|
28
|
+
def extract_droplet_ip_addresses
|
29
|
+
addresses = Mash.new({'v4' => [], 'v6' => []})
|
30
|
+
network[:interfaces].each_value do |iface|
|
31
|
+
iface[:addresses].each do |address, details|
|
32
|
+
next if loopback?(address) || details[:family] == 'lladdr'
|
33
|
+
|
34
|
+
ip = IPAddress(address)
|
35
|
+
type = digital_ocean_address_type(ip)
|
36
|
+
address_hash = build_address_hash(ip, details)
|
37
|
+
addresses[type] << address_hash
|
38
|
+
end
|
39
|
+
end
|
40
|
+
addresses
|
41
|
+
end
|
42
|
+
|
43
|
+
def build_address_hash(ip, details)
|
44
|
+
address_hash = Mash.new({
|
45
|
+
'ip_address' => ip.address,
|
46
|
+
'type' => private_address?(ip.address) ? 'private' : 'public'
|
47
|
+
})
|
48
|
+
|
49
|
+
if ip.ipv4?
|
50
|
+
address_hash['netmask'] = details[:netmask]
|
51
|
+
elsif ip.ipv6?
|
52
|
+
address_hash['cidr'] = ip.prefix
|
53
|
+
end
|
54
|
+
address_hash
|
55
|
+
end
|
56
|
+
|
57
|
+
def digital_ocean_address_type(ip)
|
58
|
+
ip.ipv4? ? 'v4' : 'v6'
|
59
|
+
end
|
60
|
+
|
61
|
+
def looks_like_digital_ocean?
|
62
|
+
hint?('digital_ocean') || File.exist?(DIGITALOCEAN_FILE)
|
63
|
+
end
|
64
|
+
|
65
|
+
collect_data do
|
66
|
+
if looks_like_digital_ocean?
|
67
|
+
digital_ocean Mash.new
|
68
|
+
hint = hint?('digital_ocean') || {}
|
69
|
+
hint.each {|k, v| digital_ocean[k] = v unless k == 'ip_addresses'}
|
70
|
+
|
71
|
+
# Extract actual ip addresses
|
72
|
+
# The networks sub-hash is structured similarly to how
|
73
|
+
# Digital Ocean's v2 API structures things:
|
74
|
+
# https://developers.digitalocean.com/#droplets
|
75
|
+
digital_ocean[:networks] = extract_droplet_ip_addresses
|
76
|
+
else
|
77
|
+
Ohai::Log.debug("No hints present for digital_ocean.")
|
78
|
+
false
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# Author:: Christopher M Luciano (<cmlucian@us.ibm.com>)
|
2
|
+
# License:: Apache License, Version 2.0
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
Ohai.plugin(:Elixir) do
|
17
|
+
provides "languages/elixir"
|
18
|
+
|
19
|
+
depends "languages"
|
20
|
+
|
21
|
+
collect_data do
|
22
|
+
output = nil
|
23
|
+
|
24
|
+
elixir = Mash.new
|
25
|
+
so = shell_out("elixir -v")
|
26
|
+
if so.exitstatus == 0
|
27
|
+
output = so.stdout.split
|
28
|
+
elixir[:version] = output[1]
|
29
|
+
languages[:elixir] = elixir if elixir[:version]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/ohai/plugins/linode.rb
CHANGED
@@ -35,6 +35,11 @@ Ohai.plugin(:BlockDevice) do
|
|
35
35
|
File.open("/sys/block/#{dir}/device/#{check}") { |f| block[dir][check] = f.read_nonblock(1024).strip }
|
36
36
|
end
|
37
37
|
end
|
38
|
+
%w{rotational}.each do |check|
|
39
|
+
if File.exists?("/sys/block/#{dir}/queue/#{check}")
|
40
|
+
File.open("/sys/block/#{dir}/queue/#{check}") { |f| block[dir][check] = f.read_nonblock(1024).strip }
|
41
|
+
end
|
42
|
+
end
|
38
43
|
end
|
39
44
|
block_device block
|
40
45
|
end
|
@@ -32,7 +32,12 @@ Ohai.plugin(:CPU) do
|
|
32
32
|
current_cpu = $1
|
33
33
|
cpu_number += 1
|
34
34
|
when /vendor_id\s+:\s(.+)/
|
35
|
-
|
35
|
+
vendor_id = $1
|
36
|
+
if vendor_id =~ (/IBM\/S390/)
|
37
|
+
cpuinfo["vendor_id"] = vendor_id
|
38
|
+
else
|
39
|
+
cpuinfo[current_cpu]["vendor_id"] = vendor_id
|
40
|
+
end
|
36
41
|
when /cpu family\s+:\s(.+)/
|
37
42
|
cpuinfo[current_cpu]["family"] = $1
|
38
43
|
when /model\s+:\s(.+)/
|
@@ -54,6 +59,21 @@ Ohai.plugin(:CPU) do
|
|
54
59
|
cpuinfo[current_cpu]["cache_size"] = $1
|
55
60
|
when /flags\s+:\s(.+)/
|
56
61
|
cpuinfo[current_cpu]["flags"] = $1.split(' ')
|
62
|
+
when /bogomips per cpu:\s(.+)/
|
63
|
+
cpuinfo["bogomips_per_cpu"] = $1
|
64
|
+
when /features\s+:\s(.+)/
|
65
|
+
cpuinfo["features"] = $1.split(' ')
|
66
|
+
when /processor\s(\d):\s(.+)/
|
67
|
+
current_cpu = $1
|
68
|
+
cpu_number += 1
|
69
|
+
cpuinfo[current_cpu] = Mash.new
|
70
|
+
current_cpu_info = $2.split(',')
|
71
|
+
for i in current_cpu_info
|
72
|
+
name_value = i.split('=')
|
73
|
+
name = name_value[0].strip
|
74
|
+
value = name_value[1].strip
|
75
|
+
cpuinfo[current_cpu][name] = value
|
76
|
+
end
|
57
77
|
end
|
58
78
|
end
|
59
79
|
|
@@ -33,6 +33,10 @@ Ohai.plugin(:Network) do
|
|
33
33
|
encap
|
34
34
|
end
|
35
35
|
|
36
|
+
def iproute2_binary_available?
|
37
|
+
["/sbin/ip", "/usr/bin/ip"].any? { |path| File.exist?(path) }
|
38
|
+
end
|
39
|
+
|
36
40
|
collect_data(:linux) do
|
37
41
|
require 'ipaddr'
|
38
42
|
|
@@ -49,8 +53,7 @@ Ohai.plugin(:Network) do
|
|
49
53
|
# The '@eth0:' portion doesn't exist on primary interfaces and thus is optional in the regex
|
50
54
|
IPROUTE_INT_REGEX = /^(\d+): ([0-9a-zA-Z@:\.\-_]*?)(@[0-9a-zA-Z]+|):\s/ unless defined? IPROUTE_INT_REGEX
|
51
55
|
|
52
|
-
if
|
53
|
-
|
56
|
+
if iproute2_binary_available?
|
54
57
|
# families to get default routes from
|
55
58
|
families = [{
|
56
59
|
:name => "inet",
|
@@ -137,6 +140,7 @@ Ohai.plugin(:Network) do
|
|
137
140
|
so.stdout.lines do |line|
|
138
141
|
if line =~ IPROUTE_INT_REGEX
|
139
142
|
tmp_int = $2
|
143
|
+
iface[tmp_int] = Mash.new unless iface[tmp_int]
|
140
144
|
net_counters[tmp_int] = Mash.new unless net_counters[tmp_int]
|
141
145
|
end
|
142
146
|
|
@@ -87,10 +87,12 @@ Ohai.plugin(:Platform) do
|
|
87
87
|
platform "arch"
|
88
88
|
# no way to determine platform_version in a rolling release distribution
|
89
89
|
# kernel release will be used - ex. 2.6.32-ARCH
|
90
|
+
platform_version `uname -r`.strip
|
90
91
|
elsif File.exists?('/etc/exherbo-release')
|
91
92
|
platform "exherbo"
|
92
93
|
# no way to determine platform_version in a rolling release distribution
|
93
94
|
# kernel release will be used - ex. 3.13
|
95
|
+
platform_version `uname -r`.strip
|
94
96
|
elsif lsb[:id] =~ /RedHat/i
|
95
97
|
platform "redhat"
|
96
98
|
platform_version lsb[:release]
|
@@ -27,6 +27,10 @@ Ohai.plugin(:Virtualization) do
|
|
27
27
|
which('lxc-version')
|
28
28
|
end
|
29
29
|
|
30
|
+
def docker_exists?
|
31
|
+
which('docker')
|
32
|
+
end
|
33
|
+
|
30
34
|
collect_data(:linux) do
|
31
35
|
virtualization Mash.new unless virtualization
|
32
36
|
virtualization[:systems] = Mash.new unless virtualization[:systems]
|
@@ -129,6 +133,10 @@ Ohai.plugin(:Virtualization) do
|
|
129
133
|
virtualization[:role] = "guest"
|
130
134
|
virtualization[:systems][:vbox] = "guest"
|
131
135
|
end
|
136
|
+
when /Product Name: OpenStack/
|
137
|
+
virtualization[:system] = "openstack"
|
138
|
+
virtualization[:role] = "guest"
|
139
|
+
virtualization[:systems][:openstack] = "guest"
|
132
140
|
else
|
133
141
|
nil
|
134
142
|
end
|
@@ -170,9 +178,9 @@ Ohai.plugin(:Virtualization) do
|
|
170
178
|
# Kernel docs, https://www.kernel.org/doc/Documentation/cgroups
|
171
179
|
if File.exists?("/proc/self/cgroup")
|
172
180
|
if File.read("/proc/self/cgroup") =~ %r{^\d+:[^:]+:/(lxc|docker)/.+$}
|
173
|
-
virtualization[:system] =
|
181
|
+
virtualization[:system] = $1
|
174
182
|
virtualization[:role] = "guest"
|
175
|
-
virtualization[:systems][
|
183
|
+
virtualization[:systems][$1.to_sym] = "guest"
|
176
184
|
elsif lxc_version_exists? && File.read("/proc/self/cgroup") =~ %r{\d:[^:]+:/$}
|
177
185
|
# lxc-version shouldn't be installed by default
|
178
186
|
# Even so, it is likely we are on an LXC capable host that is not being used as such
|
@@ -181,12 +189,15 @@ Ohai.plugin(:Virtualization) do
|
|
181
189
|
virtualization[:system] = "lxc"
|
182
190
|
virtualization[:role] = "host"
|
183
191
|
end
|
184
|
-
|
185
192
|
# In general, the 'systems' framework from OHAI-182 is less susceptible to conflicts
|
186
193
|
# But, this could overwrite virtualization[:systems][:lxc] = "guest"
|
187
194
|
# If so, we may need to look further for a differentiator (OHAI-573)
|
188
195
|
virtualization[:systems][:lxc] = "host"
|
189
196
|
end
|
197
|
+
elsif File.exists?("/.dockerenv") || File.exists?("/.dockerinit")
|
198
|
+
virtualization[:system] = "docker"
|
199
|
+
virtualization[:role] = "guest"
|
200
|
+
virtualization[:systems][:docker] = "guest"
|
190
201
|
end
|
191
202
|
end
|
192
203
|
end
|