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.



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/train/extras/command_wrapper.rb', line 38

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

  @sudo = options[:sudo]
  @sudo_options = options[:sudo_options]
  @sudo_password = options[:sudo_password]
  @sudo_command = options[:sudo_command]
  @user = options[:user]
  @prefix = build_prefix
end

Class Method Details

.active?(options) ⇒ Boolean

Returns:

  • (Boolean)


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

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

Instance Method Details

#run(command) ⇒ Object



74
75
76
# File 'lib/train/extras/command_wrapper.rb', line 74

def run(command)
  @prefix + command
end

#verifyObject



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/train/extras/command_wrapper.rb', line 51

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.',
    'sudo: no tty present and no askpass program specified' =>
      'Sudo requires a password, please configure it.',
    'sudo: command not found' =>
      "Can't find sudo command. Please either install and "\
        'configure it on the target or deactivate sudo.',
    '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.',
  }.each do |sudo, human|
    rawerr = human if rawerr.include? sudo
  end

  rawerr
end