diff options
author | Saku Ytti <saku@ytti.fi> | 2013-05-01 13:45:02 +0300 |
---|---|---|
committer | Saku Ytti <saku@ytti.fi> | 2013-05-01 14:06:44 +0300 |
commit | c252a589b6b0274a17bfe40db3fd57ebeea3beb8 (patch) | |
tree | 0115a10db0f37506e72aaf4a873aeea93734f6ab /lib/oxidized/input/ssh.rb | |
parent | 387b725fcd248d052cfe68da97f03192959ad6a4 (diff) |
Add Model#expect, support block at post/pre config
Now we can deal with pager and additional PW prompts, such as 'enable'
Examples in IOS model how to use.
The Telnet implementation is particularly fugly, I just need one line in
'waitfor' to handle pager while waiting for prompt, but couldn't figure
out clean way to do it, so needed to rewrit whole Telnet#waitfor just to
add that line.
Diffstat (limited to 'lib/oxidized/input/ssh.rb')
-rw-r--r-- | lib/oxidized/input/ssh.rb | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/oxidized/input/ssh.rb b/lib/oxidized/input/ssh.rb index 3471eea..3d14a57 100644 --- a/lib/oxidized/input/ssh.rb +++ b/lib/oxidized/input/ssh.rb @@ -15,7 +15,7 @@ module Oxidized rescue Timeout::Error, Net::SSH::Disconnect, Errno::ECONNREFUSED return false end - @ses = open_shell @ssh unless @exec + open_shell @ssh unless @exec not @ssh.closed? end @@ -28,11 +28,15 @@ module Oxidized end end + def send data + @ses.send_data data + end + private def disconnect begin - @pre_logout.each { |command| cmd command } + disconnect_cli @ssh.loop @ssh.close if not @ssh.closed? rescue Net::SSH::Disconnect @@ -40,9 +44,10 @@ module Oxidized end def open_shell ssh - ses = ssh.open_channel do |ch| + @ses = ssh.open_channel do |ch| ch.on_data do |ch, data| @output << data + @output = @node.model.expects @output end ch.request_pty do |ch, success| raise NoShell, "Can't get PTY" unless success @@ -52,7 +57,6 @@ module Oxidized end end expect @node.prompt - ses end def exec state=nil |