lib/ridley/chef/config.rb in ridley-4.4.0 vs lib/ridley/chef/config.rb in ridley-4.4.1

- old
+ new

@@ -1,23 +1,86 @@ -require 'chef-config/config' -require 'chef-config/workstation_config_loader' +require 'buff/config/ruby' require 'socket' module Ridley::Chef - class Config + class Config < Buff::Config::Ruby + class << self + # Return the most sensible path to the Chef configuration file. This can + # be configured by setting a value for the 'RIDLEY_CHEF_CONFIG' environment + # variable. + # + # @return [String, nil] + def location + possibles = [] + + possibles << ENV['RIDLEY_CHEF_CONFIG'] if ENV['RIDLEY_CHEF_CONFIG'] + possibles << File.join(ENV['KNIFE_HOME'], 'knife.rb') if ENV['KNIFE_HOME'] + possibles << File.join(working_dir, 'knife.rb') if working_dir + + # Ascending search for .chef directory siblings + Pathname.new(working_dir).ascend do |file| + sibling_chef = File.join(file, '.chef') + possibles << File.join(sibling_chef, 'knife.rb') + end if working_dir + + possibles << File.join(ENV['HOME'], '.chef', 'knife.rb') if ENV['HOME'] + possibles.compact! + + location = possibles.find { |loc| File.exists?(File.expand_path(loc)) } + + File.expand_path(location) unless location.nil? + end + + private + + # The current working directory + # + # @return [String] + def working_dir + ENV['PWD'] || Dir.pwd + end + end + + set_assignment_mode :carefree + + attribute :node_name, + default: -> { Socket.gethostname } + attribute :chef_server_url, + default: 'http://localhost:4000' + attribute :client_key, + default: -> { platform_specific_path('/etc/chef/client.pem') } + attribute :validation_key, + default: -> { platform_specific_path('/etc/chef/validation.pem') } + attribute :validation_client_name, + default: 'chef-validator' + + attribute :cookbook_copyright, + default: 'YOUR_NAME' + attribute :cookbook_email, + default: 'YOUR_EMAIL' + attribute :cookbook_license, + default: 'reserved' + + attribute :knife, + default: {} + + # Prior to Chef 11, the cache implementation was based on + # moneta and configured via cache_options[:path]. Knife configs + # generated with Chef 11 will have `syntax_check_cache_path`, but older + # configs will have `cache_options[:path]`. `cache_options` is marked + # deprecated in chef/config.rb but doesn't currently trigger a warning. + # See also: CHEF-3715 + attribute :syntax_check_cache_path, + default: -> { Dir.mktmpdir } + attribute :cache_options, + default: -> { { path: defined?(syntax_check_cache_path) ? syntax_check_cache_path : Dir.mktmpdir } } + # Create a new Chef Config object. # # @param [#to_s] path # the path to the configuration file # @param [Hash] options def initialize(path, options = {}) - ChefConfig::WorkstationConfigLoader.new(path).load - ChefConfig::Config.merge!(options) - ChefConfig::Config.export_proxies # Set proxy settings as environment variables - end - - # The configuration as a hash - def to_hash - ChefConfig::Config.save(true) + super(path || self.class.location, options) end end end