ohai 0.6.4 → 0.6.6.rc.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.
- data/lib/ohai/mixin/command.rb +24 -0
- data/lib/ohai/plugins/freebsd/virtualization.rb +11 -0
- data/lib/ohai/plugins/ip_scopes.rb +2 -0
- data/lib/ohai/plugins/linux/filesystem.rb +1 -1
- data/lib/ohai/plugins/linux/lsb.rb +28 -7
- data/lib/ohai/plugins/linux/platform.rb +1 -0
- data/lib/ohai/plugins/linux/virtualization.rb +30 -11
- data/lib/ohai/plugins/passwd.rb +16 -6
- data/lib/ohai/plugins/rackspace.rb +1 -1
- data/lib/ohai/plugins/ruby.rb +9 -3
- data/lib/ohai/plugins/sigar/network_route.rb +51 -0
- data/lib/ohai/plugins/solaris2/network.rb +1 -1
- data/lib/ohai/plugins/solaris2/platform.rb +26 -3
- data/lib/ohai/plugins/solaris2/zpools.rb +64 -0
- data/lib/ohai/plugins/windows/filesystem.rb +1 -1
- data/lib/ohai/plugins/windows/kernel.rb +3 -3
- data/lib/ohai/plugins/windows/network.rb +5 -4
- data/lib/ohai/version.rb +1 -1
- data/spec/ohai/mixin/command_spec.rb +9 -0
- data/spec/ohai/plugins/fail_spec.rb +62 -0
- data/spec/ohai/plugins/linux/lsb_spec.rb +77 -25
- data/spec/ohai/plugins/linux/platform_spec.rb +21 -0
- data/spec/ohai/plugins/linux/virtualization_spec.rb +55 -7
- data/spec/ohai/plugins/passwd_spec.rb +14 -3
- data/spec/ohai/plugins/ruby_spec.rb +2 -0
- data/spec/ohai/plugins/sigar/network_route_spec.rb +134 -0
- metadata +32 -12
data/lib/ohai/mixin/command.rb
CHANGED
@@ -19,6 +19,7 @@
|
|
19
19
|
require 'ohai/exception'
|
20
20
|
require 'ohai/config'
|
21
21
|
require 'ohai/log'
|
22
|
+
require 'stringio'
|
22
23
|
require 'tmpdir'
|
23
24
|
require 'fcntl'
|
24
25
|
require 'etc'
|
@@ -299,6 +300,29 @@ module Ohai
|
|
299
300
|
results = Process.waitpid2(cid) unless results
|
300
301
|
o.rewind
|
301
302
|
e.rewind
|
303
|
+
|
304
|
+
# **OHAI-275**
|
305
|
+
# The way we read from the pipes causes ruby to mark the strings
|
306
|
+
# as ASCII-8BIT (i.e., binary), but the content should be encoded
|
307
|
+
# as the default external encoding. For example, a command may
|
308
|
+
# return data encoded as UTF-8, but the strings will be marked as
|
309
|
+
# ASCII-8BIT. Later, when you attempt to print the values as
|
310
|
+
# UTF-8, Ruby will try to convert them and fail, raising an
|
311
|
+
# error.
|
312
|
+
#
|
313
|
+
# Ruby always marks strings as binary when read from IO in
|
314
|
+
# incomplete chunks, since you may have split the data within a
|
315
|
+
# multibyte char. In our case, we concat the chunks back
|
316
|
+
# together, so any multibyte chars will be reassembled.
|
317
|
+
#
|
318
|
+
# Note that all of this applies only to Ruby 1.9, which we check
|
319
|
+
# for by making sure that the Encoding class exists and strings
|
320
|
+
# have encoding methods.
|
321
|
+
if "".respond_to?(:force_encoding) && defined?(Encoding)
|
322
|
+
o.string.force_encoding(Encoding.default_external)
|
323
|
+
e.string.force_encoding(Encoding.default_external)
|
324
|
+
end
|
325
|
+
|
302
326
|
b[cid, pi[0], o, e]
|
303
327
|
results.last
|
304
328
|
end
|
@@ -20,6 +20,17 @@ provides "virtualization"
|
|
20
20
|
|
21
21
|
virtualization Mash.new
|
22
22
|
|
23
|
+
if from("sysctl -n security.jail.jailed").to_i == 1
|
24
|
+
virtualization[:system] = "jail"
|
25
|
+
virtualization[:role] = "guest"
|
26
|
+
end
|
27
|
+
|
28
|
+
# XXX doesn't work when jail is there but not running (ezjail-admin stop)
|
29
|
+
if from("jls -n \| wc -l").to_i >= 1
|
30
|
+
virtualization[:system] = "jail"
|
31
|
+
virtualization[:role] = "host"
|
32
|
+
end
|
33
|
+
|
23
34
|
# KVM Host support for FreeBSD is in development
|
24
35
|
# http://feanor.sssup.it/~fabio/freebsd/lkvm/
|
25
36
|
|
@@ -24,6 +24,8 @@ begin
|
|
24
24
|
require_plugin "network"
|
25
25
|
|
26
26
|
network['interfaces'].keys.each do |ifName|
|
27
|
+
next if network['interfaces'][ifName]['addresses'].nil?
|
28
|
+
|
27
29
|
network['interfaces'][ifName]['addresses'].each do |address,attrs|
|
28
30
|
begin
|
29
31
|
attrs.merge! 'ip_scope' => address.to_ip.scope
|
@@ -66,7 +66,7 @@ popen4("ls -l /dev/disk/by-uuid/* | awk '{print $11, $9}'") do |pid, stdin, stdo
|
|
66
66
|
end
|
67
67
|
|
68
68
|
# Grab any missing mount information from /proc/mounts
|
69
|
-
File.open('/proc/mounts').each do |line|
|
69
|
+
File.open('/proc/mounts').read_nonblock(4096).each do |line|
|
70
70
|
if line =~ /^(\S+) (\S+) (\S+) (\S+) \S+ \S+$/
|
71
71
|
filesystem = $1
|
72
72
|
next if fs.has_key?(filesystem)
|
@@ -20,19 +20,40 @@ provides "lsb"
|
|
20
20
|
|
21
21
|
lsb Mash.new
|
22
22
|
|
23
|
-
|
23
|
+
if File.exists?("/etc/lsb-release")
|
24
24
|
File.open("/etc/lsb-release").each do |line|
|
25
25
|
case line
|
26
|
-
when /^DISTRIB_ID=(
|
26
|
+
when /^DISTRIB_ID=["']?(.+?)["']?$/
|
27
27
|
lsb[:id] = $1
|
28
|
-
when /^DISTRIB_RELEASE=(
|
28
|
+
when /^DISTRIB_RELEASE=["']?(.+?)["']?$/
|
29
29
|
lsb[:release] = $1
|
30
|
-
when /^DISTRIB_CODENAME=(
|
30
|
+
when /^DISTRIB_CODENAME=["']?(.+?)["']?$/
|
31
31
|
lsb[:codename] = $1
|
32
|
-
when /^DISTRIB_DESCRIPTION=(
|
32
|
+
when /^DISTRIB_DESCRIPTION=["']?(.+?)["']?$/
|
33
33
|
lsb[:description] = $1
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
37
|
-
|
36
|
+
elsif File.exists?("/usr/bin/lsb_release")
|
37
|
+
# Fedora/Redhat, requires redhat-lsb package
|
38
|
+
popen4("lsb_release -a") do |pid, stdin, stdout, stderr|
|
39
|
+
|
40
|
+
stdin.close
|
41
|
+
stdout.each do |line|
|
42
|
+
case line
|
43
|
+
when /^Distributor ID:\s+(.+)$/
|
44
|
+
lsb[:id] = $1
|
45
|
+
when /^Description:\s+(.+)$/
|
46
|
+
lsb[:description] = $1
|
47
|
+
when /^Release:\s+(.+)$/
|
48
|
+
lsb[:release] = $1
|
49
|
+
when /^Codename:\s+(.+)$/
|
50
|
+
lsb[:codename] = $1
|
51
|
+
else
|
52
|
+
lsb[:id] = line
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
else
|
58
|
+
Ohai::Log.debug("Skipping LSB, cannot find /etc/lsb-release or /usr/bin/lsb_release")
|
38
59
|
end
|
@@ -47,6 +47,7 @@ elsif File.exists?('/etc/gentoo-release')
|
|
47
47
|
elsif File.exists?('/etc/SuSE-release')
|
48
48
|
platform "suse"
|
49
49
|
platform_version File.read("/etc/SuSE-release").scan(/VERSION = (\d+)\nPATCHLEVEL = (\d+)/).flatten.join(".")
|
50
|
+
platform_version File.read("/etc/SuSE-release").scan(/VERSION = ([\d\.]{2,})/).flatten.join(".") if platform_version == ""
|
50
51
|
elsif File.exists?('/etc/slackware-version')
|
51
52
|
platform "slackware"
|
52
53
|
platform_version File.read("/etc/slackware-version").scan(/(\d+|\.+)/).join
|
@@ -22,19 +22,27 @@ virtualization Mash.new
|
|
22
22
|
|
23
23
|
# if it is possible to detect paravirt vs hardware virt, it should be put in
|
24
24
|
# virtualization[:mechanism]
|
25
|
-
if File.exists?("/proc/xen/capabilities")
|
26
|
-
virtualization[:system] = "xen"
|
27
|
-
virtualization[:role] = "host"
|
28
|
-
elsif File.exists?("/proc/sys/xen/independent_wallclock")
|
25
|
+
if File.exists?("/proc/xen/capabilities")
|
29
26
|
virtualization[:system] = "xen"
|
30
|
-
|
27
|
+
if File.read("/proc/xen/capabilities") =~ /control_d/i
|
28
|
+
virtualization[:role] = "host"
|
29
|
+
else
|
30
|
+
virtualization[:role] = "guest"
|
31
|
+
end
|
31
32
|
end
|
32
33
|
|
33
|
-
# Detect
|
34
|
+
# Detect from kernel module
|
34
35
|
if File.exists?("/proc/modules")
|
35
|
-
|
36
|
+
modules = File.read("/proc/modules")
|
37
|
+
if modules =~ /^kvm/
|
36
38
|
virtualization[:system] = "kvm"
|
37
39
|
virtualization[:role] = "host"
|
40
|
+
elsif modules =~ /^vboxdrv/
|
41
|
+
virtualization[:system] = "vbox"
|
42
|
+
virtualization[:role] = "host"
|
43
|
+
elsif modules =~ /^vboxguest/
|
44
|
+
virtualization[:system] = "vbox"
|
45
|
+
virtualization[:role] = "guest"
|
38
46
|
end
|
39
47
|
end
|
40
48
|
|
@@ -50,6 +58,17 @@ if File.exists?("/proc/cpuinfo")
|
|
50
58
|
end
|
51
59
|
end
|
52
60
|
|
61
|
+
# http://wiki.openvz.org/Proc/user_beancounters
|
62
|
+
if File.exists?("/proc/user_beancounters")
|
63
|
+
if File.read("/proc/user_beancounters") =~ /\n\s+0:\s+/
|
64
|
+
virtualization[:emulator] = "openvz"
|
65
|
+
virtualization[:role] = "host"
|
66
|
+
else
|
67
|
+
virtualization[:emulator] = "openvz"
|
68
|
+
virtualization[:role] = "guest"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
53
72
|
# http://www.dmo.ca/blog/detecting-virtualization-on-linux
|
54
73
|
if File.exists?("/usr/sbin/dmidecode")
|
55
74
|
popen4("dmidecode") do |pid, stdin, stdout, stderr|
|
@@ -57,19 +76,19 @@ if File.exists?("/usr/sbin/dmidecode")
|
|
57
76
|
dmi_info = stdout.read
|
58
77
|
case dmi_info
|
59
78
|
when /Manufacturer: Microsoft/
|
60
|
-
if dmi_info =~ /Product Name: Virtual Machine/
|
79
|
+
if dmi_info =~ /Product Name: Virtual Machine/
|
61
80
|
virtualization[:system] = "virtualpc"
|
62
81
|
virtualization[:role] = "guest"
|
63
|
-
end
|
82
|
+
end
|
64
83
|
when /Manufacturer: VMware/
|
65
|
-
if dmi_info =~ /Product Name: VMware Virtual Platform/
|
84
|
+
if dmi_info =~ /Product Name: VMware Virtual Platform/
|
66
85
|
virtualization[:system] = "vmware"
|
67
86
|
virtualization[:role] = "guest"
|
68
87
|
end
|
69
88
|
when /Manufacturer: Xen/
|
70
89
|
if dmi_info =~ /Product Name: HVM domU/
|
71
90
|
virtualization[:system] = "xen"
|
72
|
-
virtualization[:role] = "guest"
|
91
|
+
virtualization[:role] = "guest"
|
73
92
|
end
|
74
93
|
else
|
75
94
|
nil
|
data/lib/ohai/plugins/passwd.rb
CHANGED
@@ -2,21 +2,31 @@ provides 'etc', 'current_user'
|
|
2
2
|
|
3
3
|
require 'etc'
|
4
4
|
|
5
|
+
def fix_encoding(str)
|
6
|
+
str.force_encoding(Encoding.default_external) if str.respond_to?(:force_encoding)
|
7
|
+
str
|
8
|
+
end
|
9
|
+
|
5
10
|
unless etc
|
6
11
|
etc Mash.new
|
7
12
|
|
8
13
|
etc[:passwd] = Mash.new
|
9
14
|
etc[:group] = Mash.new
|
10
|
-
|
15
|
+
|
11
16
|
Etc.passwd do |entry|
|
12
|
-
|
17
|
+
user_passwd_entry = Mash.new(:dir => entry.dir, :gid => entry.gid, :uid => entry.uid, :shell => entry.shell, :gecos => entry.gecos)
|
18
|
+
user_passwd_entry.each_value {|v| fix_encoding(v)}
|
19
|
+
etc[:passwd][fix_encoding(entry.name)] = user_passwd_entry
|
13
20
|
end
|
14
|
-
|
21
|
+
|
15
22
|
Etc.group do |entry|
|
16
|
-
|
23
|
+
group_entry = Mash.new(:gid => entry.gid,
|
24
|
+
:members => entry.mem.map {|u| fix_encoding(u)})
|
25
|
+
|
26
|
+
etc[:group][fix_encoding(entry.name)] = group_entry
|
17
27
|
end
|
18
28
|
end
|
19
29
|
|
20
30
|
unless current_user
|
21
|
-
current_user Etc.getlogin
|
22
|
-
end
|
31
|
+
current_user fix_encoding(Etc.getlogin)
|
32
|
+
end
|
@@ -36,7 +36,7 @@ end
|
|
36
36
|
def has_rackspace_mac?
|
37
37
|
network[:interfaces].values.each do |iface|
|
38
38
|
unless iface[:arp].nil?
|
39
|
-
return true if iface[:arp].value?("00:00:0c:07:ac:01")
|
39
|
+
return true if iface[:arp].value?("00:00:0c:07:ac:01") or iface[:arp].value?("00:00:0c:9f:f0:01")
|
40
40
|
end
|
41
41
|
end
|
42
42
|
false
|
data/lib/ohai/plugins/ruby.rb
CHANGED
@@ -43,7 +43,7 @@ values = {
|
|
43
43
|
:host_os => "::Config::CONFIG['host_os']",
|
44
44
|
:host_vendor => "::Config::CONFIG['host_vendor']",
|
45
45
|
:bin_dir => "::Config::CONFIG['bindir']",
|
46
|
-
:ruby_bin => "::File.join(::Config::CONFIG['bindir'], ::Config::CONFIG['ruby_install_name'])"
|
46
|
+
:ruby_bin => "::File.join(::Config::CONFIG['bindir'], ::Config::CONFIG['ruby_install_name'])"
|
47
47
|
}
|
48
48
|
|
49
49
|
# Create a query string from above hash
|
@@ -64,6 +64,12 @@ end
|
|
64
64
|
# Perform one more (conditional) query
|
65
65
|
bin_dir = languages[:ruby][:bin_dir]
|
66
66
|
ruby_bin = languages[:ruby][:ruby_bin]
|
67
|
-
|
68
|
-
|
67
|
+
gem_binaries = [
|
68
|
+
run_ruby("require 'rubygems'; puts ::Gem.default_exec_format % 'gem'"),
|
69
|
+
"gem"
|
70
|
+
].map {|bin| ::File.join(bin_dir, bin)}
|
71
|
+
gem_binary = gem_binaries.find {|bin| ::File.exists? bin }
|
72
|
+
if gem_binary
|
73
|
+
languages[:ruby][:gems_dir] = run_ruby "puts %x{#{ruby_bin} #{gem_binary} env gemdir}.chomp!"
|
74
|
+
languages[:ruby][:gem_bin] = gem_binary
|
69
75
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Toomas Pelberg (<toomas.pelberg@playtech.com>)
|
3
|
+
# Copyright:: Copyright (c) 2011 Opscode, Inc.
|
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
|
+
require "sigar"
|
20
|
+
require_plugin "network"
|
21
|
+
|
22
|
+
provides "network"
|
23
|
+
|
24
|
+
def flags(flags)
|
25
|
+
f = ""
|
26
|
+
if (flags & Sigar::RTF_UP) != 0
|
27
|
+
f += "U"
|
28
|
+
end
|
29
|
+
if (flags & Sigar::RTF_GATEWAY) != 0
|
30
|
+
f += "G"
|
31
|
+
end
|
32
|
+
if (flags & Sigar::RTF_HOST) != 0
|
33
|
+
f += "H"
|
34
|
+
end
|
35
|
+
f
|
36
|
+
end
|
37
|
+
|
38
|
+
sigar=Sigar.new
|
39
|
+
sigar.net_route_list.each do |route|
|
40
|
+
next unless network[:interfaces][route.ifname] # this should never happen
|
41
|
+
network[:interfaces][route.ifname][:route] = Mash.new unless network[:interfaces][route.ifname][:route]
|
42
|
+
route_data={}
|
43
|
+
(route.methods-Object.methods).each do |m|
|
44
|
+
if(m == :flags)
|
45
|
+
route_data[m]=flags(route.send(m))
|
46
|
+
else
|
47
|
+
route_data[m]=route.send(m)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
network[:interfaces][route.ifname][:route][route.destination] = route_data
|
51
|
+
end
|
@@ -79,7 +79,7 @@ popen4("ifconfig -a") do |pid, stdin, stdout, stderr|
|
|
79
79
|
stdout.each do |line|
|
80
80
|
if line =~ /^([0-9a-zA-Z\.\:\-]+): \S+ mtu (\d+) index (\d+)/
|
81
81
|
cint = $1
|
82
|
-
iface[cint] = Mash.new
|
82
|
+
iface[cint] = Mash.new unless iface[cint]
|
83
83
|
iface[cint][:mtu] = $2
|
84
84
|
iface[cint][:index] = $3
|
85
85
|
if line =~ / flags\=\d+\<((ADDRCONF|ANYCAST|BROADCAST|CoS|DEPRECATED|DHCP|DUPLICATE|FAILED|FIXEDMTU|INACTIVE|LOOPBACK|MIP|MULTI_BCAST|MULTICAST|NOARP|NOFAILOVER|NOLOCAL|NONUD|NORTEXCH|NOXMIT|OFFLINE|POINTOPOINT|PREFERRED|PRIVATE|ROUTER|RUNNING|STANDBY|TEMPORARY|UNNUMBERED|UP|VIRTUAL|XRESOLV|IPv4|IPv6|,)+)\>\s/
|
@@ -18,12 +18,16 @@
|
|
18
18
|
|
19
19
|
provides "platform", "platform_version", "platform_build"
|
20
20
|
|
21
|
-
|
21
|
+
if File.exists?("/sbin/uname")
|
22
|
+
uname_exec = "/sbin/uname"
|
23
|
+
else
|
24
|
+
uname_exec = "uname"
|
25
|
+
end
|
26
|
+
|
27
|
+
popen4("#{uname_exec} -X") do |pid, stdin, stdout, stderr|
|
22
28
|
stdin.close
|
23
29
|
stdout.each do |line|
|
24
30
|
case line
|
25
|
-
when /^System =\s+(.+)$/
|
26
|
-
platform = ($1.eql?("SunOS") ? "solaris2" : $1.downcase)
|
27
31
|
when /^Release =\s+(.+)$/
|
28
32
|
platform_version $1
|
29
33
|
when /^KernelID =\s+(.+)$/
|
@@ -31,3 +35,22 @@ popen4("uname -X") do |pid, stdin, stdout, stderr|
|
|
31
35
|
end
|
32
36
|
end
|
33
37
|
end
|
38
|
+
|
39
|
+
File.open("/etc/release") do |file|
|
40
|
+
while line = file.gets
|
41
|
+
case line
|
42
|
+
when /^\s*(OpenIndiana).*oi_(\d+).*$/
|
43
|
+
platform "openindiana"
|
44
|
+
platform_version $2
|
45
|
+
when /^\s*(OpenSolaris).*snv_(\d+).*$/
|
46
|
+
platform "opensolaris"
|
47
|
+
platform_version $2
|
48
|
+
when /^\s*(Oracle Solaris) (\d+)\s.*$/
|
49
|
+
platform "solaris2"
|
50
|
+
when /^\s*(Solaris)\s.*$/
|
51
|
+
platform "solaris2"
|
52
|
+
when /^\s*(NexentaCore)\s.*$/
|
53
|
+
platform "nexentacore"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Jason J. W. Williams (williamsjj@digitar.com)
|
3
|
+
# Copyright:: Copyright (c) 2011 Opscode, Inc.
|
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
|
+
provides "zpools"
|
20
|
+
|
21
|
+
pools = Mash.new
|
22
|
+
|
23
|
+
# Grab ZFS zpools overall health and attributes
|
24
|
+
popen4("zpool list -H -o name,size,alloc,free,cap,dedup,health,version") do |pid, stdin, stdout, stderr|
|
25
|
+
stdin.close
|
26
|
+
stdout.each do |line|
|
27
|
+
case line
|
28
|
+
when /^([-_0-9A-Za-z]*)\s+([.0-9]+[MGTPE])\s+([.0-9]+[MGTPE])\s+([.0-9]+[MGTPE])\s+(\d+%)\s+([.0-9]+x)\s+([-_0-9A-Za-z]+)\s+(\d+)$/
|
29
|
+
pools[$1] = Mash.new
|
30
|
+
pools[$1][:pool_size] = $2
|
31
|
+
pools[$1][:pool_allocated] = $3
|
32
|
+
pools[$1][:pool_free] = $4
|
33
|
+
pools[$1][:capacity_used] = $5
|
34
|
+
pools[$1][:dedup_factor] = $6
|
35
|
+
pools[$1][:health] = $7
|
36
|
+
pools[$1][:zpool_version] = $8
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Grab individual health for devices in the zpools
|
42
|
+
for pool in pools.keys
|
43
|
+
pools[pool][:devices] = Mash.new
|
44
|
+
# Run "zpool status" as non-root user (adm) so that
|
45
|
+
# the command won't try to open() each device which can
|
46
|
+
# hang the command if any of the disks are bad.
|
47
|
+
popen4("su adm -c \"zpool status #{pool}\"") do |pid, stdin, stdout, stderr|
|
48
|
+
stdin.close
|
49
|
+
stdout.each do |line|
|
50
|
+
case line
|
51
|
+
when /^\s+(c[-_a-zA-Z0-9]+)\s+([-_a-zA-Z0-9]+)\s+(\d+)\s+(\d+)\s+(\d+)$/
|
52
|
+
pools[pool][:devices][$1] = Mash.new
|
53
|
+
pools[pool][:devices][$1][:state] = $2
|
54
|
+
pools[pool][:devices][$1][:errors] = Mash.new
|
55
|
+
pools[pool][:devices][$1][:errors][:read] = $3
|
56
|
+
pools[pool][:devices][$1][:errors][:write] = $4
|
57
|
+
pools[pool][:devices][$1][:errors][:checksum] = $5
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Set the zpools data
|
64
|
+
zpools pools
|
@@ -29,7 +29,7 @@ disks.each do |disk|
|
|
29
29
|
fs[filesystem] = Mash.new
|
30
30
|
ld_info[filesystem] = Mash.new
|
31
31
|
disk.properties_.each do |p|
|
32
|
-
ld_info[filesystem][p.name.wmi_underscore.to_sym] = disk
|
32
|
+
ld_info[filesystem][p.name.wmi_underscore.to_sym] = disk.send(p.name)
|
33
33
|
end
|
34
34
|
fs[filesystem][:kb_size] = ld_info[filesystem][:size].to_i / 1000
|
35
35
|
fs[filesystem][:kb_available] = ld_info[filesystem][:free_space].to_i / 1000
|
@@ -39,7 +39,7 @@ end
|
|
39
39
|
host = WMI::Win32_OperatingSystem.find(:first)
|
40
40
|
kernel[:os_info] = Mash.new
|
41
41
|
host.properties_.each do |p|
|
42
|
-
kernel[:os_info][p.name.wmi_underscore.to_sym] = host
|
42
|
+
kernel[:os_info][p.name.wmi_underscore.to_sym] = host.send(p.name)
|
43
43
|
end
|
44
44
|
|
45
45
|
kernel[:name] = "#{kernel[:os_info][:caption]}"
|
@@ -50,7 +50,7 @@ kernel[:os] = os_lookup(kernel[:os_info][:os_type]) || languages[:ruby][:host_os
|
|
50
50
|
host = WMI::Win32_ComputerSystem.find(:first)
|
51
51
|
kernel[:cs_info] = Mash.new
|
52
52
|
host.properties_.each do |p|
|
53
|
-
kernel[:cs_info][p.name.wmi_underscore.to_sym] = host
|
53
|
+
kernel[:cs_info][p.name.wmi_underscore.to_sym] = host.send(p.name)
|
54
54
|
end
|
55
55
|
|
56
56
|
kernel[:machine] = machine_lookup("#{kernel[:cs_info][:system_type]}")
|
@@ -62,7 +62,7 @@ drivers = WMI::Win32_PnPSignedDriver.find(:all)
|
|
62
62
|
drivers.each do |driver|
|
63
63
|
pnp_drivers[driver.DeviceID] = Mash.new
|
64
64
|
driver.properties_.each do |p|
|
65
|
-
pnp_drivers[driver.DeviceID][p.name.wmi_underscore.to_sym] = driver
|
65
|
+
pnp_drivers[driver.DeviceID][p.name.wmi_underscore.to_sym] = driver.send(p.name)
|
66
66
|
end
|
67
67
|
if driver.DeviceName
|
68
68
|
kext[driver.DeviceName] = pnp_drivers[driver.DeviceID]
|
@@ -50,7 +50,7 @@ adapters.each do |adapter|
|
|
50
50
|
i = adapter.Index
|
51
51
|
iface_config[i] = Mash.new
|
52
52
|
adapter.properties_.each do |p|
|
53
|
-
iface_config[i][p.name.wmi_underscore.to_sym] = adapter
|
53
|
+
iface_config[i][p.name.wmi_underscore.to_sym] = adapter.send(p.name)
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -59,7 +59,7 @@ adapters.each do |adapter|
|
|
59
59
|
i = adapter.Index
|
60
60
|
iface_instance[i] = Mash.new
|
61
61
|
adapter.properties_.each do |p|
|
62
|
-
iface_instance[i][p.name.wmi_underscore.to_sym] = adapter
|
62
|
+
iface_instance[i][p.name.wmi_underscore.to_sym] = adapter.send(p.name)
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
@@ -87,7 +87,8 @@ iface_instance.keys.each do |i|
|
|
87
87
|
rescue
|
88
88
|
end
|
89
89
|
end
|
90
|
-
|
90
|
+
# Apparently you can have more than one mac_address? Odd.
|
91
|
+
[iface[cint][:configuration][:mac_address]].flatten.each do |mac_addr|
|
91
92
|
iface[cint][:addresses][mac_addr] = {
|
92
93
|
"family" => "lladdr"
|
93
94
|
}
|
@@ -106,7 +107,7 @@ end
|
|
106
107
|
cint=nil
|
107
108
|
status, stdout, stderr = run_command(:command => "arp -a")
|
108
109
|
if status == 0
|
109
|
-
stdout.each do |line|
|
110
|
+
stdout.split("\n").each do |line|
|
110
111
|
if line =~ /^Interface:\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+[-]+\s+(0x\S+)/
|
111
112
|
cint = $2.downcase
|
112
113
|
end
|
data/lib/ohai/version.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
#
|
2
3
|
# Author:: Diego Algorta (diego@oboxodo.com)
|
3
4
|
# Copyright:: Copyright (c) 2009 Diego Algorta
|
@@ -35,4 +36,12 @@ describe Ohai::Mixin::Command, "popen4" do
|
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
39
|
+
if defined?(::Encoding) && "".respond_to?(:force_encoding) #i.e., ruby 1.9
|
40
|
+
it "[OHAI-275] should mark strings as in the default external encoding" do
|
41
|
+
extend Ohai::Mixin::Command
|
42
|
+
snowy = run_command(:command => ("echo '" + ('☃' * 8096) + "'"))[1]
|
43
|
+
snowy.encoding.should == Encoding.default_external
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
38
47
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Toomas Pelberg (toomas.pelberg@playtech.com>)
|
3
|
+
# Copyright:: Copyright (c) 2011 Opscode, Inc.
|
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
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '/spec_helper.rb'))
|
20
|
+
|
21
|
+
tmp = ENV['TMPDIR'] || ENV['TMP'] || ENV['TEMP'] || '/tmp'
|
22
|
+
|
23
|
+
describe Ohai::System, "plugin fail" do
|
24
|
+
|
25
|
+
before(:all) do
|
26
|
+
begin
|
27
|
+
Dir.mkdir("#{tmp}/plugins")
|
28
|
+
rescue Errno::EEXIST
|
29
|
+
# Ignore it
|
30
|
+
end
|
31
|
+
fail_plugin=File.open("#{tmp}/plugins/fail.rb","w+")
|
32
|
+
fail_plugin.write("provides \"fail\"require 'thiswillblowupinyourface'\nk=MissingClassName.new\nfail \"ohnoes\"")
|
33
|
+
fail_plugin.close
|
34
|
+
real_plugin=File.open("#{tmp}/plugins/real.rb","w+")
|
35
|
+
real_plugin.write("provides \"real\"\nreal \"useful\"\n")
|
36
|
+
real_plugin.close
|
37
|
+
@plugin_path=Ohai::Config[:plugin_path]
|
38
|
+
end
|
39
|
+
|
40
|
+
before(:each) do
|
41
|
+
Ohai::Config[:plugin_path]=["#{tmp}/plugins"]
|
42
|
+
@ohai=Ohai::System.new
|
43
|
+
end
|
44
|
+
|
45
|
+
after(:all) do
|
46
|
+
File.delete("#{tmp}/plugins/fail.rb")
|
47
|
+
File.delete("#{tmp}/plugins/real.rb")
|
48
|
+
begin
|
49
|
+
Dir.delete("#{tmp}/plugins")
|
50
|
+
rescue
|
51
|
+
# Don't care if it fails
|
52
|
+
end
|
53
|
+
Ohai::Config[:plugin_path]=@plugin_path
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should continue gracefully if plugin loading fails" do
|
57
|
+
@ohai.require_plugin("fail")
|
58
|
+
@ohai.require_plugin("real")
|
59
|
+
@ohai.data[:real].should eql("useful")
|
60
|
+
@ohai.data.should_not have_key("fail")
|
61
|
+
end
|
62
|
+
end
|
@@ -24,37 +24,89 @@ describe Ohai::System, "Linux lsb plugin" do
|
|
24
24
|
@ohai = Ohai::System.new
|
25
25
|
@ohai[:os] = "linux"
|
26
26
|
@ohai.stub!(:require_plugin).and_return(true)
|
27
|
-
@
|
28
|
-
@mock_file.stub!(:each).
|
29
|
-
and_yield("DISTRIB_ID=Ubuntu").
|
30
|
-
and_yield("DISTRIB_RELEASE=8.04").
|
31
|
-
and_yield("DISTRIB_CODENAME=hardy").
|
32
|
-
and_yield('DISTRIB_DESCRIPTION="Ubuntu 8.04"')
|
33
|
-
File.stub!(:open).with("/etc/lsb-release").and_return(@mock_file)
|
27
|
+
@ohai.extend(SimpleFromFile)
|
34
28
|
end
|
29
|
+
|
30
|
+
describe "on systems with /etc/lsb-release" do
|
31
|
+
before(:each) do
|
32
|
+
@mock_file = mock("/etc/lsb-release")
|
33
|
+
@mock_file.stub!(:each).
|
34
|
+
and_yield("DISTRIB_ID=Ubuntu").
|
35
|
+
and_yield("DISTRIB_RELEASE=8.04").
|
36
|
+
and_yield("DISTRIB_CODENAME=hardy").
|
37
|
+
and_yield('DISTRIB_DESCRIPTION="Ubuntu 8.04"')
|
38
|
+
File.stub!(:open).with("/etc/lsb-release").and_return(@mock_file)
|
39
|
+
File.stub!(:exists?).with("/etc/lsb-release").and_return(true)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should set lsb[:id]" do
|
43
|
+
@ohai._require_plugin("linux::lsb")
|
44
|
+
@ohai[:lsb][:id].should == "Ubuntu"
|
45
|
+
end
|
35
46
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
47
|
+
it "should set lsb[:release]" do
|
48
|
+
@ohai._require_plugin("linux::lsb")
|
49
|
+
@ohai[:lsb][:release].should == "8.04"
|
50
|
+
end
|
40
51
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
52
|
+
it "should set lsb[:codename]" do
|
53
|
+
@ohai._require_plugin("linux::lsb")
|
54
|
+
@ohai[:lsb][:codename].should == "hardy"
|
55
|
+
end
|
45
56
|
|
46
|
-
|
47
|
-
|
48
|
-
|
57
|
+
it "should set lsb[:description]" do
|
58
|
+
@ohai._require_plugin("linux::lsb")
|
59
|
+
@ohai[:lsb][:description].should == "Ubuntu 8.04"
|
60
|
+
end
|
49
61
|
end
|
62
|
+
|
63
|
+
describe "on systems with /usr/bin/lsb_release" do
|
64
|
+
before(:each) do
|
65
|
+
File.stub!(:exists?).with("/etc/lsb-release").and_return(false)
|
66
|
+
File.stub!(:exists?).with("/usr/bin/lsb_release").and_return(true)
|
67
|
+
|
68
|
+
@stdin = mock("STDIN", { :close => true })
|
69
|
+
@pid = 10
|
70
|
+
@stderr = mock("STDERR")
|
71
|
+
@stdout = mock("STDOUT")
|
72
|
+
@status = 0
|
73
|
+
|
74
|
+
@stdout.stub!(:each).
|
75
|
+
and_yield("LSB Version: :core-4.0-ia32:core-4.0-noarch").
|
76
|
+
and_yield("Distributor ID: Fedora").
|
77
|
+
and_yield("Description: Fedora release 14 (Laughlin)").
|
78
|
+
and_yield("Release: 14").
|
79
|
+
and_yield("Codename: Laughlin")
|
80
|
+
|
81
|
+
@ohai.stub!(:popen4).with("lsb_release -a").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should set lsb[:id]" do
|
86
|
+
@ohai._require_plugin("linux::lsb")
|
87
|
+
@ohai[:lsb][:id].should == "Fedora"
|
88
|
+
end
|
50
89
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
90
|
+
it "should set lsb[:release]" do
|
91
|
+
@ohai._require_plugin("linux::lsb")
|
92
|
+
@ohai[:lsb][:release].should == "14"
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should set lsb[:codename]" do
|
96
|
+
@ohai._require_plugin("linux::lsb")
|
97
|
+
@ohai[:lsb][:codename].should == "Laughlin"
|
98
|
+
end
|
55
99
|
|
56
|
-
|
57
|
-
|
100
|
+
it "should set lsb[:description]" do
|
101
|
+
@ohai._require_plugin("linux::lsb")
|
102
|
+
@ohai[:lsb][:description].should == "Fedora release 14 (Laughlin)"
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should not set any lsb values if /etc/lsb-release or /usr/bin/lsb_release do not exist " do
|
108
|
+
File.stub!(:exists?).with("/etc/lsb-release").and_return(false)
|
109
|
+
File.stub!(:exists?).with("/usr/bin/lsb_release").and_return(false)
|
58
110
|
@ohai.attribute?(:lsb).should be(false)
|
59
111
|
end
|
60
|
-
end
|
112
|
+
end
|
@@ -198,6 +198,27 @@ describe Ohai::System, "Linux plugin platform" do
|
|
198
198
|
@ohai[:platform].should == "suse"
|
199
199
|
@ohai[:platform_version].should == "11.2"
|
200
200
|
end
|
201
|
+
|
202
|
+
it "[OHAI-272] should read the version as 11.3" do
|
203
|
+
File.should_receive(:read).with("/etc/SuSE-release").exactly(2).times.and_return("openSUSE 11.3 (x86_64)\nVERSION = 11.3")
|
204
|
+
@ohai._require_plugin("linux::platform")
|
205
|
+
@ohai[:platform].should == "suse"
|
206
|
+
@ohai[:platform_version].should == "11.3"
|
207
|
+
end
|
208
|
+
|
209
|
+
it "[OHAI-272] should read the version as 9.1" do
|
210
|
+
File.should_receive(:read).with("/etc/SuSE-release").exactly(2).times.and_return("SuSE Linux 9.1 (i586)\nVERSION = 9.1")
|
211
|
+
@ohai._require_plugin("linux::platform")
|
212
|
+
@ohai[:platform].should == "suse"
|
213
|
+
@ohai[:platform_version].should == "9.1"
|
214
|
+
end
|
215
|
+
|
216
|
+
it "[OHAI-272] should read the version as 11.4" do
|
217
|
+
File.should_receive(:read).with("/etc/SuSE-release").exactly(2).times.and_return("openSUSE 11.4 (i586)\nVERSION = 11.4\nCODENAME = Celadon")
|
218
|
+
@ohai._require_plugin("linux::platform")
|
219
|
+
@ohai[:platform].should == "suse"
|
220
|
+
@ohai[:platform_version].should == "11.4"
|
221
|
+
end
|
201
222
|
end
|
202
223
|
|
203
224
|
end
|
@@ -27,11 +27,11 @@ describe Ohai::System, "Linux virtualization platform" do
|
|
27
27
|
|
28
28
|
# default to all requested Files not existing
|
29
29
|
File.stub!(:exists?).with("/proc/xen/capabilities").and_return(false)
|
30
|
-
File.stub!(:exists?).with("/proc/sys/xen/independent_wallclock").and_return(false)
|
31
30
|
File.stub!(:exists?).with("/proc/modules").and_return(false)
|
32
31
|
File.stub!(:exists?).with("/proc/cpuinfo").and_return(false)
|
33
32
|
File.stub!(:exists?).with("/usr/sbin/dmidecode").and_return(false)
|
34
33
|
File.stub!(:exists?).with("/proc/self/status").and_return(false)
|
34
|
+
File.stub!(:exists?).with("/proc/user_beancounters").and_return(false)
|
35
35
|
end
|
36
36
|
|
37
37
|
describe "when we are checking for xen" do
|
@@ -39,12 +39,13 @@ describe Ohai::System, "Linux virtualization platform" do
|
|
39
39
|
File.should_receive(:exists?).with("/proc/xen/capabilities").and_return(true)
|
40
40
|
File.stub!(:read).with("/proc/xen/capabilities").and_return("control_d")
|
41
41
|
@ohai._require_plugin("linux::virtualization")
|
42
|
-
@ohai[:virtualization][:system].should == "xen"
|
42
|
+
@ohai[:virtualization][:system].should == "xen"
|
43
43
|
@ohai[:virtualization][:role].should == "host"
|
44
44
|
end
|
45
45
|
|
46
|
-
it "should set xen guest if /proc/
|
47
|
-
File.should_receive(:exists?).with("/proc/
|
46
|
+
it "should set xen guest if /proc/xen/capabilities exists" do
|
47
|
+
File.should_receive(:exists?).with("/proc/xen/capabilities").and_return(true)
|
48
|
+
File.stub!(:read).with("/proc/xen/capabilities").and_return("")
|
48
49
|
@ohai._require_plugin("linux::virtualization")
|
49
50
|
@ohai[:virtualization][:system].should == "xen"
|
50
51
|
@ohai[:virtualization][:role].should == "guest"
|
@@ -65,7 +66,7 @@ describe Ohai::System, "Linux virtualization platform" do
|
|
65
66
|
@ohai[:virtualization][:system].should == "kvm"
|
66
67
|
@ohai[:virtualization][:role].should == "host"
|
67
68
|
end
|
68
|
-
|
69
|
+
|
69
70
|
it "should set kvm guest if /proc/cpuinfo contains QEMU Virtual CPU" do
|
70
71
|
File.should_receive(:exists?).with("/proc/cpuinfo").and_return(true)
|
71
72
|
File.stub!(:read).with("/proc/cpuinfo").and_return("QEMU Virtual CPU")
|
@@ -81,6 +82,30 @@ describe Ohai::System, "Linux virtualization platform" do
|
|
81
82
|
end
|
82
83
|
end
|
83
84
|
|
85
|
+
describe "when we are checking for VirtualBox" do
|
86
|
+
it "should set vbox host if /proc/modules contains vboxdrv" do
|
87
|
+
File.should_receive(:exists?).with("/proc/modules").and_return(true)
|
88
|
+
File.stub!(:read).with("/proc/modules").and_return("vboxdrv 268268 3 vboxnetadp,vboxnetflt")
|
89
|
+
@ohai._require_plugin("linux::virtualization")
|
90
|
+
@ohai[:virtualization][:system].should == "vbox"
|
91
|
+
@ohai[:virtualization][:role].should == "host"
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should set vbox guest if /proc/modules contains vboxguest" do
|
95
|
+
File.should_receive(:exists?).with("/proc/modules").and_return(true)
|
96
|
+
File.stub!(:read).with("/proc/modules").and_return("vboxguest 177749 2 vboxsf")
|
97
|
+
@ohai._require_plugin("linux::virtualization")
|
98
|
+
@ohai[:virtualization][:system].should == "vbox"
|
99
|
+
@ohai[:virtualization][:role].should == "guest"
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should not set virtualization if vbox isn't there" do
|
103
|
+
File.should_receive(:exists?).at_least(:once).and_return(false)
|
104
|
+
@ohai._require_plugin("linux::virtualization")
|
105
|
+
@ohai[:virtualization].should == {}
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
84
109
|
describe "when we are parsing dmidecode" do
|
85
110
|
before(:each) do
|
86
111
|
File.should_receive(:exists?).with("/usr/sbin/dmidecode").and_return(true)
|
@@ -106,8 +131,8 @@ System Information
|
|
106
131
|
UUID: D29974A4-BE51-044C-BDC6-EFBC4B87A8E9
|
107
132
|
Wake-up Type: Power Switch
|
108
133
|
MSVPC
|
109
|
-
@stdout.stub!(:read).and_return(ms_vpc_dmidecode)
|
110
|
-
|
134
|
+
@stdout.stub!(:read).and_return(ms_vpc_dmidecode)
|
135
|
+
|
111
136
|
@ohai.stub!(:popen4).with("dmidecode").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
|
112
137
|
@ohai._require_plugin("linux::virtualization")
|
113
138
|
@ohai[:virtualization][:system].should == "virtualpc"
|
@@ -179,6 +204,29 @@ VMWARE
|
|
179
204
|
@ohai[:virtualization].should == {}
|
180
205
|
end
|
181
206
|
end
|
207
|
+
describe "when we are checking for openvz" do
|
208
|
+
it "should set openvz host if /proc/user_beancounters contains 0:" do
|
209
|
+
File.should_receive(:exists?).with("/proc/user_beancounters").and_return(true)
|
210
|
+
File.stub!(:read).with("/proc/user_beancounters").and_return("\n 0: ")
|
211
|
+
@ohai._require_plugin("linux::virtualization")
|
212
|
+
@ohai[:virtualization][:emulator].should == "openvz"
|
213
|
+
@ohai[:virtualization][:role].should == "host"
|
214
|
+
end
|
215
|
+
|
216
|
+
it "should set openvz guest if /proc/user_beancounters doesn't contain 0:" do
|
217
|
+
File.should_receive(:exists?).with("/proc/user_beancounters").and_return(true)
|
218
|
+
File.stub!(:read).with("/proc/user_beancounters").and_return("101:")
|
219
|
+
@ohai._require_plugin("linux::virtualization")
|
220
|
+
@ohai[:virtualization][:emulator].should == "openvz"
|
221
|
+
@ohai[:virtualization][:role].should == "guest"
|
222
|
+
end
|
223
|
+
|
224
|
+
it "should not set virtualization if openvz isn't there" do
|
225
|
+
File.should_receive(:exists?).at_least(:once).and_return(false)
|
226
|
+
@ohai._require_plugin("linux::virtualization")
|
227
|
+
@ohai[:virtualization].should == {}
|
228
|
+
end
|
229
|
+
end
|
182
230
|
|
183
231
|
it "should not set virtualization if no tests match" do
|
184
232
|
@ohai._require_plugin("linux::virtualization")
|
@@ -16,17 +16,28 @@ describe Ohai::System, "plugin etc" do
|
|
16
16
|
@ohai[:etc][:passwd]['root'].should == Mash.new(:shell => '/bin/zsh', :gecos => 'BOFH', :gid => 1, :uid => 1, :dir => '/root')
|
17
17
|
@ohai[:etc][:passwd]['www'].should == Mash.new(:shell => '/bin/false', :gecos => 'Serving the web since 1970', :gid => 800, :uid => 800, :dir => '/var/www')
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
it "should set the current user" do
|
21
21
|
Etc.should_receive(:getlogin).and_return('chef')
|
22
22
|
@ohai._require_plugin("passwd")
|
23
23
|
@ohai[:current_user].should == 'chef'
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
it "should set the available groups" do
|
27
27
|
Etc.should_receive(:group).and_yield(GroupEntry.new("admin", 100, ['root', 'chef'])).and_yield(GroupEntry.new('www', 800, ['www', 'deploy']))
|
28
28
|
@ohai._require_plugin("passwd")
|
29
29
|
@ohai[:etc][:group]['admin'].should == Mash.new(:gid => 100, :members => ['root', 'chef'])
|
30
30
|
@ohai[:etc][:group]['www'].should == Mash.new(:gid => 800, :members => ['www', 'deploy'])
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
|
+
if "".respond_to?(:force_encoding)
|
34
|
+
it "sets the encoding of strings to the default external encoding" do
|
35
|
+
fields = ["root", 1, 1, '/root', '/bin/zsh', 'BOFH']
|
36
|
+
fields.each {|f| f.force_encoding(Encoding::ASCII_8BIT) if f.respond_to?(:force_encoding) }
|
37
|
+
Etc.stub!(:passwd).and_yield(PasswdEntry.new(*fields))
|
38
|
+
@ohai._require_plugin("passwd")
|
39
|
+
root = @ohai[:etc][:passwd]['root']
|
40
|
+
root['gecos'].encoding.should == Encoding.default_external
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -42,6 +42,8 @@ describe Ohai::System, "plugin ruby" do
|
|
42
42
|
:host_os => ::Config::CONFIG['host_os'],
|
43
43
|
:host_vendor => ::Config::CONFIG['host_vendor'],
|
44
44
|
:gems_dir => %x{#{ruby_bin} #{::Config::CONFIG['bindir']}/gem env gemdir}.chomp!,
|
45
|
+
:gem_bin => [ ::Gem.default_exec_format % 'gem', 'gem' ].map{|bin| "#{::Config::CONFIG['bindir']}/#{bin}"
|
46
|
+
}.find{|bin| ::File.exists? bin},
|
45
47
|
:ruby_bin => ruby_bin
|
46
48
|
}.each do |attribute, value|
|
47
49
|
it "should have #{attribute} set" do
|
@@ -0,0 +1,134 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Toomas Pelberg (<toomas.pelberg@playtech.com>)
|
3
|
+
# Copyright:: Copyright (c) 2011 Opscode, Inc.
|
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
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper.rb')
|
20
|
+
require 'sigar'
|
21
|
+
require 'ohai'
|
22
|
+
|
23
|
+
describe Ohai::System, "Sigar network route plugin" do
|
24
|
+
|
25
|
+
before(:each) do
|
26
|
+
@ohai = Ohai::System.new
|
27
|
+
@sigar = double("Sigar")
|
28
|
+
@net_info_conf={
|
29
|
+
:default_gateway => "192.168.1.254",
|
30
|
+
:default_gateway_interface => "eth0",
|
31
|
+
:primary_dns => "192.168.1.254",
|
32
|
+
:secondary_dns => "8.8.8.8",
|
33
|
+
:host_name => "localhost"
|
34
|
+
}
|
35
|
+
net_info=double("Sigar::NetInfo")
|
36
|
+
@net_info_conf.each_pair do |k,v|
|
37
|
+
net_info.stub(k).and_return(v)
|
38
|
+
end
|
39
|
+
@net_route_conf={
|
40
|
+
:destination => "192.168.1.0",
|
41
|
+
:gateway => "0.0.0.0",
|
42
|
+
:flags => 1,
|
43
|
+
:refcnt => 0,
|
44
|
+
:use => 0,
|
45
|
+
:ifname => "eth0",
|
46
|
+
:metric => 0,
|
47
|
+
:mtu => 0,
|
48
|
+
:window => 0,
|
49
|
+
:irtt => 0
|
50
|
+
}
|
51
|
+
net_route=double("Sigar::NetRoute")
|
52
|
+
@net_route_conf.each_pair do |k,v|
|
53
|
+
net_route.stub(k).and_return(v)
|
54
|
+
end
|
55
|
+
@net_interface_conf={
|
56
|
+
:flags => 2115,
|
57
|
+
:destination => "192.168.1.1",
|
58
|
+
:mtu => 1500,
|
59
|
+
:type => "Ethernet",
|
60
|
+
:hwaddr => "00:11:22:33:44:55:66",
|
61
|
+
:address => "192.168.1.1",
|
62
|
+
:broadcast => "192.168.1.255",
|
63
|
+
:netmask => "255.255.255.0",
|
64
|
+
:address6 => nil,
|
65
|
+
:tx_queue_len => 1000,
|
66
|
+
:prefix6_length => 0,
|
67
|
+
}
|
68
|
+
net_conf=double("Sigar::NetConf")
|
69
|
+
@net_interface_conf.each_pair do |k,v|
|
70
|
+
net_conf.stub(k).and_return(v)
|
71
|
+
end
|
72
|
+
@net_interface_stat={
|
73
|
+
:rx_bytes=>1369035618,
|
74
|
+
:rx_dropped=>0,
|
75
|
+
:rx_errors=>0,
|
76
|
+
:rx_frame=>0,
|
77
|
+
:rx_overruns=>0,
|
78
|
+
:rx_packets=>7271669,
|
79
|
+
:speed=>-1,
|
80
|
+
:tx_bytes=>3482843666,
|
81
|
+
:tx_carrier=>0,
|
82
|
+
:tx_collisions=>0,
|
83
|
+
:tx_dropped=>0,
|
84
|
+
:tx_errors=>0,
|
85
|
+
:tx_overruns=>0,
|
86
|
+
:tx_packets=>4392794
|
87
|
+
}
|
88
|
+
net_stat=double("Sigar::NetStat")
|
89
|
+
@net_interface_stat.each_pair do |k,v|
|
90
|
+
net_stat.stub(k).and_return(v)
|
91
|
+
end
|
92
|
+
@net_arp_conf={
|
93
|
+
:address => "192.168.1.5",
|
94
|
+
:flags => 2,
|
95
|
+
:hwaddr => "00:15:62:96:01:D0",
|
96
|
+
:ifname => "eth0",
|
97
|
+
:type => "ether",
|
98
|
+
}
|
99
|
+
net_arp=double("Sigar::NetArp")
|
100
|
+
@net_arp_conf.each_pair do |k,v|
|
101
|
+
net_arp.stub(k).and_return(v)
|
102
|
+
end
|
103
|
+
@sigar.stub(:fqdn).and_return("localhost.localdomain")
|
104
|
+
@sigar.should_receive(:net_info).at_least(2).times.and_return(net_info)
|
105
|
+
@sigar.should_receive(:net_interface_list).once.and_return(["eth0"])
|
106
|
+
@sigar.should_receive(:net_interface_config).with("eth0").and_return(net_conf)
|
107
|
+
@sigar.should_receive(:net_interface_stat).with("eth0").and_return(net_stat)
|
108
|
+
@sigar.should_receive(:arp_list).once.and_return([net_arp])
|
109
|
+
|
110
|
+
# Since we mock net_route_list here, flags never gets called
|
111
|
+
@sigar.should_receive(:net_route_list).once.and_return([net_route])
|
112
|
+
Sigar.should_receive(:new).at_least(2).times.and_return(@sigar)
|
113
|
+
@ohai.require_plugin("os")
|
114
|
+
@ohai[:os]="sigar"
|
115
|
+
@ohai.require_plugin("network")
|
116
|
+
@ohai.require_plugin("sigar::network_route")
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should set the routes" do
|
120
|
+
@ohai[:network][:interfaces][:eth0].should have_key(:route)
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should set the route details" do
|
124
|
+
@net_route_conf.each_pair do |k,v|
|
125
|
+
# Work around the above mocking of net_route_list skipping the call to flags()
|
126
|
+
if k == :flags
|
127
|
+
v="U"
|
128
|
+
@ohai[:network][:interfaces][:eth0][:route]["192.168.1.0"][k] = v
|
129
|
+
end
|
130
|
+
@ohai[:network][:interfaces][:eth0][:route]["192.168.1.0"].should have_key(k)
|
131
|
+
@ohai[:network][:interfaces][:eth0][:route]["192.168.1.0"][k].should eql(v)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ohai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 15424069
|
5
|
+
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
|
9
|
+
- 6
|
10
|
+
- rc
|
11
|
+
- 0
|
12
|
+
version: 0.6.6.rc.0
|
11
13
|
platform: ruby
|
12
14
|
authors:
|
13
15
|
- Adam Jacob
|
@@ -15,8 +17,7 @@ autorequire:
|
|
15
17
|
bindir: bin
|
16
18
|
cert_chain: []
|
17
19
|
|
18
|
-
date: 2011-
|
19
|
-
default_executable:
|
20
|
+
date: 2011-09-21 00:00:00 Z
|
20
21
|
dependencies:
|
21
22
|
- !ruby/object:Gem::Dependency
|
22
23
|
name: yajl-ruby
|
@@ -130,6 +131,20 @@ dependencies:
|
|
130
131
|
version: "0"
|
131
132
|
type: :development
|
132
133
|
version_requirements: *id008
|
134
|
+
- !ruby/object:Gem::Dependency
|
135
|
+
name: sigar
|
136
|
+
prerelease: false
|
137
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
hash: 3
|
143
|
+
segments:
|
144
|
+
- 0
|
145
|
+
version: "0"
|
146
|
+
type: :development
|
147
|
+
version_requirements: *id009
|
133
148
|
description: Ohai profiles your system and emits JSON
|
134
149
|
email: adam@opscode.com
|
135
150
|
executables:
|
@@ -211,6 +226,7 @@ files:
|
|
211
226
|
- lib/ohai/plugins/solaris2/uptime.rb
|
212
227
|
- lib/ohai/plugins/solaris2/ssh_host_key.rb
|
213
228
|
- lib/ohai/plugins/solaris2/network.rb
|
229
|
+
- lib/ohai/plugins/solaris2/zpools.rb
|
214
230
|
- lib/ohai/plugins/solaris2/kernel.rb
|
215
231
|
- lib/ohai/plugins/solaris2/platform.rb
|
216
232
|
- lib/ohai/plugins/solaris2/ps.rb
|
@@ -242,6 +258,7 @@ files:
|
|
242
258
|
- lib/ohai/plugins/sigar/hostname.rb
|
243
259
|
- lib/ohai/plugins/sigar/uptime.rb
|
244
260
|
- lib/ohai/plugins/sigar/network.rb
|
261
|
+
- lib/ohai/plugins/sigar/network_route.rb
|
245
262
|
- lib/ohai/plugins/sigar/platform.rb
|
246
263
|
- lib/ohai/plugins/sigar/cpu.rb
|
247
264
|
- lib/ohai/plugins/sigar/filesystem.rb
|
@@ -288,6 +305,7 @@ files:
|
|
288
305
|
- spec/ohai/plugins/lua_spec.rb
|
289
306
|
- spec/ohai/plugins/ec2_spec.rb
|
290
307
|
- spec/ohai/plugins/ruby_spec.rb
|
308
|
+
- spec/ohai/plugins/fail_spec.rb
|
291
309
|
- spec/ohai/plugins/rackspace_spec.rb
|
292
310
|
- spec/ohai/plugins/freebsd/kernel_spec.rb
|
293
311
|
- spec/ohai/plugins/freebsd/platform_spec.rb
|
@@ -321,6 +339,7 @@ files:
|
|
321
339
|
- spec/ohai/plugins/perl_spec.rb
|
322
340
|
- spec/ohai/plugins/c_spec.rb
|
323
341
|
- spec/ohai/plugins/ohai_spec.rb
|
342
|
+
- spec/ohai/plugins/sigar/network_route_spec.rb
|
324
343
|
- spec/ohai/plugins/os_spec.rb
|
325
344
|
- spec/ohai/plugins/passwd_spec.rb
|
326
345
|
- spec/ohai/plugins/cloud_spec.rb
|
@@ -338,7 +357,6 @@ files:
|
|
338
357
|
- spec/rcov.opts
|
339
358
|
- spec/ohai_spec.rb
|
340
359
|
- bin/ohai
|
341
|
-
has_rdoc: true
|
342
360
|
homepage: http://wiki.opscode.com/display/ohai
|
343
361
|
licenses: []
|
344
362
|
|
@@ -359,16 +377,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
359
377
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
360
378
|
none: false
|
361
379
|
requirements:
|
362
|
-
- - "
|
380
|
+
- - ">"
|
363
381
|
- !ruby/object:Gem::Version
|
364
|
-
hash:
|
382
|
+
hash: 25
|
365
383
|
segments:
|
366
|
-
-
|
367
|
-
|
384
|
+
- 1
|
385
|
+
- 3
|
386
|
+
- 1
|
387
|
+
version: 1.3.1
|
368
388
|
requirements: []
|
369
389
|
|
370
390
|
rubyforge_project:
|
371
|
-
rubygems_version: 1.
|
391
|
+
rubygems_version: 1.7.2
|
372
392
|
signing_key:
|
373
393
|
specification_version: 3
|
374
394
|
summary: Ohai profiles your system and emits JSON
|