class ChefApply::TargetHost::ConnectionFailure

Public Class Methods

new(original_exception, connection_opts) click to toggle source

TODO: Currently this only handles sudo-related errors; we should also look at e.cause for underlying connection errors which are presently only visible in log files.

Calls superclass method ChefApply::ErrorNoLogs::new
# File lib/chef_apply/target_host.rb, line 311
def initialize(original_exception, connection_opts)
  sudo_command = connection_opts[:sudo_command]
  init_params =
    #  Comments below show the original_exception.reason values to check for instead of strings,
    #  after train 1.4.12 is consumable.
    case original_exception.message # original_exception.reason
    when /Sudo requires a password/ # :sudo_password_required
      "CHEFTRN003"
    when /Wrong sudo password/ # :bad_sudo_password
      "CHEFTRN004"
    when /Can't find sudo command/, /No such file/, /command not found/ # :sudo_command_not_found
      # NOTE: In the /No such file/ case, reason will be nil - we still have
      # to check message text. (Or PR to train to handle this case)
      ["CHEFTRN005", sudo_command] # :sudo_command_not_found
    when /Sudo requires a TTY.*/   # :sudo_no_tty
      "CHEFTRN006"
    when /has no keys added/
      "CHEFTRN007"
    else
      ["CHEFTRN999", original_exception.message]
    end
  super(*(Array(init_params).flatten))
end