class Chef::Application::Apply
Attributes
Public Class Methods
Source
# File lib/chef/application/apply.rb, line 139 def initialize super end
Calls superclass method
Chef::Application::new
Public Instance Methods
Source
# File lib/chef/application/apply.rb, line 173 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("(#{ChefUtils::Dist::Apply::EXEC} cookbook)", "(#{ChefUtils::Dist::Apply::EXEC} recipe)", run_context) [recipe, run_context] end
Source
# File lib/chef/application/apply.rb, line 152 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
Source
# File lib/chef/application/apply.rb, line 159 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
Source
# File lib/chef/application/apply.rb, line 143 def reconfigure parse_options Chef::Config.merge!(config) configure_logging Chef::Config.export_proxies Chef::Config.init_openssl parse_json end
Source
# File lib/chef/application/apply.rb, line 242 def run(enforce_license: false) reconfigure check_license_acceptance if enforce_license run_application end
Get this party started
Source
# File lib/chef/application/apply.rb, line 230 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
Source
# File lib/chef/application/apply.rb, line 197 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 unless 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 if config[:yaml] || File.extname(@recipe_filename) == ".yml" logger.info "Parsing recipe as YAML" recipe.from_yaml(@recipe_text) else recipe.instance_eval(@recipe_text, @recipe_filename, 1) end runner = Chef::Runner.new(run_context) catch(:end_client_run_early) do runner.converge ensure @recipe_fh.close end Chef::Platform::Rebooter.reboot_if_needed!(runner) end
Source
# File lib/chef/application/apply.rb, line 190 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
write recipe to temp file, so in case of error, user gets error w/ context