getcfg.pl 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #!/usr/bin/perl -w
  2. #
  3. # Copyright (C) Roman Dmitiriev, rnd@rajven.ru
  4. #
  5. use FindBin '$Bin';
  6. use lib "$Bin";
  7. use strict;
  8. use Time::Local;
  9. use FileHandle;
  10. use Data::Dumper;
  11. use Rstat::config;
  12. use Rstat::main;
  13. use Rstat::mysql;
  14. use Rstat::alliedtelesys;
  15. use Rstat::huawei;
  16. use Net::SSH::Expect;
  17. use Rstat::net_utils;
  18. $|=1;
  19. my $debug = 0;
  20. my %switches;
  21. my $tftp_server="192.168.11.107";
  22. sub backup_allied610 {
  23. my $ip = shift;
  24. my $name = shift || $ip;
  25. my $debug = shift;
  26. return "Fail!" if (!$ip);
  27. return "Fail!" if (!ping($ip));
  28. my $rest_cmd="sh run";
  29. eval {
  30. my $t = login_610($ip,$debug);
  31. telnet_string($t,$rest_cmd);
  32. };
  33. if ($@) { return "Fail!"; } else { return "OK!"; }
  34. }
  35. sub backup_allied8000 {
  36. my $ip = shift;
  37. my $name = shift || $ip;
  38. my $debug = shift;
  39. return "Fail!" if (!$ip);
  40. return "Fail!" if (!ping($ip));
  41. my $rest_cmd="copy running-config tftp://$tftp_server/$name.cfg";
  42. eval {
  43. my $t = login_8000($ip,$debug);
  44. telnet_string($t,$rest_cmd);
  45. };
  46. if ($@) { return "Fail!"; } else { return "OK!"; }
  47. }
  48. sub backup_allied8100 {
  49. my $ip = shift;
  50. my $name = shift || $ip;
  51. my $debug = shift;
  52. return "Fail!" if (!$ip);
  53. return "Fail!" if (!ping($ip));
  54. my $rest_cmd="copy flash tftp $tftp_server boot.cfg";
  55. eval {
  56. my $t = login_8100($ip,$debug);
  57. telnet_string($t,$rest_cmd);
  58. };
  59. if ($@) { return "Fail!"; } else { return "OK!"; }
  60. }
  61. sub backup_huawei {
  62. my $ip = shift;
  63. my $name = shift || $ip;
  64. my $debug = shift;
  65. return "Fail!" if (!$ip);
  66. return "Fail!" if (!ping($ip));
  67. eval {
  68. my $ssh = login_huawei($ip,'admin',$sw_password,$debug);
  69. huawei_run_cmd($ssh,"tftp $tftp_server put vrpcfg.zip $name.zip");
  70. $ssh->close if ($ssh);
  71. };
  72. if ($@) { return "Fail!"; } else { return "OK!"; }
  73. }
  74. sub backup_sw {
  75. my $sw_ip = shift;
  76. return if (!$sw_ip);
  77. print "Backup switch $switches{$sw_ip}->{name} [$sw_ip]: ";
  78. my $ret = "Skip!";
  79. if ($switches{$sw_ip}->{type}=~/huawei/i) { $ret = backup_huawei($sw_ip,$switches{$sw_ip}->{name},$debug); }
  80. if ($switches{$sw_ip}->{type}=~/allied8000/i) { $ret = backup_allied8000($sw_ip,$switches{$sw_ip}->{name},$debug); }
  81. if ($switches{$sw_ip}->{type}=~/allied8100/i) {
  82. $ret = backup_allied8100($sw_ip,$switches{$sw_ip}->{name},$debug);
  83. if ($ret) { rename "/var/lib/tftpboot/boot.cfg","/var/lib/tftpboot/$switches{$sw_ip}->{name}".".cfg"; }
  84. }
  85. if ($switches{$sw_ip}->{type}=~/allied610/i) { $ret = backup_allied610($sw_ip,$switches{$sw_ip}->{name},$debug); }
  86. print "$ret\n";
  87. }
  88. $debug=1;
  89. my @ret=get_custom_records($dbh,'Select device_name as name, device_model as model, vendor_id, ip from devices where deleted=0 and (vendor_id=3 or vendor_id=8)');
  90. foreach my $dev (@ret) {
  91. $switches{$dev->{ip}}{ip}=$dev->{ip};
  92. $switches{$dev->{ip}}{model}=$dev->{model};
  93. $switches{$dev->{ip}}{name}=$dev->{name};
  94. if ($dev->{vendor_id}==3) { $switches{$dev->{ip}}{type}='huawei'; }
  95. if ($dev->{vendor_id}==8) {
  96. if ($dev->{model}=~/8100/) { $switches{$dev->{ip}}{type}='allied8100'; }
  97. if ($dev->{model}=~/8000/) { $switches{$dev->{ip}}{type}='allied8000'; }
  98. if ($dev->{model}=~/x610/) { $switches{$dev->{ip}}{type}='allied610'; }
  99. if ($dev->{model}=~/x210/) { $switches{$dev->{ip}}{type}='allied610'; }
  100. }
  101. }
  102. if ($ARGV[0]) {
  103. backup_sw($ARGV[0]);
  104. } else {
  105. foreach my $sw_ip (sort keys %switches) {
  106. next if (!exists $switches{$sw_ip}{type});
  107. backup_sw($sw_ip);
  108. }
  109. }
  110. exit 0;