diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 8e7afa2b8..b104e9add 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,3 +1,14 @@ +# UNRELEASED + +## Multiple plugin directories + +You can now specify more than one directory to load additional Ohai plugins from by using the `--directory` / `-d` flag more than once. + +Example: +```bash +ohai -d /path/to/more/plugins -d /another/path/to/more/plugins +``` + # Ohai Release Notes 14.3 ## Detection of Amazon Linux 2.0 diff --git a/lib/ohai/application.rb b/lib/ohai/application.rb index 0e991aa85..dc16d111c 100644 --- a/lib/ohai/application.rb +++ b/lib/ohai/application.rb @@ -34,8 +34,11 @@ class Ohai::Application option :directory, short: "-d DIRECTORY", long: "--directory DIRECTORY", - description: "A directory to add to the Ohai plugin search path", - proc: lambda { |path| Ohai::Config.platform_specific_path(path) } + description: "A directory to add to the Ohai plugin search path. If passing multiple directories use this option more than once.", + proc: lambda { |path, path_array| + (path_array ||= []) << Ohai::Config.platform_specific_path(path) + path_array + } option :log_level, short: "-l LEVEL", diff --git a/lib/ohai/system.rb b/lib/ohai/system.rb index b3a2dfc31..7d5d973ed 100644 --- a/lib/ohai/system.rb +++ b/lib/ohai/system.rb @@ -176,9 +176,13 @@ def attributes_print(a) def configure_ohai Ohai.config.merge!(@config) - if Ohai.config[:directory] && - !Ohai.config[:plugin_path].include?(Ohai.config[:directory]) - Ohai.config[:plugin_path] << Ohai.config[:directory] + # add any additional CLI passed directories to the plugin path excluding duplicates + unless Ohai.config[:directory].nil? + # make sure the directory config is an array since it could be a string set in client.rb + Array(Ohai.config[:directory]).each do |dir| + next if Ohai.config[:plugin_path].include?(dir) + Ohai.config[:plugin_path] << dir + end end logger.debug("Running Ohai with the following configuration: #{Ohai.config.configuration}") diff --git a/ohai.gemspec b/ohai.gemspec index 2f2b84dd3..fb2c1cd59 100644 --- a/ohai.gemspec +++ b/ohai.gemspec @@ -17,7 +17,7 @@ Gem::Specification.new do |s| s.add_dependency "systemu", "~> 2.6.4" s.add_dependency "ffi-yajl", "~> 2.2" - s.add_dependency "mixlib-cli" + s.add_dependency "mixlib-cli", ">= 1.7.0" # 1.7+ needed to support passing multiple options s.add_dependency "mixlib-config", "~> 2.0" s.add_dependency "mixlib-log", "~> 2.0", ">= 2.0.1" s.add_dependency "mixlib-shellout", "~> 2.0" diff --git a/spec/unit/system_spec.rb b/spec/unit/system_spec.rb index 7d817e709..a5b582328 100644 --- a/spec/unit/system_spec.rb +++ b/spec/unit/system_spec.rb @@ -38,7 +38,7 @@ it "merges provided configuration options into the ohai config context" do config = { disabled_plugins: [ :Foo, :Baz ], - directory: "/some/extra/plugins", + directory: ["/some/extra/plugins"], critical_plugins: [ :Foo, :Bar ], } Ohai::System.new(config) @@ -47,13 +47,24 @@ end end - context "when directory is configured" do + context "when a single directory is configured as a string" do let(:directory) { "/some/fantastic/plugins" } it "adds directory to plugin_path" do Ohai.config[:directory] = directory Ohai::System.new({ invoked_from_cli: true }) - expect(Ohai.config[:plugin_path]).to include(directory) + expect(Ohai.config[:plugin_path]).to include("/some/fantastic/plugins") + end + end + + context "when multiple directories are configured" do + let(:directory) { ["/some/fantastic/plugins", "/some/other/plugins"] } + + it "adds directories to plugin_path" do + Ohai.config[:directory] = directory + Ohai::System.new({ invoked_from_cli: true }) + expect(Ohai.config[:plugin_path]).to include("/some/fantastic/plugins") + expect(Ohai.config[:plugin_path]).to include("/some/other/plugins") end end