summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsersut <serdar@opscode.com>2013-12-19 09:43:42 -0800
committersersut <serdar@opscode.com>2014-01-08 13:43:01 -0800
commitab1eacfedad72d72c90e45d494b853a46ba66b04 (patch)
tree584f6a918c8ff8914ed54491100b3b8f36b4481d
parentc17c663884a1858131bc8f166df90cc405552fc2 (diff)
downloadohai-OC-10161.tar.gz
Make sure :disabled_plugins can disable both v6 and v7 plugins.OC-10161
-rw-r--r--lib/ohai/dsl/plugin/versionvi.rb8
-rw-r--r--lib/ohai/dsl/plugin/versionvii.rb2
-rw-r--r--lib/ohai/loader.rb13
-rw-r--r--spec/unit/dsl/plugin_spec.rb6
-rw-r--r--spec/unit/loader_spec.rb4
-rw-r--r--spec/unit/system_spec.rb88
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