ohai 0.3.4
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/LICENSE +201 -0
- data/README.rdoc +98 -0
- data/Rakefile +61 -0
- data/bin/ohai +24 -0
- data/lib/ohai.rb +27 -0
- data/lib/ohai/application.rb +113 -0
- data/lib/ohai/config.rb +29 -0
- data/lib/ohai/exception.rb +23 -0
- data/lib/ohai/log.rb +26 -0
- data/lib/ohai/mixin/command.rb +208 -0
- data/lib/ohai/mixin/from_file.rb +36 -0
- data/lib/ohai/mixin/string.rb +29 -0
- data/lib/ohai/plugins/command.rb +21 -0
- data/lib/ohai/plugins/darwin/filesystem.rb +57 -0
- data/lib/ohai/plugins/darwin/hostname.rb +22 -0
- data/lib/ohai/plugins/darwin/kernel.rb +37 -0
- data/lib/ohai/plugins/darwin/network.rb +187 -0
- data/lib/ohai/plugins/darwin/platform.rb +36 -0
- data/lib/ohai/plugins/darwin/ps.rb +23 -0
- data/lib/ohai/plugins/darwin/ssh_host_key.rb +25 -0
- data/lib/ohai/plugins/darwin/system_profiler.rb +33 -0
- data/lib/ohai/plugins/darwin/uptime.rb +32 -0
- data/lib/ohai/plugins/dmi.rb +59 -0
- data/lib/ohai/plugins/ec2.rb +100 -0
- data/lib/ohai/plugins/erlang.rb +40 -0
- data/lib/ohai/plugins/freebsd/cpu.rb +52 -0
- data/lib/ohai/plugins/freebsd/filesystem.rb +57 -0
- data/lib/ohai/plugins/freebsd/hostname.rb +22 -0
- data/lib/ohai/plugins/freebsd/kernel.rb +37 -0
- data/lib/ohai/plugins/freebsd/memory.rb +50 -0
- data/lib/ohai/plugins/freebsd/network.rb +112 -0
- data/lib/ohai/plugins/freebsd/platform.rb +23 -0
- data/lib/ohai/plugins/freebsd/ps.rb +24 -0
- data/lib/ohai/plugins/freebsd/ssh_host_key.rb +26 -0
- data/lib/ohai/plugins/freebsd/uptime.rb +32 -0
- data/lib/ohai/plugins/freebsd/virtualization.rb +66 -0
- data/lib/ohai/plugins/hostname.rb +27 -0
- data/lib/ohai/plugins/java.rb +36 -0
- data/lib/ohai/plugins/kernel.rb +33 -0
- data/lib/ohai/plugins/keys.rb +22 -0
- data/lib/ohai/plugins/languages.rb +21 -0
- data/lib/ohai/plugins/linux/block_device.rb +38 -0
- data/lib/ohai/plugins/linux/cpu.rb +60 -0
- data/lib/ohai/plugins/linux/filesystem.rb +57 -0
- data/lib/ohai/plugins/linux/hostname.rb +26 -0
- data/lib/ohai/plugins/linux/kernel.rb +33 -0
- data/lib/ohai/plugins/linux/lsb.rb +38 -0
- data/lib/ohai/plugins/linux/memory.rb +83 -0
- data/lib/ohai/plugins/linux/network.rb +112 -0
- data/lib/ohai/plugins/linux/platform.rb +43 -0
- data/lib/ohai/plugins/linux/ps.rb +23 -0
- data/lib/ohai/plugins/linux/ssh_host_key.rb +26 -0
- data/lib/ohai/plugins/linux/uptime.rb +28 -0
- data/lib/ohai/plugins/linux/virtualization.rb +77 -0
- data/lib/ohai/plugins/netbsd/cpu.rb +48 -0
- data/lib/ohai/plugins/netbsd/filesystem.rb +57 -0
- data/lib/ohai/plugins/netbsd/hostname.rb +22 -0
- data/lib/ohai/plugins/netbsd/kernel.rb +35 -0
- data/lib/ohai/plugins/netbsd/memory.rb +98 -0
- data/lib/ohai/plugins/netbsd/network.rb +111 -0
- data/lib/ohai/plugins/netbsd/platform.rb +22 -0
- data/lib/ohai/plugins/netbsd/ps.rb +24 -0
- data/lib/ohai/plugins/netbsd/ssh_host_key.rb +26 -0
- data/lib/ohai/plugins/netbsd/uptime.rb +31 -0
- data/lib/ohai/plugins/netbsd/virtualization.rb +65 -0
- data/lib/ohai/plugins/network.rb +52 -0
- data/lib/ohai/plugins/ohai_time.rb +21 -0
- data/lib/ohai/plugins/openbsd/cpu.rb +38 -0
- data/lib/ohai/plugins/openbsd/filesystem.rb +57 -0
- data/lib/ohai/plugins/openbsd/hostname.rb +22 -0
- data/lib/ohai/plugins/openbsd/kernel.rb +35 -0
- data/lib/ohai/plugins/openbsd/memory.rb +98 -0
- data/lib/ohai/plugins/openbsd/network.rb +111 -0
- data/lib/ohai/plugins/openbsd/platform.rb +23 -0
- data/lib/ohai/plugins/openbsd/ps.rb +24 -0
- data/lib/ohai/plugins/openbsd/ssh_host_key.rb +26 -0
- data/lib/ohai/plugins/openbsd/uptime.rb +32 -0
- data/lib/ohai/plugins/openbsd/virtualization.rb +66 -0
- data/lib/ohai/plugins/os.rb +48 -0
- data/lib/ohai/plugins/perl.rb +37 -0
- data/lib/ohai/plugins/platform.rb +25 -0
- data/lib/ohai/plugins/python.rb +37 -0
- data/lib/ohai/plugins/ruby.rb +39 -0
- data/lib/ohai/plugins/solaris2/cpu.rb +33 -0
- data/lib/ohai/plugins/solaris2/hostname.rb +25 -0
- data/lib/ohai/plugins/solaris2/kernel.rb +40 -0
- data/lib/ohai/plugins/solaris2/network.rb +141 -0
- data/lib/ohai/plugins/solaris2/platform.rb +33 -0
- data/lib/ohai/plugins/solaris2/ps.rb +23 -0
- data/lib/ohai/plugins/solaris2/ssh_host_key.rb +26 -0
- data/lib/ohai/plugins/uptime.rb +42 -0
- data/lib/ohai/plugins/virtualization.rb +86 -0
- data/lib/ohai/plugins/windows/filesystem.rb +44 -0
- data/lib/ohai/plugins/windows/hostname.rb +25 -0
- data/lib/ohai/plugins/windows/kernel.rb +75 -0
- data/lib/ohai/plugins/windows/network.rb +114 -0
- data/lib/ohai/plugins/windows/platform.rb +26 -0
- data/lib/ohai/system.rb +241 -0
- data/spec/ohai/mixin/command_spec.rb +37 -0
- data/spec/ohai/mixin/from_file_spec.rb +53 -0
- data/spec/ohai/plugins/darwin/hostname_spec.rb +34 -0
- data/spec/ohai/plugins/darwin/kernel_spec.rb +46 -0
- data/spec/ohai/plugins/darwin/platform_spec.rb +67 -0
- data/spec/ohai/plugins/dmi_spec.rb +73 -0
- data/spec/ohai/plugins/ec2_spec.rb +81 -0
- data/spec/ohai/plugins/erlang_spec.rb +63 -0
- data/spec/ohai/plugins/freebsd/hostname_spec.rb +34 -0
- data/spec/ohai/plugins/freebsd/kernel_spec.rb +37 -0
- data/spec/ohai/plugins/freebsd/platform_spec.rb +40 -0
- data/spec/ohai/plugins/hostname_spec.rb +39 -0
- data/spec/ohai/plugins/java_spec.rb +70 -0
- data/spec/ohai/plugins/kernel_spec.rb +43 -0
- data/spec/ohai/plugins/linux/cpu_spec.rb +128 -0
- data/spec/ohai/plugins/linux/hostname_spec.rb +52 -0
- data/spec/ohai/plugins/linux/kernel_spec.rb +31 -0
- data/spec/ohai/plugins/linux/lsb_spec.rb +60 -0
- data/spec/ohai/plugins/linux/platform_spec.rb +81 -0
- data/spec/ohai/plugins/linux/uptime_spec.rb +61 -0
- data/spec/ohai/plugins/linux/virtualization_spec.rb +131 -0
- data/spec/ohai/plugins/netbsd/hostname_spec.rb +34 -0
- data/spec/ohai/plugins/netbsd/kernel_spec.rb +36 -0
- data/spec/ohai/plugins/netbsd/platform_spec.rb +40 -0
- data/spec/ohai/plugins/ohai_time_spec.rb +46 -0
- data/spec/ohai/plugins/openbsd/hostname_spec.rb +34 -0
- data/spec/ohai/plugins/openbsd/kernel_spec.rb +37 -0
- data/spec/ohai/plugins/openbsd/platform_spec.rb +40 -0
- data/spec/ohai/plugins/os_spec.rb +69 -0
- data/spec/ohai/plugins/perl_spec.rb +89 -0
- data/spec/ohai/plugins/platform_spec.rb +56 -0
- data/spec/ohai/plugins/python_spec.rb +53 -0
- data/spec/ohai/plugins/ruby_spec.rb +51 -0
- data/spec/ohai/plugins/solaris2/hostname_spec.rb +43 -0
- data/spec/ohai/plugins/solaris2/kernel_spec.rb +164 -0
- data/spec/ohai/system_spec.rb +130 -0
- data/spec/ohai_spec.rb +27 -0
- data/spec/rcov.opts +2 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +68 -0
- metadata +240 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: James Gartrell (<jgartrel@gmail.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2008 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 'ruby-wmi'
|
|
20
|
+
|
|
21
|
+
def encaps_lookup(encap)
|
|
22
|
+
return "Ethernet" if encap.eql?("Ethernet 802.3")
|
|
23
|
+
encap
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def derive_bcast(ipaddr, ipmask, zero_bcast = false)
|
|
27
|
+
begin
|
|
28
|
+
ipaddr_int = ipaddr.split(".").collect{ |x| x.to_i}.pack("C4").unpack("N").first
|
|
29
|
+
ipmask_int = ipmask.split(".").collect{ |x| x.to_i}.pack("C4").unpack("N").first
|
|
30
|
+
if zero_bcast
|
|
31
|
+
bcast_int = ipaddr_int & ipmask_int
|
|
32
|
+
else
|
|
33
|
+
bcast_int = ipaddr_int | 2 ** 32 - ipmask_int - 1
|
|
34
|
+
end
|
|
35
|
+
bcast = [bcast_int].pack("N").unpack("C4").join(".")
|
|
36
|
+
return bcast
|
|
37
|
+
rescue
|
|
38
|
+
return nil
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
iface = Mash.new
|
|
43
|
+
iface_config = Mash.new
|
|
44
|
+
iface_instance = Mash.new
|
|
45
|
+
|
|
46
|
+
adapters = WMI::Win32_NetworkAdapterConfiguration.find(:all)
|
|
47
|
+
adapters.each do |adapter|
|
|
48
|
+
i = adapter.Index
|
|
49
|
+
iface_config[i] = Mash.new
|
|
50
|
+
adapter.properties_.each do |p|
|
|
51
|
+
iface_config[i][p.name.wmi_underscore.to_sym] = adapter[p.name]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
adapters = WMI::Win32_NetworkAdapter.find(:all)
|
|
56
|
+
adapters.each do |adapter|
|
|
57
|
+
i = adapter.Index
|
|
58
|
+
iface_instance[i] = Mash.new
|
|
59
|
+
adapter.properties_.each do |p|
|
|
60
|
+
iface_instance[i][p.name.wmi_underscore.to_sym] = adapter[p.name]
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
iface_instance.keys.each do |i|
|
|
65
|
+
if iface_config[i][:ip_enabled] and iface_instance[i][:net_connection_id] and iface_instance[i][:interface_index]
|
|
66
|
+
cint = sprintf("0x%X", iface_instance[i][:interface_index])
|
|
67
|
+
iface[cint] = Mash.new
|
|
68
|
+
iface[cint][:configuration] = iface_config[i]
|
|
69
|
+
iface[cint][:instance] = iface_instance[i]
|
|
70
|
+
|
|
71
|
+
iface[cint][:counters] = Mash.new
|
|
72
|
+
iface[cint][:addresses] = Mash.new
|
|
73
|
+
iface[cint][:configuration][:ip_address].each_index do |i|
|
|
74
|
+
begin
|
|
75
|
+
if iface[cint][:configuration][:ip_address][i] =~ /./
|
|
76
|
+
iface[cint][:addresses][iface[cint][:configuration][:ip_address][i]] = {
|
|
77
|
+
"family" => "inet",
|
|
78
|
+
"netmask" => iface[cint][:configuration][:ip_subnet][i],
|
|
79
|
+
"broadcast" => derive_bcast( iface[cint][:configuration][:ip_address][i],
|
|
80
|
+
iface[cint][:configuration][:ip_subnet][i],
|
|
81
|
+
iface[cint][:configuration][:ip_use_zero_broadcast]
|
|
82
|
+
)
|
|
83
|
+
}
|
|
84
|
+
end
|
|
85
|
+
rescue
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
iface[cint][:configuration][:mac_address].each do |mac_addr|
|
|
89
|
+
iface[cint][:addresses][mac_addr] = {
|
|
90
|
+
"family" => "lladdr"
|
|
91
|
+
}
|
|
92
|
+
end
|
|
93
|
+
iface[cint][:mtu] = iface[cint][:configuration][:mtu]
|
|
94
|
+
iface[cint][:type] = iface[cint][:instance][:adapter_type]
|
|
95
|
+
iface[cint][:arp] = {}
|
|
96
|
+
iface[cint][:encapsulation] = encaps_lookup(iface[cint][:instance][:adapter_type])
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
cint=nil
|
|
101
|
+
from("arp /a").split("\n").each do |line|
|
|
102
|
+
if line == ""
|
|
103
|
+
cint = nil
|
|
104
|
+
end
|
|
105
|
+
if line =~ /^Interface:\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+[-]+\s+(0x\d+)/
|
|
106
|
+
cint = $2
|
|
107
|
+
end
|
|
108
|
+
next unless iface[cint]
|
|
109
|
+
if line =~ /^\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+([a-fA-F0-9\:-]+)/
|
|
110
|
+
iface[cint][:arp][$1] = $2.gsub("-",":").downcase
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
network["interfaces"] = iface
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: James Gartrell (<jgartrel@gmail.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2009 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
|
+
# After long discussion in IRC the "powers that be" have come to a concensus
|
|
20
|
+
# that there is no other Windows platforms exist that were not based on the
|
|
21
|
+
# Windows_NT kernel, so we herby decree that "windows" will refer to all
|
|
22
|
+
# platforms built upon the Windows_NT kernel and have access to win32 or win64
|
|
23
|
+
# subsystems.
|
|
24
|
+
platform os
|
|
25
|
+
platform_version kernel['release']
|
|
26
|
+
|
data/lib/ohai/system.rb
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2008 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 'rubygems'
|
|
20
|
+
require 'extlib'
|
|
21
|
+
require 'ohai/log'
|
|
22
|
+
require 'ohai/mixin/from_file'
|
|
23
|
+
require 'ohai/mixin/command'
|
|
24
|
+
require 'ohai/mixin/string'
|
|
25
|
+
|
|
26
|
+
begin
|
|
27
|
+
require 'yajl/json_gem'
|
|
28
|
+
rescue LoadError
|
|
29
|
+
begin
|
|
30
|
+
require 'json'
|
|
31
|
+
rescue LoadError
|
|
32
|
+
begin
|
|
33
|
+
require 'json/pure'
|
|
34
|
+
rescue LoadError
|
|
35
|
+
STDERR.puts "No valid JSON library detected, please install one of 'yajl-ruby', 'json' or 'json_pure'."
|
|
36
|
+
exit -2
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
module Ohai
|
|
42
|
+
class System
|
|
43
|
+
attr_accessor :data, :seen_plugins
|
|
44
|
+
|
|
45
|
+
include Ohai::Mixin::FromFile
|
|
46
|
+
include Ohai::Mixin::Command
|
|
47
|
+
|
|
48
|
+
def initialize
|
|
49
|
+
@data = Mash.new
|
|
50
|
+
@seen_plugins = Hash.new
|
|
51
|
+
@providers = Mash.new
|
|
52
|
+
@plugin_path = ""
|
|
53
|
+
Ohai::Log.level(Ohai::Config.log_level)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def [](key)
|
|
57
|
+
@data[key]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def []=(key, value)
|
|
61
|
+
@data[key] = value
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def each(&block)
|
|
65
|
+
@data.each do |key, value|
|
|
66
|
+
block.call(key, value)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def attribute?(name)
|
|
71
|
+
@data.has_key?(name)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def set(name, *value)
|
|
75
|
+
set_attribute(name, *value)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def from(cmd)
|
|
79
|
+
status, stdout, stderr = run_command(:command => cmd)
|
|
80
|
+
return "" if stdout.nil?
|
|
81
|
+
stdout.chomp!.strip
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def provides(*paths)
|
|
85
|
+
paths.each do |path|
|
|
86
|
+
parts = path.split('/')
|
|
87
|
+
h = @providers
|
|
88
|
+
unless parts.length == 0
|
|
89
|
+
parts.shift if parts[0].length == 0
|
|
90
|
+
parts.each do |part|
|
|
91
|
+
h[part] ||= Mash.new
|
|
92
|
+
h = h[part]
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
h[:_providers] ||= []
|
|
96
|
+
h[:_providers] << @plugin_path
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Set the value equal to the stdout of the command, plus run through a regex - the first piece of match data is the value.
|
|
101
|
+
def from_with_regex(cmd, *regex_list)
|
|
102
|
+
regex_list.flatten.each do |regex|
|
|
103
|
+
status, stdout, stderr = run_command(:command => cmd)
|
|
104
|
+
return "" if stdout.nil?
|
|
105
|
+
stdout.chomp!.strip
|
|
106
|
+
md = stdout.match(regex)
|
|
107
|
+
return md[1]
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def set_attribute(name, *value)
|
|
112
|
+
@data[name] = *value
|
|
113
|
+
@data[name]
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def get_attribute(name)
|
|
117
|
+
@data[name]
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def all_plugins
|
|
121
|
+
require_plugin('os')
|
|
122
|
+
|
|
123
|
+
Ohai::Config[:plugin_path].each do |path|
|
|
124
|
+
[
|
|
125
|
+
Dir[File.join(path, '*')],
|
|
126
|
+
Dir[File.join(path, @data[:os], '**', '*')]
|
|
127
|
+
].flatten.each do |file|
|
|
128
|
+
file_regex = Regexp.new("#{path}#{File::SEPARATOR}(.+).rb$")
|
|
129
|
+
md = file_regex.match(file)
|
|
130
|
+
if md
|
|
131
|
+
plugin_name = md[1].gsub(File::SEPARATOR, "::")
|
|
132
|
+
require_plugin(plugin_name) unless @seen_plugins.has_key?(plugin_name)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def collect_providers(providers)
|
|
139
|
+
refreshments = []
|
|
140
|
+
if providers.is_a?(Mash)
|
|
141
|
+
providers.keys.each do |provider|
|
|
142
|
+
if provider.eql?("_providers")
|
|
143
|
+
refreshments << providers[provider]
|
|
144
|
+
else
|
|
145
|
+
refreshments << collect_providers(providers[provider])
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
else
|
|
149
|
+
refreshments << providers
|
|
150
|
+
end
|
|
151
|
+
refreshments.flatten.uniq
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def refresh_plugins(path = '/')
|
|
155
|
+
parts = path.split('/')
|
|
156
|
+
if parts.length == 0
|
|
157
|
+
h = @providers
|
|
158
|
+
else
|
|
159
|
+
parts.shift if parts[0].length == 0
|
|
160
|
+
h = @providers
|
|
161
|
+
parts.each do |part|
|
|
162
|
+
break unless h.has_key?(part)
|
|
163
|
+
h = h[part]
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
refreshments = collect_providers(h)
|
|
168
|
+
Ohai::Log.debug("Refreshing plugins: #{refreshments.join(", ")}")
|
|
169
|
+
|
|
170
|
+
refreshments.each do |r|
|
|
171
|
+
@seen_plugins.delete(r) if @seen_plugins.has_key?(r)
|
|
172
|
+
end
|
|
173
|
+
refreshments.each do |r|
|
|
174
|
+
require_plugin(r) unless @seen_plugins.has_key?(r)
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def require_plugin(plugin_name, force=false)
|
|
179
|
+
unless force
|
|
180
|
+
return true if @seen_plugins[plugin_name]
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
@plugin_path = plugin_name
|
|
184
|
+
|
|
185
|
+
filename = "#{plugin_name.gsub("::", File::SEPARATOR)}.rb"
|
|
186
|
+
|
|
187
|
+
Ohai::Config[:plugin_path].each do |path|
|
|
188
|
+
check_path = File.expand_path(File.join(path, filename))
|
|
189
|
+
begin
|
|
190
|
+
@seen_plugins[plugin_name] = true
|
|
191
|
+
Ohai::Log.debug("Loading plugin #{plugin_name}")
|
|
192
|
+
from_file(check_path)
|
|
193
|
+
return true
|
|
194
|
+
rescue IOError => e
|
|
195
|
+
Ohai::Log.debug("No #{plugin_name} at #{check_path}")
|
|
196
|
+
rescue Exception,Errno::ENOENT => e
|
|
197
|
+
Ohai::Log.debug("Plugin #{plugin_name} threw exception #{e.inspect}")
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
# Sneaky! Lets us stub out require_plugin when testing plugins, but still
|
|
203
|
+
# call the real require_plugin to kick the whole thing off.
|
|
204
|
+
alias :_require_plugin :require_plugin
|
|
205
|
+
|
|
206
|
+
# Serialize this object as a hash
|
|
207
|
+
def to_json(*a)
|
|
208
|
+
output = @data.clone
|
|
209
|
+
output["json_class"] = self.class.name
|
|
210
|
+
output.to_json(*a)
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
# Pretty Print this object as JSON
|
|
214
|
+
def json_pretty_print
|
|
215
|
+
JSON.pretty_generate(@data)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def attributes_print(a)
|
|
219
|
+
JSON.pretty_generate(@data[a])
|
|
220
|
+
end
|
|
221
|
+
# Create an Ohai::System from JSON
|
|
222
|
+
def self.json_create(o)
|
|
223
|
+
ohai = new
|
|
224
|
+
o.each do |key, value|
|
|
225
|
+
ohai.data[key] = value unless key == "json_class"
|
|
226
|
+
end
|
|
227
|
+
ohai
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def method_missing(name, *args)
|
|
231
|
+
return get_attribute(name) if args.length == 0
|
|
232
|
+
|
|
233
|
+
set_attribute(name, *args)
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
private
|
|
237
|
+
def load_plugin_file
|
|
238
|
+
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Diego Algorta (diego@oboxodo.com)
|
|
3
|
+
# Copyright:: Copyright (c) 2009 Diego Algorta
|
|
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.join(File.dirname(__FILE__), '..', '..', '/spec_helper.rb')
|
|
20
|
+
|
|
21
|
+
describe Ohai::Mixin::Command, "popen4" do
|
|
22
|
+
|
|
23
|
+
it "should default all commands to be run in the POSIX standard C locale" do
|
|
24
|
+
Ohai::Mixin::Command.popen4("echo $LC_ALL") do |pid, stdin, stdout, stderr|
|
|
25
|
+
stdin.close
|
|
26
|
+
stdout.read.strip.should == "C"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should respect locale when specified explicitly" do
|
|
31
|
+
Ohai::Mixin::Command.popen4("echo $LC_ALL", :environment => {"LC_ALL" => "es"}) do |pid, stdin, stdout, stderr|
|
|
32
|
+
stdin.close
|
|
33
|
+
stdout.read.strip.should == "es"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2008 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.join(File.dirname(__FILE__), '..', '..', '/spec_helper.rb')
|
|
20
|
+
|
|
21
|
+
describe Ohai::System, "from_file" do
|
|
22
|
+
before(:each) do
|
|
23
|
+
@ohai = Ohai::System.new
|
|
24
|
+
File.stub!(:exists?).and_return(true)
|
|
25
|
+
File.stub!(:readable?).and_return(true)
|
|
26
|
+
IO.stub!(:read).and_return("king 'herod'")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should check to see that the file exists" do
|
|
30
|
+
File.should_receive(:exists?).and_return(true)
|
|
31
|
+
@ohai.from_file("/tmp/foo")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should check to see that the file is readable" do
|
|
35
|
+
File.should_receive(:readable?).and_return(true)
|
|
36
|
+
@ohai.from_file("/tmp/foo")
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should actually read the file" do
|
|
40
|
+
IO.should_receive(:read).and_return("king 'herod'")
|
|
41
|
+
@ohai.from_file("/tmp/foo")
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should call instance_eval with the contents of the file, file name, and line 1" do
|
|
45
|
+
@ohai.should_receive(:instance_eval).with("king 'herod'", "/tmp/foo", 1)
|
|
46
|
+
@ohai.from_file("/tmp/foo")
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "should raise an IOError if it cannot read the file" do
|
|
50
|
+
File.stub!(:exists?).and_return(false)
|
|
51
|
+
lambda { @ohai.from_file("/tmp/foo") }.should raise_error(IOError)
|
|
52
|
+
end
|
|
53
|
+
end
|