class Chef::Application::Apply
Attributes
json_attribs[R]
Public Class Methods
new()
click to toggle source
Calls superclass method
Chef::Application::new
# File lib/chef/application/apply.rb, line 121 def initialize super end
Public Instance Methods
get_recipe_and_run_context()
click to toggle source
# File lib/chef/application/apply.rb, line 155 def get_recipe_and_run_context Chef::Config[:solo_legacy_mode] = true @chef_client = Chef::Client.new(@json_attribs) @chef_client.run_ohai @chef_client.load_node @chef_client.build_node run_context = if @chef_client.events.nil? Chef::RunContext.new(@chef_client.node, {}) else Chef::RunContext.new(@chef_client.node, {}, @chef_client.events) end recipe = Chef::Recipe.new("(chef-apply cookbook)", "(chef-apply recipe)", run_context) [recipe, run_context] end
parse_json()
click to toggle source
# File lib/chef/application/apply.rb, line 134 def parse_json if Chef::Config[:json_attribs] config_fetcher = Chef::ConfigFetcher.new(Chef::Config[:json_attribs]) @json_attribs = config_fetcher.fetch_json end end
read_recipe_file(file_name)
click to toggle source
# File lib/chef/application/apply.rb, line 141 def read_recipe_file(file_name) if file_name.nil? Chef::Application.fatal!("No recipe file was provided", Chef::Exceptions::RecipeNotFound.new) else recipe_path = File.expand_path(file_name) unless File.exist?(recipe_path) Chef::Application.fatal!("No file exists at #{recipe_path}", Chef::Exceptions::RecipeNotFound.new) end recipe_fh = open(recipe_path) recipe_text = recipe_fh.read [recipe_text, recipe_fh] end end
reconfigure()
click to toggle source
# File lib/chef/application/apply.rb, line 125 def reconfigure parse_options Chef::Config.merge!(config) configure_logging Chef::Config.export_proxies Chef::Config.init_openssl parse_json end
run(enforce_license = false)
click to toggle source
Get this party started
# File lib/chef/application/apply.rb, line 219 def run(enforce_license = false) reconfigure check_license_acceptance if enforce_license run_application end
run_application()
click to toggle source
# File lib/chef/application/apply.rb, line 207 def run_application parse_options run_chef_recipe Chef::Application.exit! "Exiting", 0 rescue SystemExit raise rescue Exception => e Chef::Application.debug_stacktrace(e) Chef::Application.fatal!("#{e.class}: #{e.message}", e) end
run_chef_recipe()
click to toggle source
# File lib/chef/application/apply.rb, line 179 def run_chef_recipe if config[:execute] @recipe_text = config[:execute] temp_recipe_file elsif config[:stdin] @recipe_text = STDIN.read temp_recipe_file else if !ARGV[0] puts opt_parser Chef::Application.exit! "No recipe file provided", Chef::Exceptions::RecipeNotFound.new end @recipe_filename = ARGV[0] @recipe_text, @recipe_fh = read_recipe_file @recipe_filename end recipe, run_context = get_recipe_and_run_context recipe.instance_eval(@recipe_text, @recipe_filename, 1) runner = Chef::Runner.new(run_context) catch(:end_client_run_early) do begin runner.converge ensure @recipe_fh.close end end Chef::Platform::Rebooter.reboot_if_needed!(runner) end
temp_recipe_file()
click to toggle source
write recipe to temp file, so in case of error, user gets error w/ context
# File lib/chef/application/apply.rb, line 172 def temp_recipe_file @recipe_fh = Tempfile.open("recipe-temporary-file") @recipe_fh.write(@recipe_text) @recipe_fh.rewind @recipe_filename = @recipe_fh.path end