nocproject.org
04:46
dvolodin: а это нормально, что у меня платы рисуются и в шасси и отдельно?
04:48
ну я вчера сделал модели шасси FastIron 400, сделал платы, шасси, правило соединения
04:49
захожу в инвентори железки, у меня рисует шасси, в нем платы. Если свернуть шасси, то ниже идут те же платы
04:50
management на платах не прописывал случайно?
04:50
и еще одна тонкость. Ты не указал в описании, что надо выдавать трансиверы вслед за соответсвующей им платой. Если их выдавать отдельно в самом конце - все трансиверы пририсуются в шасси
04:51
указал :)
04:51
ща поправлю
04:58
угу
04:58
старые пока
04:58
только трансиверы не встают. Если я serial=None отдаю - это должно их запихнуть в шасси или нет?
04:58
от чего каталист 45-й с суп4 может периодически не отвечать на снмп-запросы? на графике загрузке проца выпадов нет. в какую сторону лучше начать копать?
04:59
проблем с IP-доступностью вроде нет, иначе они бы были заметны
04:59
причём, нок ещё на это не напарывался (ну или нигде об этом не сигнализировал), а вот мртг бывает по несколько раз в сутик
04:59
*сутки
05:07
таймаута snmp не хватает на ответ?
05:10
timeout: 2s
05:10
retries: 5
05:11
как я не люблю дебажить мистику...
05:48
в очередной раз наткнулся на неприятный момент: нельзя так просто взять и скопировать список vlan'ов с интерфейса в sa - managed objects - interfaces - switchports
05:50
dvolodin: утюги завелись, но трансиверы в порты не втыкает. Хотя по логам - вроде находит, куда втыкать
05:51
если открыть инвентори объекта - все порты -- EMPTY --
05:51
пащему?
05:51
и молчит как партизан?
05:53
да вроде воткнулись
05:55
только "вроде".
05:56
их же должно быть видно в инвентори железяки?
05:56
в порту
05:56
а там пусто...
06:00
SNUNKNOWN
06:00
в этом что-то есть
06:00
ну нету у меня серийника для SFP =).
06:01
какое надо отдать? отдавал None - все-равно не втыкалось
06:01
должны быть разные?
06:01
серийник нуже
06:01
да
06:01
иначе он один будет перетыкать по кругу
06:01
и чо делать, если железка не умеет дергать серийник?
06:02
нужен какой-то уникальный идентификатор
06:02
у меня такие же блоки питания в каждом шасси. Серийника нет, питальники у каждого шасси одинаковые
06:02
от 1 до 4 штук в зависимости от шасси
06:02
блоки без серийника я нашел на Cisco 7201
06:03
не, они с серийником на наклейке. Но железка наклейку смотреть не умеет
06:04
в новых железках тоже не для каждого трансивера есть серийник/вендор. Есть такое, что просто "SFP-LX"
06:05
ну и генерировать где-то внутри без привзяки к железу - значит на каждый заход сгенерится новый серийник и трансиверы/БП расплодятся хуже мошек
06:06
а с привязкой к железу - не узнаешь о смене трансивера, хотя и так не узнаешь
06:06
может генерировать и считать, что не менялось, а если чо - кнопкой "достать" из железки, чтоб новый загенерило?
06:07
генерировать какой-то номер, который не будет изменяться в пределах железа
06:08
а перестановки - руками
06:09
ну да
06:09
в скрипте лучше делать, или ты в джоб засунешь?
06:11
подумать надо, как оно вообще
06:15
dvolodin, я все к вчерашнему с 6500. Смотри - есть рулзы 7600. С шасси у меня прилетает 3 VTT модуля и 2 CLK. Я делаю новые коннекшены для них как 6500, модельки опять же, и в рулах 7600 добавляю 3 слота VTT соответственно на шасси. Все верно?
06:16
ну да
06:16
VTT это что за фигня?
06:16
7600 отличается от 6500 только цветом корпуса ;)
06:17
и part_no в EEPROM
06:17
WS-C6K-VTT=
06:18
это контроль вольтажа
06:18
из по 3 штуки на шасси
06:19
интересно, зачем?
06:19
зачем ему будильник, я примерно представляю
06:19
dvolodin, говоришь только партнамбером - а коннекшены все те хе?
06:19
фантрей допустим
06:19
если подходит к шасси - то да
06:19
карты и супы - те же
06:20
это то да. Ну хочешь сказать что зря делать коннекшены для 6500?
06:20
почему
06:21
сделай шасси отдельное, не убудет
06:21
а на 7600 тоже ведь VTT есть
06:21
да, и еще скрипт get_inventory у меня не все выдергивает.. супы и карты не видит, видимо что то с regexp
06:22
поразбираюсь сегодня где затык
06:23
типы проверяй
06:34
там таблица mapping'ов названий в типы
06:37
хм
06:37
Set context chassis = None -> chassis=None, Nchassis=7, NN=7, N=None
06:37
Reset context scopes linecard, sup, clk, vtt -> chassis=None, Nchassis=7, NN=7, N=None
06:37
Trying to connect #0. CHASSIS (chassis=None, NN=0, Nchassis=0, N=None)
06:37
т е не определяет тип?
06:38
почему
06:38
тип у него CHASSIS
06:38
ну тогда что тут не так?)
06:38
в анкноунах ничего не светится,, а БП не цепляется.
06:39
хотя #0 -- это точно шасси
06:39
там дальше тоже самое, только номер меняется.
06:41
dvolodin, открой мне страшную тайну, зачем ты разделяешь LH и LX трансиверы?
06:42
я их не разделяю
06:42
их juniper разделяет
06:42
:)
06:43
вот голубятня
06:43
у циски давно уже lx/lh в одном флаконе, и думать не надо
06:47
dvolodin, куда еще можно поглядеть?
06:47
так... FastIron SX800 запилил
06:47
надо ему теперь трансиверы мучать
06:47
потом вентиляторы, БП...
06:50
zi_rus: а у juniper'а давно все LH
06:51
кстати у 6500 модули все NAME - номера просто
06:51
как подебажить?
06:51
elif "XFP" in pid or "GLC" in pid or "SFP" in descr:
06:51
number = name.split()[2].split("/")[-1]
06:51
if pid == '':
06:51
pid = "NoName | Transceiver | 1G | Unknown SFP"
06:51
return "XCVR", number, pid
06:51
это нормально
06:52
zi_rus: что именно продебажить?
06:52
не срабатывает if pid
06:52
или что-то еще
06:52
print repr(pid) воткни
06:52
NAME: "module mau 0/1/0/6", DESCR: "SFP"
06:52
PID: , VID: N/A, SN: AGM121729WG
06:52
вот это хочу отловить
06:53
NAME: "1", DESCR: "WS-X6K-SUP2-2GE 2 ports Catalyst 6000 supervisor 2 Rev. 2.0"
06:53
PID: WS-X6K-SUP2-2GE , VID: , SN: SAD04490A9T
06:55
кто о чём, а я снова о своём. где есть подробнее про конфигдифф пирули?
06:56
я хочу суть понять, он разбирает новый конфиг или дифф?
06:56
и то и другое
06:56
и выкусывает лишнее перед diff'ом
06:57
а какие есть средства для быстрого теста таких пирулей?
06:58
хм
06:58
я про такие не знаю
06:58
это обычная функция
06:59
на входе текст, и на выходе текст
06:59
тестировать можно ./noc shell
07:00
но на входе текст нового конфига?
07:01
а как правильно noname вендора вернуть?
07:02
а нет
07:02
все нормально
07:03
а, я кажется понял, есть iconfigfilter, а есть iconfigdifffilter
07:18
dvolodin, для линейных карт и супов параметр 'number': '' критичен - или там все равно по порядку втыкаться будет в подходящие слоты?
07:20
заодно и стоит ли revision там снимать с таких штук как SUP MSFC PFC, а то они не в VID , а в Description сейчас матчит.
07:22
гм... регэксп чот на re-try срабатывает, а на железе - нет :(
07:25
mikevlz, у меня чаще наоборот происходит
07:27
_4ePTeHok: от правил зависит
07:27
MSFC и PFC я нарочно выкинул
07:28
6500 отдает все слоты с NAME - номерами.
07:28
эм. зачем?)
07:28
пока не ясно куда и как их вставлять?
07:30
07:31
там вывод с железки и сам регэксп. в re-try выдергивает серийник, в скрипте - не дергает. метод везде findall использую
07:33
Unknown part number for Cisco s222_rp: WS-F6K-PFC2 (WS-F6K-PFC2 Policy Feature Card 2 Rev. 2.2)
07:33
Unknown part number for Cisco s222_rp: WS-F6K-MSFC2 (WS-F6K-MSFC2 Cat6k MSFC 2 daughterboard Rev. 1.13)
07:33
Unknown part number for Cisco s222_rp: WS-X6K-S2U-MSFC2 (WS-X6K-S2U-MSFC2 2 ports Catalyst 6000 supervisor 2 Rev. 2.17)
07:33
Unknown part number for Cisco s222_rp: WS-X6416-GBIC (WS-X6416-GBIC 16 port 1000mb GBIC ethernet Rev. 2.6)
07:33
вот отсюда ревизии стоит выдергивать в отдельную переменную?)
07:35
там сабматч по дескрипшену тогда придется.
07:38
а
07:38
тогда нафиг не надо
07:40
вопрос снимаю
07:40
регэксп верный, а вот железка ведет себя некрасиво
07:41
с включенным пейджером выводит данные по sfp, с отключенным - нет
07:41
очешуеть
07:42
07:43
без выдачи номеров слотов только. Они в Name лежат там))
07:44
первые две правки - разумны
07:44
я же верно понимаю, что "number": number, - это слот?
07:45
просто порядковый номер?
07:45
точнее -- для карты, да
07:45
номер слота
07:48
дык а чем не нравятся PFC/MSFC?
07:48
нафиг они
07:48
у тебя есть привычка их выкручивать и переставлять?
07:48
нед. но инвентори - это ж бд того что там есть.
07:49
зачем внутреннее устройство карт держать
07:49
если ты не покупаешь эти модули отдельно
07:49
Clk мы вроде тоже не выкручиваем
07:49
однако оно есть
07:49
к нему подключается что-то
07:49
а к PFC нет
07:50
а DFC мы прописываем потому, что они закупаются отдельно и стоят как подержанный самосвал
07:50
ну хз, странно по стоимости решать - писать в инвентори или нет)
07:53
ну не по стоимости
07:53
просто какой смысл разваливать сборку на компоненты?
07:53
если каждый компонент не живет отдельно
07:53
DFC ты можешь достать и переставить на другую карту
07:53
ну тогда в супе уже надо прописывать что там есть мсфц +пфц
07:54
А зачем?
07:54
что даст тебе эта информация?
07:54
вдруг будет железка где суп без них?
07:55
тогда это будет другой part number
07:55
и железка будет называться ASR9k :)
07:55
сделал так, что скрипт спрашивает каждый слот на предмет show media, так вывод желеки не успевает за скриптом... :(
07:56
dvolodin: как победить? скрипт спрашивает уже 4-й слот, а железка еще выдает инфу по второму.
07:56
а когда спрашивал второй слот - еще первый отдаваться не закончил
07:56
то есть она выдает промпт и продолжает досыпать вывод?
07:56
нет
07:56
промпт она не выдает
07:56
а как ты команды ей посылаешь?
07:57
она точно должна дождаться промпта между командами
07:57
self.cli("show media slot %s" % match1[0])
07:58
по логам - не ждет нифига
07:58
не может такого быть
07:58
показывай логи
07:59
08:00
промпт наверное кривой, но в логе нету EVENT(PROMPT)
08:01
оно может сматчить Part#: в теории, или Serial#:
08:01
с таким промптом
08:02
Port 2/1: Type : 10GE LR 10km (SFP +)
08:02
Vendor: OEM Version:
08:02
Part# : ML-P20T Serial#: SX23222600009
08:02
Port 2/2: Type : EMPTY
08:02
пример вывода
08:25
dvolodin: если уж решил выкидывать msfc и pfc, то и из правил их выпилить надо и где они там ещё в моём патче были
08:26
mikevlz: ну да
08:26
адаптивный делай
08:26
естественно, порно у тебя
08:26
lexus-omsk: я их выпилил везде
08:28
по-моему нет, я по коммитам смотрел на bb, как обновлюсь - ещё раз проверю у себя
08:30
народ, кому скучно, посмторите на это
08:30
!!! UNKNOWN: {'serial': 'ONT123602HD', 'pid': 'TRT5024EN-SMC-13', 'name': 'TenGigabitEthernet1/29', 'vid': '01', 'descr': '10Gbase-LR'}
08:30
куда можно вставить костыль в скрипт
08:31
чтобы этот китайский х2 матчился
08:31
if ("Transceiver" in descr or
08:31
фактически ему только type не хватает
08:31
name.startswith("GigabitEthernet") or
08:31
pid.startswith("X2-")):
08:32
впиши or name.startswith("TenGigabitEthernet")
08:32
и там еще засадка будет
08:34
а чем отличается connection type Tranciever | GBIC от Tranciever | GBIC | Cisco?
08:34
если карта цисковская - то второй берем?
08:34
_4ePTeHok, циско и не циско, есть мнение что делать не циско и отказаться от разделения
08:37
10-ки, наверное, Cisco делаем
08:37
dvolodin, а как же этот китаец для которого ты только что патч рисовал
08:37
кстати его как noname надо бы вернуть
08:38
хотя пофиг
08:39
dvolodin, connection rule указывается для всех объектов или только для шасси?
08:40
только для шасси
08:49
zi_rus: помогло?
08:49
да, сейчас все доделаю и в issue отпишу
08:50
sync-collections теперь не пишет update, если объект в JSON-файл внесли, а он уже был в БД?
08:58
непишет. вот только что перенес все в файлы. - молча прошел
08:59
удалил в морде, прогнал снова - нааписал про Created
09:00
и все же. Где еще можно нарыть информации - почему не стыкует модули с шасси?
09:01
кто бы теперь это обрабатывал и коммитил
09:02
логи и правила смотреть надо
09:03
zi_rus: патч на get_inventory сомнителен
09:04
ох я чую весело будет параллельные патчи вносить.
09:04
dvolodin, какой именно? там их три
09:04
для IOS XR возможно
09:05
для IOS
09:05
я вот что думаю вообще
09:05
+ if pid in ("N/A", "Unspecified", "1000BASE-LX"):?????
09:05
почему нет
09:05
если пид такой кривой, значит там левак
09:06
может быть там сделать такой хитрый ход
09:06
я же не настаиваю, если у тебя есть лучше решение, которое отловит такое
09:06
NAME: "GigabitEthernet1/2", DESCR: "1000BaseLH"
09:06
PID: 1000BASE-LX , VID: A0 , SN: H11L432
09:07
неизвестные трансиверы отдавать как, скажем Unknown | Transceiver | 1000BASE-LX
09:07
при этом мы не знаем его тип
09:07
у меня в одной железке пять таких трансиверов
09:07
SFP это или GBIC
09:08
discovery при поиске будет искать только по серийнику
09:08
так...похоже начало цеплятся.
09:09
а если это новый объект -- то ищем подходящий unknown по connection type ?
09:10
db.repairDatabase()
09:10
нет
09:11
db.noc.objects.remove({_id: ObjectId("528c440a5c8b821225468b1f")})
09:11
а нок пишет в логах куда-нибудь о срабатывании пируля?
09:19
zi_rus: смотри
09:19
вижу пока такой алгоритм
09:20
Скрипт возвращает левые трансиверы как part no "Unknown | Transceiver | <тип>"
09:20
где тип, скажем, 1000Base-LX
09:21
для таких мы на первом этапе не проводим поиск объекта
09:21
а начинаем чесаться только когда строим соединения
09:22
проверяем, если трансивер с этим серийником в этой дырке уже есть - то хорошо
09:24
09:27
это уже правда на другой железке
09:55
dvolodin, и твое предложение какое? что делать чтобы причесать это безобразие что есть сейчас
10:21
погоди, сейчас колбашу
10:26
аццукий поток сознания выродился
11:04
даже не знаю, чтоит ли этого бояться
11:04
*стоит
11:12
черт
11:13
нок и так страшная вещь
11:21
да там вообще пипец вышел аццкий
11:21
суть такая
11:21
из скрипта отдавать тип трансивера
11:28
закоммитил
11:29
в общем там суть такая
11:29
скрипт на левак отдает Unknown | Transceiver | 1000BASELH
11:29
job находит под него дырку
11:29
если там есть оптипа с этим серийником - он успокаивается
11:30
если нет -- смотрит на тип дырки
11:30
скажем, видит Transceiver | SFP
11:30
дальше делает следующее колдунство
11:30
расшибает 1000BASELH на 1000 и LH
11:30
1000 заменяет на 1G
11:31
склеивает все вместе и получает No Name | Transceiver | 1G | SFP LH
11:31
и на него создает объект
11:31
если дырка будет X2 и скрипт вернет 10GBASEZR
11:32
то воткнется NoName | Transceiver | 10G | X2 ZR
11:32
как-то так :)
11:32
я ничего не понял но выглядит устрашающе :)
11:32
особенно часть с расшибанием
11:32
ага
11:32
еще раз тогда
11:33
проблема вот в чем
11:33
мы про них знаем, фактически, только media
11:33
форм-фактора не знаем
11:34
форм-фактор мы можем узнать только в момент, когда будем засовывать эту хню в дырку
11:34
это там, где job пишет trying to connect ....
11:34
и мы отклаываем обнаружение типа ровно до этого момента
11:36
так понятнее
11:36
то есть скрипт нам выдает media
11:36
и мы конвертируем его в название модели
11:38
а можно и скрипт увидеть?
11:39
в репо уже
11:40
у juniper'а такая проблема не стоит
11:40
он честно отдает SFP-LX, SFP+-10G-LR и так далее
11:41
алгоритм работает если киска отдает в PID N/A или Unknown
11:42
наверное, его же надо включить для PID вида 1000BASE-LX
11:44
эмммм, а разве не это было в старом скрипте?
11:44
11:44
примерно так
11:44
старый скрипт отдавал все как SFP
11:44
посмотри его таблицу
11:44
X2 китайский он никак не мог отдать корректно, так как не знал, что это X2
11:45
!!! UNKNOWN: {'serial': 'ONT123602HD', 'pid': 'TRT5024EN-SMC-13', 'name': 'TenGigabitEthernet1/29', 'vid': '01', 'descr': '10Gbase-LR'}
11:45
вот, смотри
11:45
где тут X2 вообще?
11:45
в телепатии
11:45
нок пора научить
11:45
:)
11:45
вот он и телепатирует
11:46
для этого X2 у тебя еще PID осмысленый
11:46
а втот был бы 10GBase-LR
11:46
и все
11:47
там дальше еще можно попробовать определить таки вендора по префиксам серийника
11:50
наверное также можно будет обрабатывать узлы с пустыми серийниками
11:51
в момент втыкания проверять, есть ли там железка
11:51
если нет -- ставить эту и генерировать какой-то рандомный номер ему
11:59
dvolodin, в коннекшен рулзе 7600 так и остался pfc/msfc/
11:59
только что обновлялся
12:03
да?
12:03
ну выкини
12:05
12:05
не могу понять где накосячил.
12:06
объект удаляю - при запуске джоба оно снова трейсится.
12:08
закоммитил фикс для правил
12:10
db.noc.objects.remove({model: ObjectId("528b74ef5c8b82725af590c4")})
13:15
бблядь
13:15
elif lo == 0 or pid.startswith("CISCO") or pid.startswith("WS-C"):
13:16
return "CHASSIS", number, pid
13:16
WS-CAC-1300W - 110/220v AC power supply, 1360 watt 1
13:16
а я не могу понять, чо ж не соединяет.
13:18
соеденило после правки вот того
13:18
о сколько нам открытий чудных
13:40
охохох, оно начало коннетить...)
14:00
примерно то же чувство было, когда нарисовал сама правила коннектов
14:00
чота чую мне не избавиться от новых писем по конфиг хэз бин чейнджед
14:01
написал пирулю для вырезания из диффа строчек с ацл
14:01
теперь приходит такой дифф
14:01
--- a/core-sw
14:01
+++ b/core-sw
14:01
@@ -1,1 +1,1 @@
14:01
-2125 (2013-11-20 16:25:37)
14:01
+2126 (2013-11-20 16:40:38)
14:02
где 2125, 2126 это номера ревизий
14:08
так, а 10/100/1000 порты у нас как именуются в инвентори?
14:09
rj-45
14:23
ура. Наконец то все разпознало и подключило.
14:33
хм. Суп сцуко не цепляется.
16:05
где-нибудь через годик и у меня дойдут руки до всего того, о чём вы сейчас тут гутарите
16:14
тогда уже концепция опять поменяется и нок уйдет на переделку
16:16
ну вон на новую схему днс-синхронизации я две недели назад перешёл
16:16
как же мне конфиги победить
16:17
я на новый днс вообще еще не перешел
16:18
а старый же сломали
16:18
вообще без днс?
16:18
да
16:19
а надо
16:19
хорошая штука
16:19
я вот всё до vc provisioning не могу добраться
16:20
впрочем, о чём я. почти половина коммутаторов это длинк дир-100, мать его в жопу за ногу
17:05
vc это головняк хуже инвентори и fm вместе взятых
17:57
17:57
мы хотим такое себе?
18:01
библиотечка для генерации отчетов
18:04
на чем мы с моделями остановились?
18:05
заработала распознавалка дырок?
18:05
эмм
18:05
у меня не вставляется невидимая сфп
18:06
NAME: "module mau 0/1/0/6", DESCR: "SFP"
18:06
PID: , VID: N/A, SN: AGM121729WG
18:06
XR
18:06
в инвентори пустая дырка
18:08
!!! UNKNOWN: {'serial': 'AGM121729WG', 'pid': '', 'name': 'module mau 0/1/0/6', 'vid': 'N/A', 'descr': 'SFP'}
18:08
dvolodin, видимо надо скрипт подправить, но я еще не въехал в новую концепцию, куда костыль ставить
18:09
а
18:09
ну тут капитально, да
18:09
if not pid:
18:09
return None, None, None
18:09
ага
18:10
ну а чего тут придумать-то?
18:10
Unknown | Transceiver | Unknown :)
18:10
+ elif "XFP" in pid or "GLC" in pid or "SFP" in descr:
18:10
number = name.split()[2].split("/")[-1]
18:10
+ if pid == '':
18:10
+ pid = "NoName | Transceiver | 1G | Unknown SFP"
18:10
я так предлагал
18:10
ты не принял
18:11
это твой коммит none none none
18:11
ну только без скорости
18:12
не совсем так
18:13
if not pid:
18:13
pid = self.get_transceiver_pid(descr)
18:13
if not pid:
18:13
return None, None, None
18:13
это у меня
18:13
ну вот не работает как видишь
18:13
у меня так же
18:14
root@noc:/opt/noc/sa/profiles/Cisco/IOSXR # hg diff
18:14
root@noc:/opt/noc/sa/profiles/Cisco/IOSXR #
18:15
да, не сматчится
18:16
надо какой-нибудь бестолковый тип вернуть, чтобы видно было, что это заглушка
18:16
ну как заглушка
18:16
там просто цисковскаяя же glc-t
18:16
которая не поддерживается
18:16
ASR9k поддерживает только sfpe-ge-t
18:17
*sfp-ge-t
18:17
прсто есть волшебная командочка
18:17
transceiver permit pid all
18:17
вот и получаем что получаем
18:20
а если так?
18:20
18:20
пусть будет медяхой
18:20
все равно делать функцию ручной конверсии
18:20
с указанием вендора
18:21
а смысл привязываться к формату?
18:21
почему сразу медь?
18:21
если не определен то так иписать
18:22
разве нет?
18:23
return "Unknown | Transceiver | Unknown"
18:23
?
18:24
да
18:25
а что там дальше твоя система делает
18:25
пропишет noname вендора
18:25
тип 1g sfp сделает
18:25
она ждет Unknown | Transceiver | <speed>BASE<media>
18:25
а больше про это ничего не известно, кроме серийника
18:26
по дырке она поймет, что это SFP
18:26
по логике вещей нужно вставить что-то вроде NoName | Transceiver | Unknown SFP
18:26
без скорости и прочих извратов
18:26
18:27
в самом начале
18:27
самый первый объект
18:27
)))
18:27
Да, только тут не 1G
18:27
а просто SFP
18:27
Со всемы мыслимыми протоколами
18:31
ну да
18:31
там, по идеет, на все формфакторы нужно
18:31
закоммитил
18:41
схавало?
18:42
проверяю
18:44
млять
18:44
Failed to connect: Incompatible connection types: Transceiver | SFP - Transceiver | SFP | Cisco
18:46
:)
18:47
погоди
18:47
мы ее другим обломаем
18:48
может нам сделать еще модель NoName | Transceiver | Unknown SFP | Cisco
18:48
?
18:49
по-моему это извращение, сейчас циска, потом будет не циска, ты же их не отличишь
18:49
эээ
18:49
ты медную от оптической отличить не можешь
18:50
как ты циску от нециски отличать будешь?
18:52
сказано в дырку пихать киску - значет киска, если влезла :)
18:52
transceiver permit pid all
18:52
примет все что по размеру подошло
18:53
18:53
попробуй так
18:54
но, если оно принимает все, то да, lock нужно убирать
18:55
Unknown model 'NoName | Transceiver | Unknown SFP | Cisco'
18:55
но я за удаление лока
18:56
а теперь лови
18:56
Извращенные формы шаманизма :)
18:57
А потом сервачники точно так же будут иметься с безымянными планками памяти :)
18:58
dvolodin, вставила. а что значит replace? это как понимать?
18:58
в питоне?
18:59
замена подстроки на другую
18:59
"aaaabbccccddddbbbf".replace("b", "B") -> "aaaaBBccccddddBBf"
18:59
нет, в дескрипшене этой модели
18:59
сделаю функционал ручного уточнения
19:00
если железка не определяет нормально -- можно будет руками точно указать
19:00
если так, то за указанным еще следить надо
19:00
если переткнули
19:00
А для этих unknown отчетик сделаем
19:00
по серийнику сразу определять
19:00
ну да
19:00
если он уникальный
19:01
тогда ручной тип сохранится
19:02
dvolodin, что-то поломалось у одной железки
19:02
19:03
db.noc.objects.find({"model": ObjectId("528c77e7f3b68213faf03d45")})
19:03
я потом примотаю проверку целостности
19:04
> db.noc.objects.find({"model": ObjectId("528c77e7f3b68213faf03d45")})
19:04
{ "_id" : ObjectId("528c785ef3b682169aeb26c2"), "data" : { "asset" : { "serial" : "ONT123602HD", "revision" : "01" } }, "model" : ObjectId("528c77e7f3b68213faf03d45") }
19:04
{ "_id" : ObjectId("528c785ef3b682169aeb26c3"), "data" : { "asset" : { "serial" : "ONT123600J3", "revision" : "01" } }, "model" : ObjectId("528c77e7f3b68213faf03d45") }
19:04
приделаешь потом, а не работает сейчас
19:05
db.noc.objects.remove({"model": ObjectId("528c77e7f3b68213faf03d45")})
19:06
не помогло
19:07
> db.noc.objects.remove({"model": ObjectId("528c77e7f3b68213faf03d45")})
19:07
>
19:07
тот же трейс
19:07
Unable to dereference <class 'noc.inv.models.object.Object'>:528c785ef3b682169aeb26c2
19:07
> db.noc.objects.find({"model": ObjectId("528c77e7f3b68213faf03d45")})
19:07
>
19:11
19:11
вот такое накати
19:13
не помогло
19:14
UNHANDLED EXCEPTION (2013-11-20 23:14:20.614548)
19:14
Working directory: /opt/noc
19:14
<class 'mongoengine.base.ValidationError'>
19:14
Unable to dereference <class 'noc.inv.models.object.Object'>:528c785ef3b682169aeb26c2 [db.noc.objects.remove({_id: ObjectId("528c785ef3b682169aeb26c2")}) to remove]
19:16
вот и попробуй так
19:16
db.noc.objects.remove({_id: ObjectId("528c785ef3b682169aeb26c2")})
19:20
не помогает
19:21
может дропнуть чего? это тест, мне нежалко, если обратно все соберет
19:21
*не жалко
19:25
db.noc.objects и db.noc.objectconnections
19:30
дискавернул пару проблемных железок, теперь все трансиверы на месте
19:30
надо только для 7600 модель для рсп и psu сделать и все мои железки вроде как в нок помещаются
19:33
у некоторых трансиверов с пидом N/A, серийник очень похож на finisar
19:36
finisar-like transceiver
19:36
:)
19:38
ну а че, вот финисары который распознаны FNS16460D46 FNS0838K0WZ. а вот неизвестные FNS170417WD FNS17040Z54
19:39
возможно 7600 чего-то в пиде не нравится, а 4924 его нормально достает
19:40
7600 вообще у гиговых трансиверов у меня пиды почти нигде не показывает
19:59
и что с этими unknown models делать?
19:59
NoName | Transceiver | Unknown SFP | Cisco
19:59
Unknown | Transceiver | Unknown -> NoName | Transceiver | Unknown SFP | Cisco
19:59
NoName | Transceiver | 1G | SFP T
19:59
Unknown | Transceiver | 1000BASET -> NoName | Transceiver | 1G | SFP T
Share this page
Share this page: