class Cheffish::ChefRun

Attributes

chef_config[R]

Public Class Methods

new(chef_config = {}) click to toggle source

@param chef_config A hash with symbol keys that looks suspiciously similar to `Chef::Config`.

Some possible options:
- stdout: <IO object> - where to stream stdout to
- stderr: <IO object> - where to stream stderr to
- log_level: :debug|:info|:warn|:error|:fatal
- log_location: <path|IO object> - where to stream logs to
- verbose_logging: true|false - true if you want verbose logging in :debug
# File lib/cheffish/chef_run.rb, line 14
def initialize(chef_config = {})
  @chef_config = chef_config || {}
end

Public Instance Methods

client() click to toggle source
# File lib/cheffish/chef_run.rb, line 34
def client
  @client ||= begin
    chef_config = self.chef_config.dup
    chef_config[:log_level] ||= :debug unless chef_config.key?(:log_level)
    chef_config[:verbose_logging] = false unless chef_config.key?(:verbose_logging)
    chef_config[:stdout] = StringIOTee.new(chef_config[:stdout])
    chef_config[:stderr] = StringIOTee.new(chef_config[:stderr])
    chef_config[:log_location] = StringIOTee.new(chef_config[:log_location])
    @client = ::Cheffish::BasicChefClient.new(nil,
      [ event_sink, Chef::Formatters.new(:doc, chef_config[:stdout], chef_config[:stderr]) ],
      **chef_config)
  end
end
compile_recipe(&recipe) click to toggle source
# File lib/cheffish/chef_run.rb, line 83
def compile_recipe(&recipe)
  client.load_block(&recipe)
end
converge() click to toggle source
# File lib/cheffish/chef_run.rb, line 87
def converge
  client.converge
  @converged = true
rescue RuntimeError => e
  @raised_exception = e
  raise
end
converge_failed?() click to toggle source
# File lib/cheffish/chef_run.rb, line 108
def converge_failed?
  @raised_exception.nil? ? false : true
end
converged?() click to toggle source
# File lib/cheffish/chef_run.rb, line 104
def converged?
  !!@converged
end
event_sink() click to toggle source
# File lib/cheffish/chef_run.rb, line 48
def event_sink
  @event_sink ||= EventSink.new
end
logged_errors() click to toggle source
# File lib/cheffish/chef_run.rb, line 71
def logged_errors
  logs.lines.select { |l| l =~ /^\[[^\]]*\] ERROR:/ }.join("\n")
end
logged_info() click to toggle source
# File lib/cheffish/chef_run.rb, line 75
def logged_info
  logs.lines.select { |l| l =~ /^\[[^\]]*\] INFO:/ }.join("\n")
end
logged_warnings() click to toggle source
# File lib/cheffish/chef_run.rb, line 67
def logged_warnings
  logs.lines.select { |l| l =~ /^\[[^\]]*\] WARN:/ }.join("\n")
end
logs() click to toggle source
# File lib/cheffish/chef_run.rb, line 63
def logs
  @client ? client.chef_config[:log_location].string : nil
end
output_for_failure_message() click to toggle source
# File lib/cheffish/chef_run.rb, line 120
def output_for_failure_message
  message = ""
  if stdout && !stdout.empty?
    message << "---                    ---\n"
    message << "--- Chef Client Output ---\n"
    message << "---                    ---\n"
    message << stdout
    message << "\n" unless stdout.end_with?("\n")
  end
  if stderr && !stderr.empty?
    message << "---                          ---\n"
    message << "--- Chef Client Error Output ---\n"
    message << "---                          ---\n"
    message << stderr
    message << "\n" unless stderr.end_with?("\n")
  end
  if logs && !logs.empty?
    message << "---                  ---\n"
    message << "--- Chef Client Logs ---\n"
    message << "---                  ---\n"
    message << logs
  end
  message
end
reset() click to toggle source
# File lib/cheffish/chef_run.rb, line 95
def reset
  @client = nil
  @converged = nil
  @stdout = nil
  @stderr = nil
  @logs = nil
  @raised_exception = nil
end
resources() click to toggle source
# File lib/cheffish/chef_run.rb, line 79
def resources
  client.run_context.resource_collection
end
stderr() click to toggle source
# File lib/cheffish/chef_run.rb, line 59
def stderr
  @client ? client.chef_config[:stderr].string : nil
end
stdout() click to toggle source

output

# File lib/cheffish/chef_run.rb, line 55
def stdout
  @client ? client.chef_config[:stdout].string : nil
end
up_to_date?() click to toggle source
# File lib/cheffish/chef_run.rb, line 116
def up_to_date?
  !client.updated?
end
updated?() click to toggle source
# File lib/cheffish/chef_run.rb, line 112
def updated?
  client.updated?
end