diff options
Diffstat (limited to 'chef-config/lib/chef-config/config.rb')
-rw-r--r-- | chef-config/lib/chef-config/config.rb | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/chef-config/lib/chef-config/config.rb b/chef-config/lib/chef-config/config.rb index f2db54aa17..d0fa87a5ad 100644 --- a/chef-config/lib/chef-config/config.rb +++ b/chef-config/lib/chef-config/config.rb @@ -32,6 +32,7 @@ require "mixlib/shellout" require "uri" require "addressable/uri" require "openssl" +require "yaml" module ChefConfig @@ -70,6 +71,25 @@ module ChefConfig event_handlers << logger end + def self.apply_extra_config_options(extra_config_options) + if extra_config_options + extra_parsed_options = extra_config_options.inject({}) do |memo, option| + # Sanity check value. + if option.empty? || !option.include?("=") + raise UnparsableConfigOption, "Unparsable config option #{option.inspect}" + end + # Split including whitespace if someone does truly odd like + # --config-option "foo = bar" + key, value = option.split(/\s*=\s*/, 2) + # Call to_sym because Chef::Config expects only symbol keys. Also + # runs a simple parse on the string for some common types. + memo[key.to_sym] = YAML.safe_load(value) + memo + end + merge!(extra_parsed_options) + end + end + # Config file to load (client.rb, knife.rb, etc. defaults set differently in knife, chef-client, etc.) configurable(:config_file) |