Class: Train::Extras::LinuxCommand

Inherits:
CommandWrapperBase show all
Defined in:
lib/train/extras/command_wrapper.rb

Overview

Wrap linux commands and add functionality like sudo.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(backend, options) ⇒ LinuxCommand

Returns a new instance of LinuxCommand.



40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/train/extras/command_wrapper.rb', line 40

def initialize(backend, options)
  @backend = backend
  validate_options(options)

  @shell = options[:shell]
  @shell_options = options[:shell_options] # e.g. '--login'
  @shell_command = options[:shell_command] # e.g. '/bin/sh'
  @sudo = options[:sudo]
  @sudo_options = options[:sudo_options]
  @sudo_password = options[:sudo_password]
  @sudo_command = options[:sudo_command]
  @user = options[:user]
end

Class Method Details

.active?(options) ⇒ Boolean

Returns:

  • (Boolean)


82
83
84
85
86
87
# File 'lib/train/extras/command_wrapper.rb', line 82

def self.active?(options)
  options.is_a?(Hash) && (
    options[:sudo] ||
    options[:shell]
  )
end

Instance Method Details

#run(command) ⇒ Object



78
79
80
# File 'lib/train/extras/command_wrapper.rb', line 78

def run(command)
  shell_wrap(sudo_wrap(command))
end

#verifyObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/train/extras/command_wrapper.rb', line 55

def verify
  res = @backend.run_command(run('echo'))
  return nil if res.exit_status == 0
  rawerr = res.stdout + ' ' + res.stderr

  {
    'Sorry, try again' => ['Wrong sudo password.', :bad_sudo_password],
    'sudo: no tty present and no askpass program specified' =>
      ['Sudo requires a password, please configure it.', :sudo_password_required],
    'sudo: command not found' =>
      ["Can't find sudo command. Please either install and "\
        'configure it on the target or deactivate sudo.', :sudo_command_not_found],
    'sudo: sorry, you must have a tty to run sudo' =>
      ['Sudo requires a TTY. Please see the README on how to configure '\
        'sudo to allow for non-interactive usage.', :sudo_no_tty],
  }.each do |sudo, human|
    rawerr = human if rawerr.include? sudo
  end

  rawerr
end