#!/usr/bin/env ruby recipe_path = ARGV[0] if recipe_path.nil? STDERR.puts "usage: chef-apply RECIPE_FILE" exit 1 end recipe_path = File.expand_path(recipe_path) if !File.exist?(recipe_path) STDERR.puts "No file #{recipe_path}" exit 1 end require 'rubygems' require 'chef/client' require 'chef/providers' require 'chef/resources' Chef::Log.level = :info class Chef::Client attr_reader :events end # expedient. Chef::Config[:solo] = true client = Chef::Client.new client.run_ohai client.build_node run_context = if client.events.nil? Chef::RunContext.new(client.node, {}) else Chef::RunContext.new(client.node, {}, client.events) end recipe = Chef::Recipe.new("(chef-apply cookbook)", "(chef-apply recipe)", run_context) recipe.from_file(recipe_path) runner = Chef::Runner.new(run_context) runner.converge