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