lib/chef_metal/transport.rb in chef-metal-0.14.2 vs lib/chef_metal/transport.rb in chef-metal-0.15

- old
+ new

@@ -1,87 +2 @@ -require 'timeout' - -module ChefMetal - class Transport - DEFAULT_TIMEOUT = 15*60 - - # Execute a program on the remote host. - # - # == Arguments - # command: command to run. May be a shell-escaped string or a pre-split array containing [PROGRAM, ARG1, ARG2, ...]. - # options: hash of options, including but not limited to: - # :timeout => NUM_SECONDS - time to wait before program finishes (throws an exception otherwise). Set to nil or 0 to run with no timeout. Defaults to 15 minutes. - # :stream => BOOLEAN - true to stream stdout and stderr to the console. - # :stream => BLOCK - block to stream stdout and stderr to (block.call(stdout_chunk, stderr_chunk)) - # :stream_stdout => FD - FD to stream stdout to (defaults to IO.stdout) - # :stream_stderr => FD - FD to stream stderr to (defaults to IO.stderr) - # :read_only => BOOLEAN - true if command is guaranteed not to change system state (useful for Docker) - def execute(command, options = {}) - raise "execute not overridden on #{self.class}" - end - - def read_file(path) - raise "read_file not overridden on #{self.class}" - end - - def write_file(path, content) - raise "write_file not overridden on #{self.class}" - end - - def download_file(path, local_path) - IO.write(local_path, read_file(path)) - end - - def upload_file(local_path, path) - write_file(path, IO.read(local_path)) - end - - def make_url_available_to_remote(local_url) - raise "make_url_available_to_remote not overridden on #{self.class}" - end - - def disconnect - raise "disconnect not overridden on #{self.class}" - end - - def available? - raise "available? not overridden on #{self.class}" - end - - # Config hash, including :log_level and :logger as keys - def config - raise "config not overridden on #{self.class}" - end - - protected - - # Helper to implement stdout/stderr streaming in execute - def stream_chunk(options, stdout_chunk, stderr_chunk) - if options[:stream].is_a?(Proc) - options[:stream].call(stdout_chunk, stderr_chunk) - else - if stdout_chunk - if options[:stream_stdout] - options[:stream_stdout].print stdout_chunk - elsif options[:stream] || config[:log_level] == :debug - STDOUT.print stdout_chunk - end - end - if stderr_chunk - if options[:stream_stderr] - options[:stream_stderr].print stderr_chunk - elsif options[:stream] || config[:log_level] == :debug - STDERR.print stderr_chunk - end - end - end - end - - def with_execute_timeout(options, &block) - Timeout::timeout(execute_timeout(options), &block) - end - - def execute_timeout(options) - options.has_key?(:timeout) ? options[:timeout] : DEFAULT_TIMEOUT - end - end -end +require "chef/provisioning/transport"