16. ShowInterfaceMessageFormatTable = [
[/^(w+) is (w+), line protocol is (w+)s*/, :ifStatus],
[/^ Hardware is (.+), address is ([^s]+) /, :ifPhy],
[/^ Description: (.+)/, :descr],
・・・
!
def ifStatus v
return {ifName: v[1].to_s, ifOper: v[2].to_s, ifAdmin: v[3].to_s}
end
・・・
!
def interfaceMsgAnalyzer msg
ret = {}
msg.each do |line|
next if pickupVal(line.chomp, ShowInterfaceMessageFormatTable, ret)
STDERR.puts “no format found => #{line}"
exit
end
return ret
end
!
def pickupVal line, fmtTable, ret
fmtTable.each do |tbl|
if (m = tbl[0].match(line))
ret.merge!(self.send(tbl[1], m)) if tbl[1] != nil
return true
end
end
false
end
ここまで5分
21. class NetDevice
def initialize
@interfaces = {}
@device = nil
end
!
def connect var
return @device if @device != nil
@device = adapter var
@device.login
end
!
def interface name, refresh = nil
return @interfaces[name] if @interfaces.has_key?(name) and refresh == nil
msg = @device.send("show_interface_#{name}")
@interfaces[name] = Interface.new(
MessageAnalyzer::Interface::analyze((msg[0])[1..-2]))
@interfaces[name].adapter @device
@interfaces[name]
end
!
private
def adapter var
Expect4r::Ios.new(:telnet, var)
end
end 悩みながら打ち込んで15分くらい
22. SSH対応
❖ telnetとの違いはアクセスするプロトコルだけなのでadapterを
介して切り替える
class NetDevice
def connect var
@device = adapter var
end
・・・
private
def adapter var
Expect4r::Ios.new(:telnet, var)
end
!
class NetDevice::SSH < NetDevice
def adapter var
Expect4r::Ios.new(:ssh, var)
end
!
router = NetDevice::SSH.new
router.interface・・・(以下同文)
これは1分かからない