現在 Drive Network では L2, L3 スイッチが 20 台以上が稼働しています。過去 10 年程 Cisco Catalyst シリーズを使用して来て物理障害は一度もありませんが、設定内容のバックアップは設定変更毎に採集しています。
tftp を用いる方法等様々ありますが、私は Net::Telnet::Cisco を用いた Perl のプログラムが最もシンプルだと感じました。
./get.pl name とするだけで、show runnning-config, show vlan, show interfaces status の結果をファイルに出力します。スイッチ間での設定内容の整合性の確認等でも出力したファイルを操作した方が効率的です。
#!/usr/bin/perl -w
#
# get.pl
#
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#// use Module
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
use strict;
use Net::Telnet::Cisco;
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#// Controller
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
my $target = $ARGV[0];
#// ----------------------------------------------------------
#// Item Set
#// ----------------------------------------------------------
my $pass_vt = 'password0'; #// login
my $pass_en = 'password'; #// enable
my $list = {
'sw00' => '192.168.20.10',
'sw01' => '192.168.20.11',
};
#// ----------------------------------------------------------
#// Start
#// ----------------------------------------------------------
foreach (%$list) {
next unless ($list->{$_});
if ($target) {
next unless ($target eq $_);
}
my $addr = $list->{$_};
my $host = $_;
my $sess = Net::Telnet::Cisco->new(Host => $addr);
$sess->login(Password => $pass_vt);
$sess->enable($pass_en);
my @cmd0 = $sess->cmd('show run');
my @cmd1 = $sess->cmd('show vlan');
my @cmd2 = $sess->cmd('show int status');
$sess->close;
#//
my $date = substr(utime2date(time()), 0, 10);
$date =~ s/\///g;
my $file0 = $host . '_' . $date . '.run';
my $file1 = $host . '_' . $date . '.vlan';
my $file2 = $host . '_' . $date . '.stat';
open WRITE, "+>$file0";
foreach my $cmd (@cmd0) {
next if ($cmd =~ /^Building/);
#next if ($cmd =~ /^\n$/);
next if ($cmd =~ /^Current/);
print WRITE $cmd;
}
close WRITE;
open WRITE, "+>$file1";
foreach my $cmd (@cmd1) {
print WRITE $cmd;
}
close WRITE;
open WRITE, "+>$file2";
foreach my $cmd (@cmd2) {
print WRITE $cmd;
}
close WRITE;
#//
print "Done: $host\n";
}
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#// Model
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
sub utime2date {
my ($sec, $min, $hours, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($_[0]);
my $years = $year + 1900;
my $this_mon = sprintf("%02d",$mon + 1);
$mday = sprintf("%02d", "$mday");
$hours = sprintf("%02d", "$hours");
$min = sprintf("%02d", "$min");
$sec = sprintf("%02d", "$sec");
my $date = "$years/$this_mon/$mday $hours:$min:$sec";
return $date;
}









