class Dumbcli::Device::Base
Public Class Methods
new(host, options={})
click to toggle source
# File lib/dumbcli/device/base.rb, line 6 def initialize(host, options={}) raise ArgumentError, 'host is required' unless host @host = host @options = options end
Public Instance Methods
close()
click to toggle source
# File lib/dumbcli/device/base.rb, line 48 def close return unless established? execute_exit end
connect()
click to toggle source
# File lib/dumbcli/device/base.rb, line 28 def connect return if established? Dumbcli.logger.info "Trying to connect #{@host}" @connection = Net::Telnet.new('Prompt' => prompt, 'Proxy' => IO.popen(login_cmd, 'r+'), 'Timeout' => @options[:timeout] || 30) begin result = @connection.waitfor(prompt) if result =~ error_code @connection.close raise $1 end rescue @connection.close raise end end
established?()
click to toggle source
# File lib/dumbcli/device/base.rb, line 24 def established? @connection && !@connection.sock.closed? end
execute(cmd)
click to toggle source
# File lib/dumbcli/device/base.rb, line 12 def execute(cmd) raise ArgumentError, 'cmd is required' unless cmd connect unless established? Dumbcli.logger.info "Executing: #{cmd}" @connection.cmd(cmd).tap {|result| Dumbcli.logger.debug result } end
Also aliased as: exec
Private Instance Methods
error_code()
click to toggle source
# File lib/dumbcli/device/base.rb, line 66 def error_code /^Error:\s*(.*)$/ end
execute_exit()
click to toggle source
# File lib/dumbcli/device/base.rb, line 70 def execute_exit unless execute('exit') =~ /connection closed|Connection to \S+ closed\./i # see clogin sleep 1 # wait a bit until completely close execute 'exit' # even from 'configure terminal' mode. see clogin end end
flush()
click to toggle source
# File lib/dumbcli/device/base.rb, line 91 def flush result = '' sleep 0.5 until (remainder = read).empty? result << remainder end result end
login_cmd()
click to toggle source
# File lib/dumbcli/device/base.rb, line 57 def login_cmd raise 'Not implemented yet' end
prompt()
click to toggle source
# File lib/dumbcli/device/base.rb, line 61 def prompt p = /\S+(?:>|#)\s*/ /#{p}(?:[\n\r]+#{p})*/ end
read()
click to toggle source
# File lib/dumbcli/device/base.rb, line 77 def read return unless established? result = '' begin loop do result << @connection.sock.read_nonblock(1024) end rescue Errno::EAGAIN, Errno::EINTR, EOFError end result end