diff options
author | Thom May <thom@chef.io> | 2017-04-04 12:28:23 +0100 |
---|---|---|
committer | Thom May <thom@chef.io> | 2017-04-04 12:28:23 +0100 |
commit | 0b4cab6d491a5b1e52995a65e0039c6fa1ba8e9f (patch) | |
tree | 56ba738b573295b9772631470d10c9761d32261c | |
parent | 9413e9ab1f703129204a6f4eafc0e307d5aa8eb7 (diff) | |
download | ohai-tm/load_additional_plugins.tar.gz |
Allow ohai to load a plugin pathtm/load_additional_plugins
This is in support of RFC 59, which allows us to add an ohai cookbook
segment and load plugins automatically
Signed-off-by: Thom May <thom@may.lt>
-rw-r--r-- | lib/ohai/loader.rb | 12 | ||||
-rw-r--r-- | lib/ohai/system.rb | 9 | ||||
-rw-r--r-- | spec/unit/loader_spec.rb | 25 | ||||
-rw-r--r-- | spec/unit/system_spec.rb | 45 |
4 files changed, 89 insertions, 2 deletions
diff --git a/lib/ohai/loader.rb b/lib/ohai/loader.rb index 0468a6de..758fa181 100644 --- a/lib/ohai/loader.rb +++ b/lib/ohai/loader.rb @@ -70,8 +70,8 @@ module Ohai # Searches all plugin paths and returns an Array of PluginFile objects # representing each plugin file. - def plugin_files_by_dir - Array(Ohai.config[:plugin_path]).inject([]) do |plugin_files, plugin_path| + def plugin_files_by_dir(dir = Ohai.config[:plugin_path]) + Array(dir).inject([]) do |plugin_files, plugin_path| plugin_files + PluginFile.find_all_in(plugin_path) end end @@ -85,6 +85,14 @@ module Ohai collect_v7_plugins end + def load_additional(from) + plugin_files_by_dir(from).collect do |plugin_file| + Ohai::Log.debug "Loading additional plugin: #{plugin_file}" + plugin = load_plugin_class(plugin_file.path, plugin_file.plugin_root) + load_v7_plugin(plugin) + end + end + # 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. diff --git a/lib/ohai/system.rb b/lib/ohai/system.rb index 56957f01..1002e198 100644 --- a/lib/ohai/system.rb +++ b/lib/ohai/system.rb @@ -112,6 +112,15 @@ module Ohai freeze_strings! end + def run_additional_plugins(plugin_path) + @loader.load_additional(plugin_path).each do |plugin| + Ohai::Log.debug "Running plugin #{plugin}" + @runner.run_plugin(plugin) + end + + freeze_strings! + end + def have_v6_plugin?(name) @v6_dependency_solver.values.any? { |v6plugin| v6plugin.name == name } end diff --git a/spec/unit/loader_spec.rb b/spec/unit/loader_spec.rb index 300407dc..9be1f2f9 100644 --- a/spec/unit/loader_spec.rb +++ b/spec/unit/loader_spec.rb @@ -95,6 +95,31 @@ EOF end end + when_plugins_directory "is an additional plugin path" do + with_plugin("cookbook_a/alpha.rb", <<EOF) +Ohai.plugin(:Alpha) do + provides "alpha" +end +EOF + + with_plugin("cookbook_b/beta.rb", <<EOF) +Ohai.plugin(:Beta) do + provides "beta" +end +EOF + + describe "#load_additional" do + it "adds the plugins to the map" do + loader.load_additional(@plugins_directory) + expect(provides_map.map.keys).to eql(%w{alpha beta}) + end + + it "returns a set of plugins" do + expect(loader.load_additional(@plugins_directory)).to include(Ohai::NamedPlugin::Alpha) + end + end + end + when_plugins_directory "contains invalid plugins" do with_plugin("extra_s.rb", <<EOF) Ohai.plugins(:ExtraS) do diff --git a/spec/unit/system_spec.rb b/spec/unit/system_spec.rb index 0941b1f0..4efe4725 100644 --- a/spec/unit/system_spec.rb +++ b/spec/unit/system_spec.rb @@ -711,4 +711,49 @@ EOF end end + describe "when loading a specific plugin path" do + when_plugins_directory "contains v7 plugins" do + with_plugin("my_cookbook/languages.rb", <<-E) + Ohai.plugin(:Languages) do + provides 'languages' + + collect_data do + languages Mash.new + end + end + E + + with_plugin("english/english.rb", <<-E) + Ohai.plugin(:English) do + provides 'languages/english' + + depends 'languages' + + collect_data do + languages[:english] = Mash.new + languages[:english][:version] = 2014 + end + end + E + + with_plugin("french/french.rb", <<-E) + Ohai.plugin(:French) do + provides 'languages/french' + + depends 'languages' + + collect_data do + languages[:french] = Mash.new + languages[:french][:version] = 2012 + end + end + E + + it "should run all the plugins" do + ohai.run_additional_plugins(@plugins_directory) + expect(ohai.data[:languages][:english][:version]).to eq(2014) + expect(ohai.data[:languages][:french][:version]).to eq(2012) + end + end + end end |