Class: AvstCloud::SshTask

Inherits:
Task
  • Object
show all
Defined in:
lib/avst-cloud/task.rb

Direct Known Subclasses

DisableRequireTty, SshCommandTask, WaitUntilReady

Instance Method Summary collapse

Methods inherited from Task

#initialize

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