Class: Dumbcli::Device::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/dumbcli/device/base.rb

Direct Known Subclasses

A10, Arista, Cisco, CiscoAsa, CiscoXr, Juniper

Instance Method Summary collapse

Constructor Details

#initialize(host, options = {}) ⇒ Base

Returns a new instance of Base.

Raises:

  • (ArgumentError)


6
7
8
9
10
# File 'lib/dumbcli/device/base.rb', line 6

def initialize(host, options={})
  raise ArgumentError, 'host is required' unless host
  @host = host
  @options = options
end

Instance Method Details

#closeObject



48
49
50
51
52
# File 'lib/dumbcli/device/base.rb', line 48

def close
  return unless established?

  execute_exit
end

#connectObject



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 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(, '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?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/dumbcli/device/base.rb', line 24

def established?
  @connection && !@connection.sock.closed?
end

#execute(cmd) ⇒ Object Also known as: exec

Raises:

  • (ArgumentError)


12
13
14
15
16
17
18
19
20
21
# 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