Files

Class/Module Index [+]

Quicksearch

Shell

Shell

Shell is Chef in an IRB session. Shell can interact with a Chef server via the REST API, and run and debug recipes interactively.

Constants

LEADERS

Attributes

client_type[RW]
editor[W]
env[RW]
options[RW]

Public Class Methods

configure_irb() click to toggle source
# File lib/chef/shell.rb, line 103
def self.configure_irb
  irb_conf[:HISTORY_FILE] = "~/.chef/chef_shell_history"
  irb_conf[:SAVE_HISTORY] = 1000

  irb_conf[:IRB_RC] = lambda do |conf|
    m = conf.main

    conf.prompt_c       = "chef#{leader(m)} > "
    conf.return_format  = " => %s \n"
    conf.prompt_i       = "chef#{leader(m)} > "
    conf.prompt_n       = "chef#{leader(m)} ?> "
    conf.prompt_s       = "chef#{leader(m)}%l> "
    conf.use_tracer     = false
  end
end
editor() click to toggle source
# File lib/chef/shell.rb, line 181
def self.editor
  @editor || Chef::Config[:editor] || ENV['EDITOR']
end
fatal!(message, exit_status) click to toggle source
# File lib/chef/shell.rb, line 163
def self.fatal!(message, exit_status)
  Chef::Log.fatal(message)
  exit exit_status
end
greeting() click to toggle source
# File lib/chef/shell.rb, line 150
def self.greeting
  " #{Etc.getlogin}@#{Shell.session.node.fqdn}"
rescue NameError, ArgumentError
  ""
end
init(main) click to toggle source
# File lib/chef/shell.rb, line 132
def self.init(main)
  parse_json
  configure_irb

  session # trigger ohai run + session load

  session.node.consume_attributes(@json_attribs)

  Extensions.extend_context_object(main)

  main.version
  puts

  puts "run `help' for help, `exit' or ^D to quit."
  puts
  puts "Ohai2u#{greeting}!"
end
irb_conf() click to toggle source
# File lib/chef/shell.rb, line 99
def self.irb_conf
  @irb_conf || IRB.conf
end
irb_conf=(conf_hash) click to toggle source

Set the irb_conf object to something other than IRB.conf usful for testing.

# File lib/chef/shell.rb, line 95
def self.irb_conf=(conf_hash)
  @irb_conf = conf_hash
end
leader(main_object) click to toggle source
# File lib/chef/shell.rb, line 119
def self.leader(main_object)
  env_string = Shell.env ? " (#{Shell.env})" : ""
  LEADERS[main_object.class] + env_string
end
parse_json() click to toggle source
# File lib/chef/shell.rb, line 156
def self.parse_json
  if Chef::Config[:json_attribs]
    config_fetcher = Chef::ConfigFetcher.new(Chef::Config[:json_attribs])
    @json_attribs = config_fetcher.fetch_json
  end
end
parse_opts() click to toggle source
# File lib/chef/shell.rb, line 176
def self.parse_opts
  @options = Options.new
  @options.parse_opts
end
running?() click to toggle source

Shell assumes it's running whenever it is defined

# File lib/chef/shell.rb, line 89
def self.running?
  true
end
session() click to toggle source
# File lib/chef/shell.rb, line 124
def self.session
  unless client_type.instance.node_built?
    puts "Session type: #{client_type.session_type}"
    client_type.instance.reset!
  end
  client_type.instance
end
setup_logger() click to toggle source
# File lib/chef/shell.rb, line 79
def self.setup_logger
  Chef::Config[:log_level] ||= :warn
  # If log_level is auto, change it to warn
  Chef::Config[:log_level] = :warn if Chef::Config[:log_level] == :auto
  Chef::Log.init(STDERR)
  Mixlib::Authentication::Log.logger = Ohai::Log.logger = Chef::Log.logger
  Chef::Log.level = Chef::Config[:log_level] || :warn
end
start() click to toggle source

Start the irb REPL with chef-shell’s customizations

# File lib/chef/shell.rb, line 49
def self.start
  setup_logger
  # FUGLY HACK: irb gives us no other choice.
  irb_help = [:help, :irb_help, IRB::ExtendCommandBundle::NO_OVERRIDE]
  IRB::ExtendCommandBundle.instance_variable_get(:@ALIASES).delete(irb_help)

  parse_opts
  Chef::Config[:shell_config] = options.config

  # HACK: this duplicates the functions of IRB.start, but we have to do it
  # to get access to the main object before irb starts.
  ::IRB.setup(nil)

  irb = IRB::Irb.new

  init(irb.context.main)


  irb_conf[:IRB_RC].call(irb.context) if irb_conf[:IRB_RC]
  irb_conf[:MAIN_CONTEXT] = irb.context

  trap("SIGINT") do
    irb.signal_handle
  end

  catch(:IRB_EXIT) do
    irb.eval_input
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.