lib/chef/knife/cook.rb in knife-solo-0.0.15 vs lib/chef/knife/cook.rb in knife-solo-0.1.0.pre1

- old
+ new

@@ -1,137 +1,10 @@ -require 'chef/knife' +require 'chef/knife/solo_cook' +require 'knife-solo/deprecated_command' -require 'knife-solo/ssh_command' -require 'knife-solo/kitchen_command' -require 'knife-solo/node_config_command' -require 'knife-solo/tools' - class Chef class Knife - # Approach ported from spatula (https://github.com/trotter/spatula) - # Copyright 2009, Trotter Cashion - class Cook < Knife - OMNIBUS_EMBEDDED_PATHS = ["/opt/chef/embedded/bin", "/opt/opscode/embedded/bin"] - OMNIBUS_EMBEDDED_GEM_PATHS = ["/opt/chef/embedded/lib/ruby/gems/1.9.1", "/opt/opscode/embedded/lib/ruby/gems/1.9.1"] - CHEF_VERSION_CONSTRAINT = ">=0.10.4" - - include KnifeSolo::SshCommand - include KnifeSolo::KitchenCommand - include KnifeSolo::NodeConfigCommand - include KnifeSolo::Tools - - deps do - require 'chef/cookbook/chefignore' - require 'pathname' - KnifeSolo::SshCommand.load_deps - KnifeSolo::NodeConfigCommand.load_deps - end - - banner "knife cook [user@]hostname [json] (options)" - - option :skip_chef_check, - :long => '--skip-chef-check', - :boolean => true, - :description => "Skip the version check on the Chef gem" - - option :sync_only, - :long => '--sync-only', - :boolean => false, - :description => "Only sync the cookbook - do not run Chef" - - option :why_run, - :short => '-W', - :long => '--why-run', - :boolean => true, - :description => "Enable whyrun mode" - - def run - time('Run') do - validate_params! - super - Chef::Config.from_file('solo.rb') - check_chef_version unless config[:skip_chef_check] - generate_node_config - rsync_kitchen - add_patches - cook unless config[:sync_only] - end - end - - def chef_path - Chef::Config.file_cache_path - end - - def chefignore - @chefignore ||= ::Chef::Cookbook::Chefignore.new("./") - end - - # cygwin rsync path must be adjusted to work - def adjust_rsync_path(path) - return path unless windows_node? - path.gsub(/^(\w):/) { "/cygdrive/#{$1}" } - end - - def patch_path - Array(Chef::Config.cookbook_path).first + "/chef_solo_patches/libraries" - end - - def rsync_exclude - (%w{revision-deploys tmp '.*'} + chefignore.ignores).uniq - end - - def debug? - config[:verbosity] and config[:verbosity] > 0 - end - - # Time a command - def time(msg) - return yield unless debug? - ui.msg "Starting '#{msg}'" - start = Time.now - yield - ui.msg "#{msg} finished in #{Time.now - start} seconds" - end - - def rsync_kitchen - time('Rsync kitchen') do - cmd = %Q{rsync -rl --rsh="ssh #{ssh_args}" --delete #{rsync_exclude.collect{ |ignore| "--exclude #{ignore} " }.join} ./ :#{adjust_rsync_path(chef_path)}} - ui.msg cmd if debug? - system! cmd - end - end - - def add_patches - run_portable_mkdir_p(patch_path) - Dir[Pathname.new(__FILE__).dirname.join("patches", "*.rb").to_s].each do |patch| - time(patch) do - system! %Q{rsync -rl --rsh="ssh #{ssh_args}" #{patch} :#{adjust_rsync_path(patch_path)}} - end - end - end - - def check_chef_version - ui.msg "Checking Chef version..." - result = run_command <<-BASH - export PATH="#{OMNIBUS_EMBEDDED_PATHS.join(":")}:$PATH" - export GEM_PATH="#{OMNIBUS_EMBEDDED_GEM_PATHS.join(":")}:$GEM_PATH" - ruby -rubygems -e "gem 'chef', '#{CHEF_VERSION_CONSTRAINT}'" - BASH - raise "Couldn't find Chef #{CHEF_VERSION_CONSTRAINT} on #{host}. Please run `#{$0} prepare #{ssh_args}` to ensure Chef is installed and up to date." unless result.success? - end - - def cook - cmd = "sudo chef-solo -c #{chef_path}/solo.rb -j #{chef_path}/#{node_config}" - cmd << " -l debug" if debug? - cmd << " -N #{config[:chef_node_name]}" if config[:chef_node_name] - cmd << " -W" if config[:why_run] - - stream_command cmd - end - - def validate_params! - validate_first_cli_arg_is_a_hostname! - end - + class Cook < SoloCook + include KnifeSolo::DeprecatedCommand end end end