Class: Psychic::Shell::MixlibShellOutExecutor

Inherits:
Object
  • Object
show all
Includes:
Logger
Defined in:
lib/psychic/shell/mixlib_shellout_executor.rb

Constant Summary collapse

MIXLIB_SHELLOUT_EXCEPTION_CLASSES =
Mixlib::ShellOut.constants.map do|name|
  klass = Mixlib::ShellOut.const_get(name)
  if klass.is_a?(Class) && klass <= RuntimeError
    klass
  else
    nil
  end
end.compact

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Logger

#log_level=, #logger, #new_logger

Instance Attribute Details

#shellObject (readonly)

Returns the value of attribute shell.



25
26
27
# File 'lib/psychic/shell/mixlib_shellout_executor.rb', line 25

def shell
  @shell
end

Instance Method Details

#execute(command, opts) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/psychic/shell/mixlib_shellout_executor.rb', line 36

def execute(command, opts)
  @logger = opts.delete(:logger) || logger
  @shell = Mixlib::ShellOut.new(command, opts)
  @shell.live_stream = IOToLog.new(@logger)
  @shell.run_command
  execution_result
rescue SystemCallError, *MIXLIB_SHELLOUT_EXCEPTION_CLASSES, TypeError => e
  # See https://github.com/opscode/mixlib-shellout/issues/62
  execution_error = ExecutionError.new(e)
  execution_error.execution_result = execution_result
  raise execution_error
end