Forum: Ruby Connecting to Cisco device using Ruby

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
5732e563c478da435a3de7c1e899b12d?d=identicon&s=25 Peny Swain (s_k)
on 2009-02-26 20:58
Hi,

I'm new to Ruby and want to use Ruby for my automation.I'm trying out a
small program now.Basically, what I'm trying to do is:

1)Connect to the cisco switch via terminal server which has a public IP
address and a port number. (I'm using a fake ip here).

2)Login to the switch giving the right username and password.

3)After login, issue a switch command and get the output back.


The below program works if I comment out the "waitfor" but not
consistent and other times it fails.Can someone please point out whats
the issue here or if possible can someone share the piece of code that
does the above task.


Thanks
s_k





require 'net/telnet'
require 'socket'

localhost = Net::Telnet::new(
                              "Host" => "10.10.10.20",
                              "Port" => 2033,
                  "Binmode" => true,
                  "Output_log" => 'c:\RubyL\output.txt',
                  # "Dump_log" => "dump_log",
                   "Prompt" => /[$%#>:] \z/n,
                   "Telnetmode" => true,
                   "Timeout" => 50,
                   "Waittime"   => 30
                  # "Proxy"   => proxy
            ) { |c| print c }


  localhost.cmd("\r") {|c| print c }

  if localhost.waitfor({"Match" => 'vcctest-30-6k>' , "Timeout" => 50})
      localhost.cmd("\r enable \r"){|c| print c }
      localhost.cmd("cisco"){|c| print c }
  else
      begin

          #  Adding username and password
          localhost.waitfor({"Match" => 'Username:' , "Timeout" => 50})
          localhost.cmd("cisco"){|c| print c }
          localhost.waitfor({"Match" => 'Password:' , "Timeout" => 50})
          localhost.cmd("cisco"){|c| print c }
      rescue Exception => e
          puts e.message
      retry
        #Adding enable password
        localhost.waitfor({"Match" => 'vcctest-30-6k>' , "Timeout" =>
50})
        localhost.cmd("\r enable \r"){|c| print c }
        localhost.cmd("cisco"){|c| print c }
        localhost.cmd("exit"){|c| print c }

      ensure
        localhost.close

    end
end
7067095abfc198a023c3a9b5e31e67ea?d=identicon&s=25 Peter Booth (peterbooth)
on 2009-02-26 21:28
(Received via mailing list)
5732e563c478da435a3de7c1e899b12d?d=identicon&s=25 Peny Swain (s_k)
on 2009-02-27 02:21
Peter Booth wrote:
> Did you see
> http://groups.google.com/group/ruby-talk-google/br...
>   ?

Thanks Peter.It worked.Heres's what I did:



t = Net::Telnet::new( "Host" => "10.10.10.20","Port" => 2044,"Timeout"
=> 20, "Output_log" => 'c:\RubyL\output.txt',
    "Telnetmode"=> true,"Waittime"=>2) {|c| print c }

      log = lambda{ |c| STDERR.print c }

      #needs initial enter to bring the username promt
      t.puts("\r")

      t.waitfor(/Username:/, &log)
      t.puts("cisco")
      t.waitfor(/Password:/, &log)
      t.puts("cisco")

      t.waitfor(/vcctest-30-6k>/, &log)
      t.puts("enable")
      t.waitfor(/Password:/, &log)
      t.puts("cisco")
       t.waitfor(/vcctest-30-6k#/, &log)
      t.puts("exit")
      t.cmd(""){|c| print c}
This topic is locked and can not be replied to.