backupswitches.in 2.86 KB
Newer Older
1 2
#!/usr/bin/perl
#
Mike Hibler's avatar
Mike Hibler committed
3
# Copyright (c) 2005-2017 University of Utah and the Flux Group.
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
# 
# {{{EMULAB-LICENSE
# 
# This file is part of the Emulab network testbed software.
# 
# This file is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
# 
# This file is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public
# License for more details.
# 
# You should have received a copy of the GNU Affero General Public License
# along with this file.  If not, see <http://www.gnu.org/licenses/>.
# 
# }}}
23 24 25 26 27 28 29 30
#

my $BACKUPDIR = '@prefix@/backup/switch-config';
my $TMPFILE = "/tftpboot/switch-backup";
my $GRAB = "@prefix@/sbin/grabswitchconfig";

use lib '@prefix@/lib';
use libdb;
31
use lib '@prefix@/lib/snmpit';
32
use snmpit_lib;
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

use strict;
use English;

sub usage() {
    print "Usage: backupswitches <switches...>\n";
    exit 1;
}

if ($UID && !TBAdmin($UID)) {
    die "*** $0:\n" .
        "    Sorry, only admins get to run this script\n";
}

if (!@ARGV) {
    usage();
}

#
# Get today's date, nicely formatted
#
my ($junk,$junk,$junk,$mday,$mon,$year,$junk,$junk,$junk) = localtime(time);
$year += 1900;
$mon = sprintf("%02d",$mon + 1);
$mday = sprintf("%02d",$mday);
my $datestr = "$year-$mon-$mday";

#
# Back up each switch in turn
#
63
unlink $TMPFILE;
64
foreach my $switch (@ARGV) {
65 66 67
    #
    # Is it a Cisco or maybe an HP
    my $type = getDeviceType($switch);
Mike Hibler's avatar
Mike Hibler committed
68 69 70 71 72
    if ($type !~ /(cisco|catalyst|hp|force10)/) {
	print STDERR
	    " *** $0:\n" .
	    "     ignoring unsupported switch type (type $type)\n";
	next;
73
    }
Mike Hibler's avatar
Mike Hibler committed
74 75 76 77 78 79 80 81 82 83
    if ($type =~ /(cisco|catalyst)/) {
	if (system("$GRAB $switch $TMPFILE")) {
	    print STDERR "Unable to grab config for $switch, ignored\n";
	    next;
	}
	if (system("mv $TMPFILE $BACKUPDIR/$switch-$datestr")) {
	    unlink($TMPFILE);
	    print STDERR "Unable to move config file to $BACKUPDIR/$switch-$datestr, ignored\n";
	    next;
	}
84
    }
Mike Hibler's avatar
Mike Hibler committed
85 86 87 88 89
    if ($type =~ /hp/) {
	if (system("scp $switch:/cfg/running-config $BACKUPDIR/$switch-$datestr")) {
	    print STDERR "Unable to grab and save config for $switch, ignored\n";
	    next;
	}
90
    }
Mike Hibler's avatar
Mike Hibler committed
91 92 93 94 95 96 97 98 99 100 101 102 103
    if ($type =~ /force10/) {
	if (system("ssh toor\@$switch write terminal \> $BACKUPDIR/$switch.in")) {
	    if (($? >> 8) != 255) {
		print STDERR "Unable to grab and save config for $switch ($?), ignored\n";
		next;
	    }
	}
        if (system("egrep -v \\#\\|Current\\|SupportAssist $BACKUPDIR/$switch.in \> $BACKUPDIR/$switch-$datestr")) {
	    unlink("$BACKUPDIR/$switch.in");
	    print STDERR "Unable to strip first and last lines for $switch, ignored\n";
	    next;
	}
	unlink("$BACKUPDIR/$switch.in");
104
    }
105 106 107
}

exit 0;