Jump to content
Калькуляторы

Настройка нескольких коммутаторов одновременно

Сабж, как это делается впринципе... Извиняюсь за, может быть для кого-то, глупые вопросы...

Допустим, нужно отрубить порт "N" на сотне свитчей сразу... как?

Share this post


Link to post
Share on other sites

Свитчи des-3200, snmp естественно умеют... Где почитать можно о подобных скриптах?

Ну и примерчик неплохо бы для наглядности...

Share this post


Link to post
Share on other sites

А может кто поделится? А то что-то всё руки никак не доходят писать :( Хотя бы скрипт массового обновления прошивки на Dlink'ах

Share this post


Link to post
Share on other sites

простите почему отмороженный?

тут на форуме неоднократно приводились скрипты апдейта.

при чем апдейт должен выполнятся плавно или потеряете контроль если у вас звезда.

в случае отруба конфига это 3 строки на expect и bash.

Share this post


Link to post
Share on other sites

На длинке суппорт воще отмороженный...

Хмм, какое отношение саппорт блинка имеет к тарелочке с голубой каёмочкой, которую вы тут так желаете?

Edited by pppoetest

Share this post


Link to post
Share on other sites

простите почему отмороженный?

тут на форуме неоднократно приводились скрипты апдейта.

при чем апдейт должен выполнятся плавно или потеряете контроль если у вас звезда.

в случае отруба конфига это 3 строки на expect и bash.

ткните плз, не могу найти поиском

Share this post


Link to post
Share on other sites

#!/usr/bin/perl

use Net::Telnet ();
require("dbaccess.pm");

$SQL = "SELECT base_switches.ip
       FROM base_switches
       WHERE access_mode = 1
       AND model_id IN (2)
       AND active = 1
       ORDER BY id";

$sth = $dbh->prepare($SQL) or die();
$sth->execute or die();


while(@row=$sth->fetchrow_array) {

$t = new Net::Telnet (Timeout => 200, Prompt => '/\:\w+#|\>/', Errmode => 'return');

   print "\nSwitch: " . @row[0] . "\n";
   $t->open(@row[0]);
   $t->login("admin", "PASSWORD");

   print "Login OK\n";

	unless ($child = fork) {
                   print "Downloading firmware [$ip]\n";
                   $t->cmd(String => "download firmware_fromTFTP 91.206.16.8 DES-3526/DES3526R6_6.20.B12.had image_id 1",Timeout => 500);
                   $t->cmd(String => "reboot force_agree",Timeout => 5);
                   exit;
                       }
   print "Commands OK\n";
}

Edited by disappointed

Share this post


Link to post
Share on other sites

я в скриптах не силен, времени особо нет на это :( ну я так понял это нужно на линуксе выполнять?

или на windows тоже можно?

Share this post


Link to post
Share on other sites

я в скриптах не силен, времени особо нет на это :( А в семнадцатой строке какой пароль указывать?

Share this post


Link to post
Share on other sites

вообще как я понял скрипт берет коммутаторы из mysql

а есть еще каконибуть другой вариант скрипта?

списка коммутаторов нет в мускуле

может быть можно как-то указать просто подсеть и скрипт по порядку на все айпишники подсети будет выполняться

Share this post


Link to post
Share on other sites

#!/usr/bin/perl

use Net::Telnet ();
use Net::IP;

$net = "10.0.0.0/24";
$login = "admin";
$password = "switch_password";
$tftp_server = "10.0.254.254";

$pool = new Net::IP($net) || die;

do {
$t = new Net::Telnet (Timeout => 10, Prompt => '/\:\w+#|\>/', Errmode => 'return');
   print "\nSwitch: " . $pool->ip() . "\n";
   $t->open($pool->ip());
   $t->login($login, $password);
   print "Login OK\n";
       unless ($child = fork) {
                   print "Downloading firmware: " . $pool->ip() . "\n";
                   $t->cmd(String => "download firmware_fromTFTP $tftp_server DES-3526/DES3526R6_6.20.B12.had image_id 1",Timeout => 500);
                   $t->cmd(String => "reboot force_agree",Timeout => 5);
                   exit;
                       }
   print "Commands OK\n";
} while (++$pool);

Edited by disappointed

Share this post


Link to post
Share on other sites

спасибо за скрипт, опробую через пару неделек

а SNMP я не использую кроме как для снятия графиков, вообще протокол мне этот не нравится... сложный какой-то и мудреный слишком

нет времени разбираться (мибы там какие-то всякие итд)

Share this post


Link to post
Share on other sites

Чтобы одновременно обновить целую нитку длинков (звезду, луч, кольцо) достаточно сначала залить на все свитчи прошивку, а потом одновременно всем скормить сначала "cable diag ports all" и сразу "reboot". Я обычно прямо так строчкой и отправляю, разделив "\n".

Получается что сначала каждый свитч начнет выполнять достаточно затратную по времени команду дав пару секунд чтобы скормить ребут всем интересующим свитчам.

Оcобенно удобно в питоне с его многопоточностью.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb
from telnetlib import Telnet
from multiprocessing import Process, Queue, current_process

def worker(tasks):
for ip in iter(tasks.get, 'halt'):
 print ip
#Телнетимся к свитчу
 tn=Telnet(ip,23,5)
 tn.write("login\n")
 tn.write("password\n")
 tn.write("\ncable_diag ports all\n reboot\ny\n")

queue=Queue()
num_threads=200
MyDB = MySQLdb.Connect(user="root", passwd="", host="localhost", db="sappor")
cursor = MyDB.cursor()
cursor.execute("select ip from sw where BLA_BLA_BLA") 
resultset = cursor.fetchall()
for row in resultset:
queue.put(row[0])
cursor.close()
for i in xrange(num_threads):
Process(target=worker, args=(queue,)).start()
queue.put('halt')

Edited by sexst

Share this post


Link to post
Share on other sites

Вот такой еще пробегал как-то на форуме:

use Net::Telnet;

my $telnet = new Net::Telnet( Timeout=>60, Prompt => '/(DES|DGS)-/');

$telnet->open($host);

$telnet->login($user,$pass);

$telnet->cmd('download firmware_fromTFTP $tftp_server_ip $firmware_fname image_id 1');

$telnet->cmd('config firmware image_id 1 boot_up');

$telnet->cmd('save');

$telnet->cmd('reboot force_agree');

$telnet->close();

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.