diff options
Diffstat (limited to 'vendor/supply_drop/lib/supply_drop/plugin.rb')
-rw-r--r-- | vendor/supply_drop/lib/supply_drop/plugin.rb | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/vendor/supply_drop/lib/supply_drop/plugin.rb b/vendor/supply_drop/lib/supply_drop/plugin.rb new file mode 100644 index 0000000..348b22b --- /dev/null +++ b/vendor/supply_drop/lib/supply_drop/plugin.rb @@ -0,0 +1,94 @@ +module SupplyDrop + module Plugin + + def rsync + SupplyDrop::Util.thread_pool_size = puppet_parallel_rsync_pool_size + servers = SupplyDrop::Util.optionally_async(find_servers_for_task(current_task), puppet_parallel_rsync) + failed_servers = servers.map do |server| + rsync_cmd = SupplyDrop::Rsync.command( + puppet_source, + SupplyDrop::Rsync.remote_address(server.user || fetch(:user, ENV['USER']), server.host, puppet_destination), + :delete => true, + :excludes => puppet_excludes, + :ssh => ssh_options.merge(server.options[:ssh_options]||{}) + ) + logger.debug rsync_cmd + server.host unless system rsync_cmd + end.compact + + raise "rsync failed on #{failed_servers.join(',')}" if failed_servers.any? + end + + def prepare + run "mkdir -p #{puppet_destination}" + run "#{sudo} chown -R $USER: #{puppet_destination}" + end + + def noop + puppet(:noop) + end + + def apply + puppet(:apply) + end + + def lock + if should_lock? + run <<-GETLOCK +if [ ! -f #{puppet_lock_file} ]; then + touch #{puppet_lock_file}; +else + stat -c "#{red_text("Puppet in progress, #{puppet_lock_file} owned by %U since %x")}" #{puppet_lock_file} >&2; + exit 1; +fi + GETLOCK + end + end + + def unlock + run "#{sudo} rm -f #{puppet_lock_file}; true" if should_lock? + end + + private + + def should_lock? + puppet_lock_file && !ENV['NO_PUPPET_LOCK'] + end + + def puppet(command = :noop) + #puppet_cmd = "cd #{puppet_destination} && #{sudo_cmd} #{puppet_command} --modulepath=#{puppet_lib} #{puppet_parameters}" + puppet_cmd = "cd #{puppet_destination} && #{sudo_cmd} #{puppet_command} #{puppet_parameters}" + flag = command == :noop ? '--noop' : '' + + writer = if puppet_stream_output + SupplyDrop::Writer::Streaming.new(logger) + else + SupplyDrop::Writer::Batched.new(logger) + end + + writer = SupplyDrop::Writer::File.new(writer, puppet_write_to_file) unless puppet_write_to_file.nil? + + begin + run "#{puppet_cmd} #{flag}" do |channel, stream, data| + writer.collect_output(channel[:host], data) + end + logger.debug "Puppet #{command} complete." + ensure + writer.all_output_collected + end + end + + def red_text(text) + "\033[0;31m#{text}\033[0m" + end + + def sudo_cmd + if fetch(:use_sudo, true) + sudo(:as => puppet_runner) + else + logger.info "NOTICE: puppet_runner configuration invalid when use_sudo is false, ignoring..." unless puppet_runner.nil? + '' + end + end + end +end |