#!/usr/bin/env perl # $Id: swcollect,v 1.2 2008/08/12 23:31:50 ksb Exp $ # given a list of switches, collect configs and interface statuses (petef,ksb) use strict; use Getopt::Std; use Net::Telnet::Cisco; my($progname, %opts, $outputdir); $progname = $0; $progname =~ s,.*/,,; getopts("hVd:u:e:v", \%opts); $outputdir = $opts{'d'} || $ENV{'HOME'} . "/sw"; if ($opts{'V'}) { print "$progname: " . '$Id: swcollect,v 1.2 2008/08/12 23:31:50 ksb Exp $' . "\n", "$progname: default output directory: $outputdir\n"; exit(0); } if ($opts{'h'}) { print "$progname: usage [-v] [-d outdir] [-u pass] [-e pass] swlist\n", "$progname: usage -h\n", "$progname: usage -V\n", "d outdir output directory for switch data\n", "e pass enable password\n", "h show this help message\n", "u pass user-level password\n", "V show version information\n", "v be verbose\n"; exit(0); } if (! -d "$outputdir") { if (0 != mkdir($outputdir, 0777)) { print STDERR "$progname: mkdir: $outputdir: $!\n"; exit(1); } } if (0 == scalar(@ARGV)) { print STDERR "$progname: no hosts given\n"; exit(1); } # before we start, find the user + enable password my($upass, $epass); system("stty -echo"); $epass = $opts{'e'}; $upass = $opts{'u'}; if (! $upass) { print "User-level password: "; chomp($upass = ); print "\n"; } if (! $epass) { print "Enable password: "; chomp($epass = ); print "\n"; } system("stty echo"); my($session, $host, @out); foreach $host (@ARGV) { $session = Net::Telnet::Cisco->new(Host => $host, Errmode => "return"); if (! $session) { print STDERR "$progname: $host: $!\n"; next; } if (0 == $session->login(Password => $upass)) { print STDERR "$progname: $host: login: " . $session->errmsg() . "\n"; $session->close(); next; } if (0 == $session->enable($epass)) { print STDERR "$progname: $host: enable: " . $session->errmsg() . "\n"; $session->close(); next; } print "$progname: $host: collecting data\n" if $opts{'v'}; if (open(CONF, "> $outputdir/$host.conf")) { @out = $session->cmd('show running-config'); print CONF @out; close(CONF); } else { print STDERR "$progname: open: $outputdir/$host.conf: $!\n"; } if (open(CONF, "> $outputdir/$host.status")) { @out = $session->cmd('show interface status'); print CONF @out; close(CONF); } else { print STDERR "$progname: open: $outputdir/$host.status: $!\n"; } $session->close(); } exit(0);