First off, thanks and ++ to respected Monks chromatic and merlyn for such speedy responses.
But I'm kinda slow sometimes, and often ride the "short bus" to the Monastery ;^) So... I re-read ovid's excellent Before You Post ..., then condensed my script down to a relevant minimum, in hopes of some charitable Monk showing me how to insert the necessary control structure(s) properly.
A quick(?) recap for anyone who just tuned in... cisconconf.pl is the script, it uses Net::Telnet::Cisco to connect to a Cisco router or switch and do stuff. ciscoconf.log records the results of the script. And ciscoconf.in is to be a list of routers (one router name/ip addr per line) for the script to connect to. I also want to be able to call the script with a space-delimited list of routers, like so: ciscoconf.pl router1 router2 router3, included at the command-line which whould over-ride any existing .in file.
I half understand unless, <>, while, or push individually but not how to actually plug them into my code.
cheers,
ybiC
#!/usr/bin/perl -w
# ciscoconf.pl
use strict;
use Net::Telnet::Cisco;
my $pass = ''; # Cisco vty password
my $timeout = '60'; # seconds of no response ti
+ll Net::Telnet::Cisco gives up waiting
my $infile = "/dir/subdir/ciscoconf.in" # one-per-line text-file lis
+ting of Cisco devices to connect to
my $logfile = "/dir/subdir/ciscoconf.log" # logfile of script results
print "starting Cisco device sessions\n" # print to console, not log
open (IN, "$infile") or die "Error opening $infile: $!\n"
open (LOG,">$logfile") or die "Error opening $logfile: $!\n"
# repeat these actions for each Cisco device at command prompt (or els
+e in ciscoconf.in)
# control struct(s) begin here?
print LOG "#######################################################
+######\n"
my $cs=Net::Telnet::Cisco->new(Host=>IN, timeout=>$timeout,);
$cs->login('',$pass); # vty login
$cs->errmode(sub{print LOG @_, "\n"}); # error handler: print $cs-
+>errmsg, "\n"
print $cs->last_prompt, "\n" # print Cisco device prompt
+to console
print LOG $cs->last_prompt, "\n" # print Cisco device prompt
+to log
$cs->close; # exit Cisco session
print LOG "#######################################################
+######\n"
# control struct(s) end here?
# end actions for each Cisco device
close (IN) or die "Error closng $infile: $!\n"
close (LOG) or die "Error closing $logfile: $!\n"
print "finished Cisco device sessions\n" # print to console, not log
# END
|