Сохранение конфигурации свичей Dlink на tftp сервер

Задача: в Lanbilling 2.xx забиты узловые свичи. Необходимо время от времени «снимать» с них текущую конфигурацию.

Решение: поднимаем tftp сервер, и при помощи snmp , даем команду свичам сбросить свою конфигурацию на него. Скрипт делаем на PHP.

#!/usr/local/bin/php
<?php

/* 
 * (с) 2011-2015 Грибов Павел
 * http://грибовы.рф * 
 * Если исходный код найден в сети - значит лицензия GPL v.3 * 
 * В противном случае - код собственность ГК Яртелесервис, Мультистрим, Телесервис, Телесервис плюс * 
 */

$masterserver="egwergwer";
$mastername="lbuewrgwergweser";
$masterpass="ergwer";
$masterbase="werfgvwergvw";
$tftpserver="1q2fqwf0";
$debug=true;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Различного вида функции и классы для удобства работы
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Tsql {
    var $idsqlconnection; 
function connect($host,$name,$pass,$base,$log){    
      global $debug;
      if ($debug==true){echo "$log\n";};
      $this->idsqlconnection=mysql_connect($host,$name,$pass,$base);
      if (!$this->idsqlconnection){
            echo 'Ошибка соединения: ' . mysql_error().'\n';
        } else {
            mysql_select_db($base, $this->idsqlconnection);       
        }; 
 }   
function ExecuteSQL($sql,$log){    
    global $debug,$dieerror;
    if ($debug==true){echo "$log\n";};
    $result = mysql_query($sql,$this->idsqlconnection);               
      if (!$result){
          if ($dieerror==true)
            die('Ошибка выполнения: ' . mysql_error());
          else {echo 'Ошибка выполнения: ' . mysql_error()."\n";};
        }
    return $result;
 }   
};
function GetRandomId($n){ // результат - случайная строка из цифр длинной n
  $id="";
  for ($i = 1; $i <= $n; $i++){
    $id=$id.chr(rand(48,56));
  };
  return $id;
};
function PutLog($ss){
  global $debug;
  if ($debug==true) echo "$ss\n";
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

$mlink=new Tsql();
$mlink->connect($masterserver, $mastername, $masterpass, $masterbase,'-пытаюсь соедениться с базой настроек');

//листаю все устройства
$sql="select devices.device_name,device_groups_members.device_id,device_groups_members.group_id,devices_options.value from devices_options inner join device_groups_members on device_groups_members.device_id=devices_options.device_id inner join devices on devices.device_id=device_groups_members.device_id where devices_options.name='IP' and device_groups_members.group_id=11";
$result = $mlink->ExecuteSQL($sql,"--листаю все устройства");                        
while ($myrow = mysql_fetch_array($result)){
    $device_name=$myrow["device_name"];
    $device_id=$myrow["device_id"];
    $group_id=$myrow["group_id"];
    $ip=$myrow["value"];
    // ну узнаем еще до кучи и комьюнити
    $com="";
    $sql="select devices_options.value from devices_options inner join device_groups_members on device_groups_members.device_id=devices_options.device_id inner join devices on devices.device_id=device_groups_members.device_id where devices_options.name='Community' and device_groups_members.device_id=$device_id";
    $result2 = $mlink->ExecuteSQL($sql,"--узнаю комьюнити");while ($myrow2 = mysql_fetch_array($result2)){$com=$myrow2["value"];};
    if ($com!=""){
      PutLog("-- Стартуем сохранение конфиги у $device_name");    
      $cm="snmpset -v2c -c X-Files $ip 1.3.6.1.4.1.171.12.1.2.18.1.1.3.3 a $tftpserver";
      PutLog("--- устанавливаем tftp сервер: $cm");    
      $rez=`$cm`;      
      if (strripos($rez,"IpAddress")>0){
        $cm="snmpset -v2c -c X-Files $ip 1.3.6.1.4.1.171.12.1.2.18.1.1.5.3 s $device_name.cfg";
        PutLog("---- устанавливаем имя файла: $cm");              
        $rez=`$cm`;      
        if (strripos($rez,"STRING")>0){
            $cm="snmpset -v2c -c X-Files $ip 1.3.6.1.4.1.171.12.1.2.18.1.1.8.3 i 2";
            PutLog("----- устанавливаем конфиг для сохранения: $cm");              
            $rez=`$cm`;                  
            if (strripos($rez,"INTEGER")>0){
                $cm="snmpset -v2c -c X-Files $ip 1.3.6.1.4.1.171.12.1.2.18.1.1.12.3 i 3";
                PutLog("----- сохраняем конфиг : $cm");              
                $rez=`$cm`;                  
              if (strripos($rez,"INTEGER")>0){                
                  sleep(3);
                  //переименуем полученный файл
                  $newname=$device_name.Date("-Y-m-d-H-i");
                  $rez=`mv /var/tftp/$device_name.cfg /var/tftp/$newname.cfg`;
                   echo "$rez\n";
                  //добавим в архив
                  $rez=`zip /var/tftp/$device_name.zip -m /var/tftp/$newname.cfg`;
                  echo "$rez\n";
              } else {
               PutLog("-- ОШИБКА сохранения конфига");    
            };
            } else {
            PutLog("-- ОШИБКА установки конфига");    
            };            
        } else {
        PutLog("-- ОШИБКА установки имени файла");    
      };
      } else {
        PutLog("-- ОШИБКА установки tftp сервера у $device_name");    
      };
    } else {
      PutLog("-- у устойства $device_name нет комьюнити! Пропускаю..");  
    };
};

Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.