commit f1235ba1a4d52bce26721c05375f47eabb4f96f2 Author: Sergey Kalinin Date: Fri Jan 15 18:44:52 2021 +0300 Initial release diff --git a/README.md b/README.md new file mode 100644 index 0000000..daa2620 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +switch_conf_backup - Скрипт на perl, для резервного копирования конфигурации коммутаторов d-link и edgecore. Работает в связке с GLPI. diff --git a/switch-backup b/switch-backup new file mode 100755 index 0000000..8c2468f --- /dev/null +++ b/switch-backup @@ -0,0 +1,138 @@ +#!/usr/bin/perl + +use Net::Telnet (); +use IO::File; +use Getopt::Long; + +# мегахак - функция удаления пробельных символов +sub trim { + my($string)=@_; + for ($string) { + s/^\s+//; + s/\s+$//; + } + return $string; +} +# Архивируем конфиги +$date = `/bin/date "+%Y%m%d"`; +$date = trim($date); +$arch = "tar -czvf /var/srv/backup/conf/conf-".$date.".tgz /var/lib/tftpboot/"; +my $result = `$arch`; + +# удаляем архивы давностью в неделю +$del = '/bin/find /var/srv/backup/conf/ -ctime +7 -name conf-*.tgz -exec rm {} \; -print > /var/log/switch-conf_backup.log'; +my $delResult = `$del`; + +# Собсвенно сливаем конфиги на фтп +$dirETC = "/usr/local/etc/"; + +use DBI; + +$dirETC = "./"; + +# конектимся к GLPI базе +my $dsn = 'DBI:mysql:glpi:192.168.123.222'; +my $db_user_name = 'user'; +my $db_password = 'password'; +my ($id, $password); +my $dbh = DBI->connect($dsn, $db_user_name, $db_password); + +# выбираем все EdgeCore со статусом "Включен" + +my $sth = $dbh->prepare(qq{SELECT ip FROM glpi_networkequipments WHERE manufacturers_id=1 AND states_id=1}); +$sth->execute(); + +while (my ($ip) = + $sth->fetchrow_array()) +{ +# print "$ip\n"; + if ($ip eq "" || $ip =~ /^#+/) { + + } else { + connectSwitchEdgeCore("$ip"); + } +} +$sth->finish(); + + + +# выбираем все D-Link со статусом "Включен" + +my $sth = $dbh->prepare(qq{SELECT ip FROM glpi_networkequipments WHERE manufacturers_id=3 AND states_id=1}); +$sth->execute(); + +while (my ($ip) = + $sth->fetchrow_array()) +{ +# print "$ip\n"; + if ($ip eq "" || $ip =~ /^#+/) { + + } else { + connectSwitchDlink("$ip"); + } +} +$sth->finish(); + +$dbh->disconnect(); + +exit; + +# telnet-ом цепляемся к коммутаторам и сливаем конфиг на tftp сервер + +# слив конфигурации с коммутатора EdgeCore +sub connectSwitchEdgeCore +{ +# print "$_[0]\n"; + #return; + $hostname = "$_[0]"; + $username = "user"; + $passwd = "password"; + $date = `/bin/date "+%Y%m%d"`; + $str_fn=$hostname; + print $str_fn; + + $tftpserver="172.22.22.252"; + + $conn = new Net::Telnet ( Timeout=>3, Errmode=>'return', Prompt => '/\#.?$/i'); + $conn->open(Host => $hostname); + + $conn->waitfor('/ame[: ]*$/'); + $conn->print($username); + $conn->waitfor('/ord[: ]*$/'); + $conn->print($passwd); + $conn->print("copy running-config tftp"); + $conn->waitfor('/ess[: ]*$/'); + $conn->print($tftpserver); + $conn->waitfor('/ame[: ]*$/'); + $conn->print($str_fn); + $conn->print("exit"); + $conn->print("logout"); +} + +# слив конфигурации с коммутатора D-Link + +sub connectSwitchDlink +{ +# print "$_[0]\n"; + #return; + $hostname = "$_[0]"; + $username = "user"; + $passwd = "password"; + $date = `/bin/date "+%Y%m%d"`; + $str_fn=$hostname; + print "$str_fn\n"; + + $tftpserver="172.22.22.252"; + + $conn = new Net::Telnet ( Timeout=>3, Errmode=>'return', Prompt => '/\#.?$/i'); + $conn->open(Host => $hostname); + + $conn->waitfor('/ame[: ]*$/'); + $conn->print($username); + $conn->waitfor('/ord[: ]*$/'); + $conn->print($passwd); + $conn->print("upload cfg_toTFTP $tftpserver dest_file $hostname"); + $conn->waitfor('/Success/'); + $conn->print("logout"); +} +