Class/Module Index [+]

Quicksearch

Chef::Application::Solo

Attributes

chef_solo_json[R]

Public Class Methods

new() click to toggle source
# File lib/chef/application/solo.rb, line 150
def initialize
  super
end

Public Instance Methods

reconfigure() click to toggle source
# File lib/chef/application/solo.rb, line 154
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
run_application() click to toggle source
# File lib/chef/application/solo.rb, line 211
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
setup_application() click to toggle source
# File lib/chef/application/solo.rb, line 207
def setup_application
  Chef::Daemon.change_privilege
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.