diff options
-rw-r--r-- | lib/ohai/dsl/plugin/versionvi.rb | 8 | ||||
-rw-r--r-- | lib/ohai/dsl/plugin/versionvii.rb | 2 | ||||
-rw-r--r-- | lib/ohai/loader.rb | 13 | ||||
-rw-r--r-- | spec/unit/dsl/plugin_spec.rb | 6 | ||||
-rw-r--r-- | spec/unit/loader_spec.rb | 4 | ||||
-rw-r--r-- | spec/unit/system_spec.rb | 88 |
6 files changed, 105 insertions, 16 deletions
diff --git a/lib/ohai/dsl/plugin/versionvi.rb b/lib/ohai/dsl/plugin/versionvi.rb index 7c96e652..ebac4e4b 100644 --- a/lib/ohai/dsl/plugin/versionvi.rb +++ b/lib/ohai/dsl/plugin/versionvi.rb @@ -24,17 +24,19 @@ module Ohai attr_reader :version attr_reader :source - def initialize(controller, plugin_path) + def initialize(controller, plugin_path, plugin_dir_path) super(controller.data) @controller = controller @version = :version6 @source = plugin_path + @plugin_dir_path = plugin_dir_path end def name # Ohai V6 doesn't have any name specification for plugins. - # So we are using the full path to the plugin as the name of the plugin. - @source + # So we are using the partial path to infer the name of the plugin + partial_path = Pathname.new(@source).relative_path_from(Pathname.new(@plugin_dir_path)).to_s + partial_path.chomp(".rb").gsub("/", "::") end def self.version diff --git a/lib/ohai/dsl/plugin/versionvii.rb b/lib/ohai/dsl/plugin/versionvii.rb index 43bc7563..cf2ecbdb 100644 --- a/lib/ohai/dsl/plugin/versionvii.rb +++ b/lib/ohai/dsl/plugin/versionvii.rb @@ -31,7 +31,7 @@ module Ohai end def name - self.class.name.split("Ohai::NamedPlugin::")[1] + self.class.name.split("Ohai::NamedPlugin::")[1].capitalize.to_sym end def self.version diff --git a/lib/ohai/loader.rb b/lib/ohai/loader.rb index 28270290..3716dd9d 100644 --- a/lib/ohai/loader.rb +++ b/lib/ohai/loader.rb @@ -74,12 +74,13 @@ module Ohai # Load a specified file as an ohai plugin and creates an instance of it. # Not used by ohai itself, but can be used to load a plugin for testing # purposes. - def load_plugin(plugin_path) - plugin_class = load_plugin_class(plugin_path) + # plugin_dir_path is required when loading a v6 plugin. + def load_plugin(plugin_path, plugin_dir_path = nil) + plugin_class = load_plugin_class(plugin_path, plugin_dir_path) return nil unless plugin_class.kind_of?(Class) case when plugin_class < Ohai::DSL::Plugin::VersionVI - load_v6_plugin(plugin_class, plugin_path) + load_v6_plugin(plugin_class, plugin_path, plugin_dir_path) when plugin_class < Ohai::DSL::Plugin::VersionVII load_v7_plugin(plugin_class) else @@ -129,7 +130,7 @@ For more information visit here: docs.opscode.com/ohai_custom.html") def collect_v6_plugins @v6_plugin_classes.each do |plugin_spec| - plugin = load_v6_plugin(plugin_spec.plugin_class, plugin_spec.plugin_path) + plugin = load_v6_plugin(plugin_spec.plugin_class, plugin_spec.plugin_path, plugin_spec.plugin_dir_path) loaded_v6_plugin(plugin, plugin_spec.plugin_path, plugin_spec.plugin_dir_path) end end @@ -146,8 +147,8 @@ For more information visit here: docs.opscode.com/ohai_custom.html") plugin_class end - def load_v6_plugin(plugin_class, plugin_path) - plugin_class.new(@controller, plugin_path) + def load_v6_plugin(plugin_class, plugin_path, plugin_dir_path) + plugin_class.new(@controller, plugin_path, plugin_dir_path) end # Capture the plugin in @v6_dependency_solver if it is a V6 plugin diff --git a/spec/unit/dsl/plugin_spec.rb b/spec/unit/dsl/plugin_spec.rb index 94081b13..e0a2f233 100644 --- a/spec/unit/dsl/plugin_spec.rb +++ b/spec/unit/dsl/plugin_spec.rb @@ -266,12 +266,12 @@ describe Ohai::DSL::Plugin::VersionVI do it "should log a debug message when provides is used" do Ohai::Log.should_receive(:debug).with(/Skipping provides/) - plugin = Ohai::DSL::Plugin::VersionVI.new(@ohai, "some/plugin/path.rb") + plugin = Ohai::DSL::Plugin::VersionVI.new(@ohai, "/some/plugin/path.rb", "/some/plugin") plugin.provides("attribute") end it "should not update the provides map for version 6 plugins." do - plugin = Ohai::DSL::Plugin::VersionVI.new(@ohai, "some/plugin/path.rb") + plugin = Ohai::DSL::Plugin::VersionVI.new(@ohai, "/some/plugin/path.rb", "/some/plugin") plugin.provides("attribute") @ohai.provides_map.map.should be_empty end @@ -280,7 +280,7 @@ describe Ohai::DSL::Plugin::VersionVI do it_behaves_like "Ohai::DSL::Plugin" do let(:ohai) { Ohai::System.new } - let(:plugin) { Ohai::DSL::Plugin::VersionVI.new(ohai, "some/plugin/path.rb") } + let(:plugin) { Ohai::DSL::Plugin::VersionVI.new(ohai, "/some/plugin/path.rb", "/some/plugin") } let(:version) { :version6 } end end diff --git a/spec/unit/loader_spec.rb b/spec/unit/loader_spec.rb index 393d8909..74679056 100644 --- a/spec/unit/loader_spec.rb +++ b/spec/unit/loader_spec.rb @@ -77,7 +77,7 @@ EOF describe "when loading a v6 plugin" do before(:each) do Ohai::Log.should_receive(:warn).with(/\[DEPRECATION\]/) - @plugin = @loader.load_plugin(path_to("lake.rb")) + @plugin = @loader.load_plugin(path_to("lake.rb"), path_to(".")) end it "should not add this plugin's provided attributes to the provides map" do @@ -91,7 +91,7 @@ EOF it "should log a warning if a plugin doesn't exist" do Ohai::Log.should_receive(:warn).with(/Unable to open or read plugin/) - @loader.load_plugin(path_to("rainier.rb")) + @loader.load_plugin(path_to("rainier.rb"), path_to(".")) @provides_map.map.should be_empty end end diff --git a/spec/unit/system_spec.rb b/spec/unit/system_spec.rb index 4e88a52f..cb1ef729 100644 --- a/spec/unit/system_spec.rb +++ b/spec/unit/system_spec.rb @@ -106,6 +106,7 @@ EOF Ohai::NamedPlugin.const_get(:Zoo).should == Ohai::NamedPlugin::Zoo Ohai::NamedPlugin.const_get(:Nature).should == Ohai::NamedPlugin::Nature end + end describe "when running plugins" do @@ -139,6 +140,23 @@ EOF @ohai.data[:park].should == "plants" end + describe "when using :disabled_plugins" do + before do + Ohai::Config[:disabled_plugins] = [ "zoo" ] + end + + after do + Ohai::Config[:disabled_plugins] = [ ] + end + + it "shouldn't run disabled version 6 plugins" do + Ohai::Config[:plugin_path] = [ path_to(".") ] + @ohai.all_plugins + @ohai.data[:zoo].should be_nil + @ohai.data[:park].should == "plants" + end + end + describe "when running in whitelist mode" do let(:ohai_system) { Ohai::System.new } @@ -180,7 +198,7 @@ EOF let(:dependency_plugin_one) { dependency_plugin_one_class.new(ohai_system) } let(:dependency_plugin_two) { dependency_plugin_two_class.new(ohai_system) } let(:unrelated_plugin) { unrelated_plugin_class.new(ohai_system) } - let(:v6_plugin) { v6_plugin_class.new(ohai_system, "/v6_plugin.rb") } + let(:v6_plugin) { v6_plugin_class.new(ohai_system, "/v6_plugin.rb", "/") } before do ohai_system.stub(:load_plugins) # TODO: temporary hack - don't run unrelated plugins... @@ -272,6 +290,74 @@ EOF Ohai::Log.should_receive(:error).with(/Encountered error while running plugins/) expect { @ohai.all_plugins }.to raise_error(Ohai::Exceptions::AttributeNotFound) end + + describe "when using :disabled_plugins" do + before do + Ohai::Config[:disabled_plugins] = [ :Zoo ] + end + + after do + Ohai::Config[:disabled_plugins] = [ ] + end + + it "shouldn't run disabled plugins" do + Ohai::Config[:plugin_path] = [ path_to(".") ] + @ohai.all_plugins + @ohai.data[:zoo].should be_nil + @ohai.data[:park].should == "plants" + end + end + end + + when_plugins_directory "contains v6 & v7 plugins in different directories" do + with_plugin("my_plugins/zoo.rb", <<EOF) +Ohai.plugin(:Zoo) do + provides 'zoo' + + collect_data(:default) do + zoo("animals") + end +end +EOF + + with_plugin("my_plugins/nature.rb", <<EOF) +Ohai.plugin(:Nature) do + provides 'nature' + + collect_data(:default) do + nature("cougars") + end +end +EOF + + with_plugin("my_plugins/park.rb", <<EOF) +provides 'park' +park("plants") +EOF + + with_plugin("my_plugins/home.rb", <<EOF) +provides 'home' +home("dog") +EOF + + describe "when using :disabled_plugins" do + before do + Ohai::Config[:disabled_plugins] = [ :Zoo, 'my_plugins::park' ] + end + + after do + Ohai::Config[:disabled_plugins] = [ ] + end + + it "shouldn't run disabled plugins" do + Ohai::Config[:plugin_path] = [ path_to(".") ] + @ohai.all_plugins + @ohai.data[:zoo].should be_nil + @ohai.data[:nature].should == "cougars" + @ohai.data[:park].should be_nil + @ohai.data[:home].should == "dog" + end + end end when_plugins_directory "contains v6 plugins that depend on v7 plugins" do |