lib/ohai/system.rb in ohai-0.3.6 vs lib/ohai/system.rb in ohai-0.4.0

- old
+ new

@@ -4,13 +4,13 @@ # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# +# # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. @@ -35,50 +35,49 @@ end module Ohai class System attr_accessor :data, :seen_plugins - + include Ohai::Mixin::FromFile include Ohai::Mixin::Command - + def initialize @data = Mash.new @seen_plugins = Hash.new @providers = Mash.new @plugin_path = "" - Ohai::Log.level(Ohai::Config.log_level) end - + def [](key) @data[key] end - + def []=(key, value) @data[key] = value end - + def each(&block) @data.each do |key, value| block.call(key, value) end end - + def attribute?(name) - @data.has_key?(name) + @data.has_key?(name) end - + def set(name, *value) set_attribute(name, *value) end - + def from(cmd) status, stdout, stderr = run_command(:command => cmd) - return "" if stdout.nil? + return "" if stdout.nil? || stdout.empty? stdout.chomp!.strip end - + def provides(*paths) paths.each do |path| parts = path.split('/') h = @providers unless parts.length == 0 @@ -90,38 +89,38 @@ end h[:_providers] ||= [] h[:_providers] << @plugin_path end 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. def from_with_regex(cmd, *regex_list) regex_list.flatten.each do |regex| status, stdout, stderr = run_command(:command => cmd) - return "" if stdout.nil? + return "" if stdout.nil? || stdout.empty? stdout.chomp!.strip md = stdout.match(regex) return md[1] end end - + def set_attribute(name, *value) @data[name] = *value @data[name] end - + def get_attribute(name) @data[name] end - + def all_plugins require_plugin('os') - + Ohai::Config[:plugin_path].each do |path| - [ - Dir[File.join(path, '*')], - Dir[File.join(path, @data[:os], '**', '*')] + [ + Dir[File.join(path, '*')], + Dir[File.join(path, @data[:os], '**', '*')] ].flatten.each do |file| file_regex = Regexp.new("#{path}#{File::SEPARATOR}(.+).rb$") md = file_regex.match(file) if md plugin_name = md[1].gsub(File::SEPARATOR, "::") @@ -144,11 +143,11 @@ else refreshments << providers end refreshments.flatten.uniq end - + def refresh_plugins(path = '/') parts = path.split('/') if parts.length == 0 h = @providers else @@ -160,28 +159,28 @@ end end refreshments = collect_providers(h) Ohai::Log.debug("Refreshing plugins: #{refreshments.join(", ")}") - + refreshments.each do |r| @seen_plugins.delete(r) if @seen_plugins.has_key?(r) end refreshments.each do |r| - require_plugin(r) unless @seen_plugins.has_key?(r) + require_plugin(r) unless @seen_plugins.has_key?(r) end end - + def require_plugin(plugin_name, force=false) unless force return true if @seen_plugins[plugin_name] end - + @plugin_path = plugin_name - + filename = "#{plugin_name.gsub("::", File::SEPARATOR)}.rb" - + Ohai::Config[:plugin_path].each do |path| check_path = File.expand_path(File.join(path, filename)) begin @seen_plugins[plugin_name] = true Ohai::Log.debug("Loading plugin #{plugin_name}") @@ -192,46 +191,55 @@ rescue Exception,Errno::ENOENT => e Ohai::Log.debug("Plugin #{plugin_name} threw exception #{e.inspect}") end end end - + # Sneaky! Lets us stub out require_plugin when testing plugins, but still # call the real require_plugin to kick the whole thing off. alias :_require_plugin :require_plugin - - # Serialize this object as a hash + + # Serialize this object as a hash def to_json(*a) output = @data.clone output["json_class"] = self.class.name output.to_json(*a) end - - # Pretty Print this object as JSON + + # Pretty Print this object as JSON def json_pretty_print JSON.pretty_generate(@data) end - + def attributes_print(a) - JSON.pretty_generate(@data[a]) + raise ArgumentError, "I cannot find an attribute named #{a}!" unless @data.has_key?(a) + case a + when Hash,Mash,Array + JSON.pretty_generate(@data[a]) + when String + JSON.pretty_generate(@data[a].to_a) + else + raise ArgumentError, "I can only generate JSON for Hashes, Mashes, Arrays and Strings. You fed me a #{@data[a].class}!" + end end + # Create an Ohai::System from JSON def self.json_create(o) ohai = new o.each do |key, value| ohai.data[key] = value unless key == "json_class" end ohai end - + def method_missing(name, *args) - return get_attribute(name) if args.length == 0 - + return get_attribute(name) if args.length == 0 + set_attribute(name, *args) end - + private def load_plugin_file - + end end end