Jump to content

Recommended Posts

Posted

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

Posted

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

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

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

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

Posted (edited)

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

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

Edited by pppoetest
Posted

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

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

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

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

ткните плз, не могу найти поиском
Posted (edited)
#!/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
Posted

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

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

Posted

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

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

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

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

Posted (edited)
#!/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
Posted

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

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

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

Posted (edited)

Чтобы одновременно обновить целую нитку длинков (звезду, луч, кольцо) достаточно сначала залить на все свитчи прошивку, а потом одновременно всем скормить сначала "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
Posted

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

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();

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.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.