module 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
editor[W]
env[RW]
options[RW]
Public Class Methods
client_type()
click to toggle source
# File lib/chef/shell.rb, line 182 def self.client_type type = Shell::StandAloneSession type = Shell::SoloSession if solo_mode? type = Shell::SoloLegacySession if Chef::Config[:solo_legacy_shell] type = Shell::ClientSession if Chef::Config[:client] type = Shell::DoppelGangerSession if Chef::Config[:doppelganger] type end
configure_irb()
click to toggle source
# File lib/chef/shell.rb, line 116 def self.configure_irb irb_conf[:HISTORY_FILE] = Chef::Util::PathHelper.home(".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)} (#{Chef::VERSION})> " 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 196 def self.editor @editor || Chef::Config[:editor] || ENV["EDITOR"] end
fatal!(message, exit_status)
click to toggle source
# File lib/chef/shell.rb, line 177 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 164 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 146 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 112 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 108 def self.irb_conf=(conf_hash) @irb_conf = conf_hash end
leader(main_object)
click to toggle source
# File lib/chef/shell.rb, line 132 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 170 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 191 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 102 def self.running? true end
session()
click to toggle source
# File lib/chef/shell.rb, line 137 def self.session unless client_type.instance.node_built? puts "Session type: #{client_type.session_type}" client_type.instance.json_configuration = @json_attribs client_type.instance.reset! end client_type.instance end
setup_logger()
click to toggle source
# File lib/chef/shell.rb, line 92 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
solo_mode?()
click to toggle source
# File lib/chef/shell.rb, line 88 def self.solo_mode? Chef::Config[:solo] end
start()
click to toggle source
Start the irb REPL with chef-shell's customizations
# File lib/chef/shell.rb, line 50 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 if solo_mode? # Setup the mocked ChefServer Chef::Config.local_mode = true Chef::LocalMode.setup_server_connectivity end 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 ensure # We destroy the mocked ChefServer Chef::LocalMode.destroy_server_connectivity if solo_mode? end