# File lib/chef/application/solo.rb, line 169 def reconfigure super Chef::Config[:solo] = true if Chef::Config[:daemonize] Chef::Config[:interval] ||= 1800 end if Chef::Config[:json_attribs] begin json_io = case Chef::Config[:json_attribs] when /^(http|https):\/\// @rest = Chef::REST.new(Chef::Config[:json_attribs], nil, nil) @rest.get_rest(Chef::Config[:json_attribs], true).open else open(Chef::Config[:json_attribs]) end rescue SocketError => error Chef::Application.fatal!("I cannot connect to #{Chef::Config[:json_attribs]}", 2) rescue Errno::ENOENT => error Chef::Application.fatal!("I cannot find #{Chef::Config[:json_attribs]}", 2) rescue Errno::EACCES => error Chef::Application.fatal!("Permissions are incorrect on #{Chef::Config[:json_attribs]}. Please chmod a+r #{Chef::Config[:json_attribs]}", 2) rescue Exception => error Chef::Application.fatal!("Got an unexpected error reading #{Chef::Config[:json_attribs]}: #{error.message}", 2) end begin @chef_client_json = Chef::JSONCompat.from_json(json_io.read) json_io.close unless json_io.closed? rescue JSON::ParserError => error Chef::Application.fatal!("Could not parse the provided JSON file (#{Chef::Config[:json_attribs]})!: " + error.message, 2) end end if Chef::Config[:recipe_url] cookbooks_path = Array(Chef::Config[:cookbook_path]).detect{|e| e =~ /\/cookbooks\/*$/ } recipes_path = File.expand_path(File.join(cookbooks_path, '..')) target_file = File.join(recipes_path, 'recipes.tgz') Chef::Log.debug "Creating path #{recipes_path} to extract recipes into" FileUtils.mkdir_p recipes_path path = File.join(recipes_path, 'recipes.tgz') File.open(path, 'wb') do |f| open(Chef::Config[:recipe_url]) do |r| f.write(r.read) end end Chef::Mixin::Command.run_command(:command => "tar zxvfC #{path} #{recipes_path}") end end
# File lib/chef/application/solo.rb, line 226 def run_application if Chef::Config[:daemonize] Chef::Daemon.daemonize("chef-client") end loop do begin if Chef::Config[:splay] splay = rand Chef::Config[:splay] Chef::Log.debug("Splay sleep #{splay} seconds") sleep splay end run_chef_client if Chef::Config[:interval] Chef::Log.debug("Sleeping for #{Chef::Config[:interval]} seconds") sleep Chef::Config[:interval] else Chef::Application.exit! "Exiting", 0 end rescue SystemExit => e raise rescue Exception => e if Chef::Config[:interval] Chef::Log.error("#{e.class}: #{e}") Chef::Log.debug("#{e.class}: #{e}\n#{e.backtrace.join("\n")}") Chef::Log.fatal("Sleeping for #{Chef::Config[:interval]} seconds before trying again") sleep Chef::Config[:interval] retry else Chef::Application.debug_stacktrace(e) Chef::Application.fatal!("#{e.class}: #{e.message}", 1) end end end end
Generated with the Darkfish Rdoc Generator 2.