Exception: ChefApply::TargetHost::ConnectionFailure

Inherits:
ErrorNoLogs
  • Object
show all
Defined in:
lib/chef_apply/target_host.rb

Instance Attribute Summary

Attributes inherited from Error

#decorate, #id, #params, #show_log, #show_stack

Instance Method Summary collapse

Constructor Details

#initialize(original_exception, connection_opts) ⇒ ConnectionFailure

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.



307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
# File 'lib/chef_apply/target_host.rb', line 307

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