Class Ohai::System
In: lib/ohai/system.rb
Parent: Object
Mixlib::CLI Application System RuntimeError Exec Config Log lib/ohai/config.rb lib/ohai/log.rb lib/ohai/system.rb lib/ohai/application.rb Command FromFile Mixin lib/ohai/exception.rb Exceptions Ohai dot/m_128_0.png

Methods

Included Modules

Ohai::Mixin::FromFile Ohai::Mixin::Command

Attributes

data  [RW] 
seen_plugins  [RW] 

Public Class methods

Create an Ohai::System from JSON

[Source]

     # File lib/ohai/system.rb, line 238
238:     def self.json_create(o)
239:       ohai = new
240:       o.each do |key, value|
241:         ohai.data[key] = value unless key == "json_class"
242:       end
243:       ohai
244:     end

[Source]

    # File lib/ohai/system.rb, line 43
43:     def initialize
44:       @data = Mash.new
45:       @seen_plugins = Hash.new
46:       @providers = Mash.new
47:       @plugin_path = ""
48:     end

Public Instance methods

[Source]

    # File lib/ohai/system.rb, line 50
50:     def [](key)
51:       @data[key]
52:     end

[Source]

    # File lib/ohai/system.rb, line 54
54:     def []=(key, value)
55:       @data[key] = value
56:     end
_require_plugin(plugin_name, force=false)

Alias for require_plugin

[Source]

     # File lib/ohai/system.rb, line 114
114:     def all_plugins
115:       require_plugin('os')
116: 
117:       Ohai::Config[:plugin_path].each do |path|
118:         [
119:           Dir[File.join(path, '*')],
120:           Dir[File.join(path, @data[:os], '**', '*')]
121:         ].flatten.each do |file|
122:           file_regex = Regexp.new("#{path}#{File::SEPARATOR}(.+).rb$")
123:           md = file_regex.match(file)
124:           if md
125:             plugin_name = md[1].gsub(File::SEPARATOR, "::")
126:             require_plugin(plugin_name) unless @seen_plugins.has_key?(plugin_name)
127:           end
128:         end
129:       end
130:       unless RUBY_PLATFORM =~ /mswin|mingw32|windows/
131:         # Catch any errant children who need to be reaped
132:         begin
133:           true while Process.wait(-1, Process::WNOHANG)
134:         rescue Errno::ECHILD
135:         end
136:       end
137:       true
138:     end

[Source]

    # File lib/ohai/system.rb, line 64
64:     def attribute?(name)
65:       @data.has_key?(name)
66:     end

[Source]

     # File lib/ohai/system.rb, line 225
225:     def attributes_print(a)
226:       raise ArgumentError, "I cannot find an attribute named #{a}!" unless @data.has_key?(a)
227:       case a
228:       when Hash,Mash,Array
229:         JSON.pretty_generate(@data[a])
230:       when String
231:         JSON.pretty_generate(@data[a].to_a)
232:       else
233:         raise ArgumentError, "I can only generate JSON for Hashes, Mashes, Arrays and Strings. You fed me a #{@data[a].class}!"
234:       end
235:     end

[Source]

     # File lib/ohai/system.rb, line 140
140:     def collect_providers(providers)
141:       refreshments = []
142:       if providers.is_a?(Mash)
143:         providers.keys.each do |provider|
144:           if provider.eql?("_providers")
145:             refreshments << providers[provider]
146:           else
147:             refreshments << collect_providers(providers[provider])
148:           end
149:         end
150:       else
151:         refreshments << providers
152:       end
153:       refreshments.flatten.uniq
154:     end

[Source]

    # File lib/ohai/system.rb, line 58
58:     def each(&block)
59:       @data.each do |key, value|
60:         block.call(key, value)
61:       end
62:     end

[Source]

    # File lib/ohai/system.rb, line 72
72:     def from(cmd)
73:       status, stdout, stderr = run_command(:command => cmd)
74:       return "" if stdout.nil? || stdout.empty?
75:       stdout.chomp!.strip
76:     end

Set the value equal to the stdout of the command, plus run through a regex - the first piece of match data is the value.

[Source]

     # File lib/ohai/system.rb, line 95
 95:     def from_with_regex(cmd, *regex_list)
 96:       regex_list.flatten.each do |regex|
 97:         status, stdout, stderr = run_command(:command => cmd)
 98:         return "" if stdout.nil? || stdout.empty?
 99:         stdout.chomp!.strip
100:         md = stdout.match(regex)
101:         return md[1]
102:       end
103:     end

[Source]

     # File lib/ohai/system.rb, line 110
110:     def get_attribute(name)
111:       @data[name]
112:     end

Pretty Print this object as JSON

[Source]

     # File lib/ohai/system.rb, line 221
221:     def json_pretty_print
222:       JSON.pretty_generate(@data)
223:     end

[Source]

     # File lib/ohai/system.rb, line 246
246:     def method_missing(name, *args)
247:       return get_attribute(name) if args.length == 0
248: 
249:       set_attribute(name, *args)
250:     end

[Source]

    # File lib/ohai/system.rb, line 78
78:     def provides(*paths)
79:       paths.each do |path|
80:         parts = path.split('/')
81:         h = @providers
82:         unless parts.length == 0
83:           parts.shift if parts[0].length == 0
84:           parts.each do |part|
85:             h[part] ||= Mash.new
86:             h = h[part]
87:           end
88:         end
89:         h[:_providers] ||= []
90:         h[:_providers] << @plugin_path
91:       end
92:     end

[Source]

     # File lib/ohai/system.rb, line 156
156:     def refresh_plugins(path = '/')
157:       parts = path.split('/')
158:       if parts.length == 0
159:         h = @providers
160:       else
161:         parts.shift if parts[0].length == 0
162:         h = @providers
163:         parts.each do |part|
164:           break unless h.has_key?(part)
165:           h = h[part]
166:         end
167:       end
168: 
169:       refreshments = collect_providers(h)
170:       Ohai::Log.debug("Refreshing plugins: #{refreshments.join(", ")}")
171: 
172:       refreshments.each do |r|
173:         @seen_plugins.delete(r) if @seen_plugins.has_key?(r)
174:       end
175:       refreshments.each do |r|
176:         require_plugin(r) unless @seen_plugins.has_key?(r)
177:       end
178:     end

[Source]

     # File lib/ohai/system.rb, line 180
180:     def require_plugin(plugin_name, force=false)
181:       unless force
182:         return true if @seen_plugins[plugin_name]
183:       end
184: 
185:       if Ohai::Config[:disabled_plugins].include?(plugin_name)
186:         Ohai::Log.debug("Skipping disabled plugin #{plugin_name}")
187:         return false
188:       end
189: 
190:       @plugin_path = plugin_name
191: 
192:       filename = "#{plugin_name.gsub("::", File::SEPARATOR)}.rb"
193: 
194:       Ohai::Config[:plugin_path].each do |path|
195:         check_path = File.expand_path(File.join(path, filename))
196:         begin
197:           @seen_plugins[plugin_name] = true
198:           Ohai::Log.debug("Loading plugin #{plugin_name}")
199:           from_file(check_path)
200:           return true
201:         rescue IOError => e
202:           Ohai::Log.debug("No #{plugin_name} at #{check_path}")
203:         rescue Exception,Errno::ENOENT => e
204:           Ohai::Log.debug("Plugin #{plugin_name} threw exception #{e.inspect} #{e.backtrace.join("\n")}")
205:         end
206:       end
207:     end

[Source]

    # File lib/ohai/system.rb, line 68
68:     def set(name, *value)
69:       set_attribute(name, *value)
70:     end

[Source]

     # File lib/ohai/system.rb, line 105
105:     def set_attribute(name, *values)
106:       @data[name] = Array18(*values)
107:       @data[name]
108:     end

Serialize this object as a hash

[Source]

     # File lib/ohai/system.rb, line 214
214:     def to_json(*a)
215:       output = @data.clone
216:       output["json_class"] = self.class.name
217:       output.to_json(*a)
218:     end

Private Instance methods

[Source]

     # File lib/ohai/system.rb, line 254
254:     def Array18(*args)
255:       return nil if args.empty?
256:       return args.first if args.length == 1
257:       return *args
258:     end

[Validate]