diff options
author | Saku Ytti <saku@ytti.fi> | 2013-04-17 17:48:50 +0300 |
---|---|---|
committer | Saku Ytti <saku@ytti.fi> | 2013-04-17 17:48:50 +0300 |
commit | 9d217025fac3e335c308f02e7377e14ccfdc0e66 (patch) | |
tree | b90d4d04947fe26a9e592e12d8c4352142380c03 /lib/oxidized/input/telnet.rb |
Initial commit
Silly for shit-and-giggles attempt at rancid
Diffstat (limited to 'lib/oxidized/input/telnet.rb')
-rw-r--r-- | lib/oxidized/input/telnet.rb | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/lib/oxidized/input/telnet.rb b/lib/oxidized/input/telnet.rb new file mode 100644 index 0000000..6dae2d6 --- /dev/null +++ b/lib/oxidized/input/telnet.rb @@ -0,0 +1,51 @@ +module Oxidized + require 'net/telnet' + require 'oxidized/input/cli' + class Telnet < Input + include CLI + attr_reader :telnet + + def connect node + @node = node + @timeout = CFG.timeout + @node.model.cfg['telnet'].each { |cb| instance_exec &cb } + begin + @telnet = Net::Telnet.new 'Host' => @node.ip, 'Waittime' => @timeout + expect username + @telnet.puts @node.auth[:username] + expect password + @telnet.puts @node.auth[:password] + expect @node.prompt + rescue Errno::ECONNREFUSED, Net::OpenTimeout, Net::ReadTimeout + return false + end + end + + def cmd cmd, expect=@node.prompt + Log.debug "Telnet: #{cmd} @#{@node.name}" + args = { 'String' => cmd } + args.merge!({ 'Match' => expect, 'Timeout' => @timeout }) if expect + @telnet.cmd args + end + + private + + def expect re + @telnet.waitfor 'Match' => re, 'Timeout' => @timeout + end + + def disconnect + @pre_logout.each { |command| cmd(command, nil) } + @telnet.close + end + + def username re=/^(Username|login)/ + @username or @username = re + end + + def password re=/^Password/ + @password or @password = re + end + + end +end |