Parent

Included Modules

Files

Class/Module Index [+]

Quicksearch

Chef::Application

Public Class Methods

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

  @chef_client = nil
  @chef_client_json = nil
  trap("TERM") do
    Chef::Application.fatal!("SIGTERM received, stopping", 1)
  end

  trap("INT") do
    Chef::Application.fatal!("SIGINT received, stopping", 2)
  end

  unless Chef::Platform.windows?
    trap("QUIT") do
      Chef::Log.info("SIGQUIT received, call stack:\n  " + caller.join("\n  "))
    end

    trap("HUP") do
      Chef::Log.info("SIGHUP received, reconfiguring")
      reconfigure
    end
  end

  # Always switch to a readable directory. Keeps subsequent Dir.chdir() {}
  # from failing due to permissions when launched as a less privileged user.
end

Public Instance Methods

auto_log_level?() click to toggle source
# File lib/chef/application.rb, line 154
def auto_log_level?
  Chef::Config[:log_level] == :auto
end
configure_chef() click to toggle source

Parse the configuration file

# File lib/chef/application.rb, line 77
def configure_chef
  parse_options

  begin
    case config[:config_file]
    when /^(http|https):\/\//
      Chef::REST.new("", nil, nil).fetch(config[:config_file]) { |f| apply_config(f.path) }
    else
      ::File::open(config[:config_file]) { |f| apply_config(f.path) }
    end
  rescue Errno::ENOENT => error
    Chef::Log.warn("*****************************************")
    Chef::Log.warn("Did not find config file: #{config[:config_file]}, using command line options.")
    Chef::Log.warn("*****************************************")

    Chef::Config.merge!(config)
  rescue SocketError => error
    Chef::Application.fatal!("Error getting config file #{Chef::Config[:config_file]}", 2)
  rescue Chef::Exceptions::ConfigurationError => error
    Chef::Application.fatal!("Error processing config file #{Chef::Config[:config_file]} with error #{error.message}", 2)
  rescue Exception => error
    Chef::Application.fatal!("Unknown error processing config file #{Chef::Config[:config_file]} with error #{error.message}", 2)
  end

end
configure_logging() click to toggle source

Initialize and configure the logger.

Loggers and Formatters

In Chef 10.x and previous, the Logger was the primary/only way that Chef communicated information to the user. In Chef 10.14, a new system, "output formatters" was added, and in Chef 11.0+ it is the default when running chef in a console (detected by `STDOUT.tty?`). Because output formatters are more complex than the logger system and users have less experience with them, the config option `force_logger` is provided to restore the Chef 10.x behavior.

Conversely, for users who want formatter output even when chef is running unattended, the `force_formatter` option is provided.

Auto Log Level

When `log_level` is set to `:auto` (default), the log level will be `:warn` when the primary output mode is an output formatter (see using_output_formatter?) and `:info` otherwise.

Automatic STDOUT Logging

When `force_logger` is configured (e.g., Chef 10 mode), a second logger with output on STDOUT is added when running in a console (STDOUT is a tty) and the configured log_location isn't STDOUT. This accounts for the case that a user has configured a log_location in client.rb, but is running chef-client by hand to troubleshoot a problem.

# File lib/chef/application.rb, line 127
def configure_logging
  Chef::Log.init(Chef::Config[:log_location])
  if want_additional_logger?
    configure_stdout_logger
  end
  Chef::Log.level = resolve_log_level
end
configure_stdout_logger() click to toggle source
# File lib/chef/application.rb, line 135
def configure_stdout_logger
  stdout_logger = Logger.new(STDOUT)
  STDOUT.sync = true
  stdout_logger.formatter = Chef::Log.logger.formatter
  Chef::Log.loggers <<  stdout_logger
end
reconfigure() click to toggle source

Reconfigure the application. You'll want to override and super this method.

# File lib/chef/application.rb, line 64
def reconfigure
  configure_chef
  configure_logging
end
resolve_log_level() click to toggle source

if log_level is `:auto`, convert it to :warn (when using output formatter) or :info (no output formatter). See also using_output_formatter?

# File lib/chef/application.rb, line 160
def resolve_log_level
  if auto_log_level?
    if using_output_formatter?
      :warn
    else
      :info
    end
  else
    Chef::Config[:log_level]
  end
end
run() click to toggle source

Get this party started

# File lib/chef/application.rb, line 70
def run
  reconfigure
  setup_application
  run_application
end
run_application() click to toggle source

Actually run the application

# File lib/chef/application.rb, line 178
def run_application
  raise Chef::Exceptions::Application, "#{self.to_s}: you must override run_application"
end
run_chef_client() click to toggle source

Initializes Chef::Client instance and runs it

# File lib/chef/application.rb, line 183
def run_chef_client
  @chef_client = Chef::Client.new(
    @chef_client_json, 
    :override_runlist => config[:override_runlist]
  )
  @chef_client_json = nil

  @chef_client.run
  @chef_client = nil
end
setup_application() click to toggle source

Called prior to starting the application, by the run method

# File lib/chef/application.rb, line 173
def setup_application
  raise Chef::Exceptions::Application, "#{self.to_s}: you must override setup_application"
end
using_output_formatter?() click to toggle source

Use of output formatters is assumed if `force_formatter` is set or if `force_logger` is not set and STDOUT is to a console (tty)

# File lib/chef/application.rb, line 150
def using_output_formatter?
  Chef::Config[:force_formatter] || (!Chef::Config[:force_logger] && STDOUT.tty?)
end
want_additional_logger?() click to toggle source

Based on config and whether or not STDOUT is a tty, should we setup a secondary logger for stdout?

# File lib/chef/application.rb, line 144
def want_additional_logger?
  ( Chef::Config[:log_location] != STDOUT ) && STDOUT.tty? && (!Chef::Config[:daemonize]) && (Chef::Config[:force_logger])
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.