Class: AvstCloud::SshTask
Direct Known Subclasses
Instance Method Summary collapse
Methods inherited from Task
Methods included from Logging
included, logger, #logger, logger=, mask_message, show_passwords=
Constructor Details
This class inherits a constructor from AvstCloud::Task
Instance Method Details
#execute(server) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/avst-cloud/task.rb', line 29 def execute(server) unless server.ip_address logger.error 'Can not find host'.red raise 'Can not find ip address, access_user or access_password' end unless server.access_user logger.error 'Access user not found. Please provide username for this server.'.red raise 'Access user not found. Please provide username for this server.' end unless server.access_password logger.error 'Password not found. Please provide password or pem key for this server.'.red raise 'Password not found. Please provide root_password in config. for this server.' end logger.debug "Using #{server.access_user}@#{server.ip_address} with #{Logging.mask_message(server.access_password)} to perform ssh task." attempts = 1 success = false max_attempts = 50 while attempts < max_attempts and !success begin Net::SSH.start(server.ip_address, server.access_user, :password => server.access_password, :keys => [server.access_password]) do |session| ssh_command session end success = true rescue Net::SSH::AuthenticationFailed, Errno::ECONNREFUSED, Errno::ETIMEDOUT, Net::SSH::ConnectionTimeout, Timeout::Error => e logger.debug "Connection refused, timeout or authentication failed. Server may not have booted yet. Sleeping #{attempts}/#{max_attempts}: #{e.inspect}" sleep(10) attempts=attempts+1 end end unless success logger.error 'Bootstrapping: failed to find server to connect to' raise 'Bootstrapping: failed to find server to connect to' end end |
#ssh_command(session) ⇒ Object
67 68 69 |
# File 'lib/avst-cloud/task.rb', line 67 def ssh_command(session) raise 'Unimplemented...' end |