About Forum Blogs NOC Docs Downloads KB Issues Code CI Registration

nocproject.org

#nocproject.org at irc.freenode.net log.
Back to nocproject.org Back to IRC log index
Date: 10.12.2013
zi_rus #
05:54
dvolodin, а есть какая-нибудь система блокировок в ноке? у меня вроде пока такого не случалось, но я беспокоюсь что возможна ситуация когда два человека захотят занять одну и ту же vc и одновременно запишут ее в нок, а потом настроят на сети
dvolodin #
05:55
не получится у них так
05:55
но, возможно, стоит сделать сервис для бронирования
zi_rus #
05:56
почему?
dvolodin #
05:57
ограничения целостности сработают
zi_rus #
05:58
один нажал add first free и ему выдало номер 111, он заполняет данные, потом второй жмет кнопку, ему выдается тот же 111, потому что в базу он еще не занесен, первый сохраняет, оно добавляется в базу, второй сохраняет и данные перезаписываются
dvolodin #
06:54
на самом деле, vc сами по себе не живут обычно
06:55
все можно привязать к обработке заявок
_4ePTeHok #
06:58
Дима, по поводу вчерашнего вопроса есть идеи?
06:59
"а как мы будем коррелировать интерфейсы из get_interfaces и из get_inventory? применимо к серверам. ну отдам я номер(bus) состыкуется оно с NIC1 например, а дальше? В ОС то оно eth1 например"
06:59
"из скрипта я могу дернуть logical_name = eth1, но ее некуда отдавать и опять же, смотри - мы дергаем физические карты. Есть двухпортовая сетевка к примеру(комбинированное устройство), как объект - одна позиция, серийник у сетевок - мак, но там их два, а в моде
06:59
ли у нас серийник однозначен.
06:59
Давай сделаем серийники list-ом, как prod_no?"
07:00
"и добавим в модель logical_name, чтобы коррелировать потом можно было"
dvolodin #
07:06
вот насчет привязки интерфейсов системы к портам - я еще думаю
07:06
серийник должен быть один, иначе это ересь
07:06
можно возвращать меньший из всех
07:06
min(....)
07:07
internal_name у тебя заработал?
_4ePTeHok #
07:11
я еще не дошел) забиваю вендоров, коннекторы и начинаю модельку рисовать
07:12
по поводу серийников...там хитро
07:16
я при проходе нового блока(девайса системы) проверяю - есть ли уже в objects на той же PCI шине устройство(совпадение prod_no и number) и если есть поднимаю флаг complex_device. Соответственно пока реакцию на поднятый флаг сделал - пропуск, но можно скажем добавлять ч
07:16
то то в уже существующий объект(например [eth1, eth2])
dvolodin #
07:25
тогда все зависит от того, меняется ли порядок устройств в выдаче
_4ePTeHok #
07:27
раньше выдается то, что по шине раньше
07:28
т е pci@0000:04.0 первее pci@0000:04.1
07:29
собственно все что после точки - это и есть комбинированные девайсы, я обрезаю это при отдаче в number уже
dvolodin #
07:29
pci@0000:04.0
07:29
это примерно -- шина 0000
07:30
устройство 04
07:30
ну и дальше на плате?
_4ePTeHok #
07:30
pci@0000:0a:00.0 вот так в реальности
07:30
это к примеру видеокарта
07:30
'pci@0000:0a:00.1'
07:31
а это аудиоконтроллер хдми на ней же
07:31
вот за точкой по моим наблюдениям всегда то, что на этой же плате(чипе)
dvolodin #
07:35
что такое вообще pci@xxxxxxxxxx
_4ePTeHok #
07:35
bus
dvolodin #
07:38
All devices have at least 1 function, function #0. There are 8 possible functions per device, numbered 0-7. Any device that has more than 1 function is (hey clever!) called a multi-function device. Multi-function devices, such as a combination modem+soundcard will usually have 2 uniquely addressable functions, numbered 0 and 1.
_4ePTeHok #
07:38
угу, так и есть
dvolodin #
07:38
хочу терминологию понять
07:39
итого .0 -- это function 0, которая есть всегда
07:39
http://www.waste.org/~winkles/hardware/pci.htm
_4ePTeHok #
07:39
ну мы же не функции дергаем, нам надо только device. Потому можно смело резать все что за точкой
07:40
просто надо понять, что нам нужно вытащить с других функций в объект
07:40
для сетевок - это скажем имя интерфейса в системе
dvolodin #
07:41
ну да
07:41
я не лез в такие дебри шины
07:41
не могу понять, правильно ли мы делаем или нет
07:44
http://lwn.net/images/pdf/LDD3/ch12.pdf
07:44
Each PCI peripheral is identified by a bus number, a device number, and a function number.
07:45
The PCI specification permits a single system to host up to 256 buses, but because 256 buses are not sufficient for many large systems, Linux now supports PCI domains. Each PCI domain can host up to 256 buses. Each bus hosts up to 32 devices, and each device can be a multifunction board (such as an audio device with an accompanying CD-ROM drive) with a maximum of eight functions. Therefore, each function can be identified at hardware level by a 16-
07:45
address, or key
_4ePTeHok #
07:47
одни пишут 8, другие 16
07:48
что значит 16-address, при 8-function)
dvolodin #
07:50
pci@0000:0a:00.0
07:51
тогда тут у нас 0000 - bus, 0 - function
07:51
а что 0a и что 00 ?
07:51
domain/device?
_4ePTeHok #
07:51
мм..нене
dvolodin #
07:51
или на плате bridge
07:51
pci
_4ePTeHok #
07:51
0000 - домен
07:52
256 - FFh же
07:52
0a - bus, 00 - device
07:52
0 - func
07:53
'pci@0000:12:0d.6' вот например Host controller
07:53
первые 4 байта у меня всегда нули
07:54
ой, ну домен короче
ufir #
07:55
sck nrk
_4ePTeHok #
07:55
'pci@0000:18:04.0' 'pci@0000:18:10.0' - два разных 'PEX 8664 64-lane, 16-Port PCI Express Gen 2 (5.0 GT/s) Switch'
07:55
на одной шине, два девайса с 0 функцией
dvolodin #
07:56
ну правильно
07:56
0-я функция у него -- входная
_4ePTeHok #
07:56
угу, я про то что домен - первая четверка
dvolodin #
07:56
ok
07:56
у usb схожая адресация
_4ePTeHok #
07:57
там еще про диски будет подобное
07:57
нам же надо привязывать диски к раъемам
07:57
без рейдов если)
07:57
с ними вообще непонятно как быть.
dvolodin #
07:59
только вендорными тулзами
_4ePTeHok #
08:07
угу, то есть зависимости тащить...
08:07
ну собственно с нвидией оно уже так0
08:07
=)
dvolodin #
08:11
метод сбора потом можно и поменять
_4ePTeHok #
08:14
я думаю что просто детектить есть ли рейд в устройствах, и в зависимости от этого делать try:/except: print "Please install blabla software for support your device"
08:14
повендорно
dvolodin #
08:16
хотя бы
_4ePTeHok #
08:17
документацию только обязательно надо будет. А то в логи никто не пойдет смотреть как обычно)
08:25
ну ладно, с этим разобрались..а насчет корреляции надо порешать.
dvolodin #
08:42
по серийникам-то?
08:43
давай брать их с funciton 0
_4ePTeHok #
08:51
не, это ясно
08:51
я про интерфейсы с гет_интерфейсес
08:51
eth0 и т д
dvolodin #
08:51
а вот это я думаю
_4ePTeHok #
08:51
Bus : 0x16
08:51
Device : 0x00
08:51
Domain : 0x0000
08:51
Bus Id : 0000:16:00.0
08:51
да вот подтверждение
dvolodin #
08:52
это и для сетевых железок нужно
08:54
отображение connection на имя интерфейса
_4ePTeHok #
08:56
у сетевых проще. Там name коррелируется с interface
08:57
у сервачных там корреляции без доп. переменных вообще нет
dvolodin #
08:58
может там руками/
08:58
?
_4ePTeHok #
09:00
а я вот кстати не смотрел что отдает линуксовый get_interfaces)
09:00
руками не удобно
09:00
я говорю - я могу снять в get_inventory имя интерфейса в системе
09:00
переменную только надо ввести
09:01
чтобы модель сожрала
09:03
гы, а get_interfaces никто и не писал для линукса.
09:04
печалько.
09:11
давай сделаем для get_inventory параметр {function:logical_descriptor}
09:12
тогда оно ляжет как {0:eth1} {1:eth2}
09:12
funcion - это из bus, тот последний октет за точкой
09:15
в итоге мы знаем bus device, function, logical_descriptor, и сможем соотнести какие интерфейсы как в системе обозваны и полный путь bus до них.
09:26
а по полному bus - мы знаем какая дырка NIC1 или NIC2
dvolodin #
09:28
а если там 4 порта?
_4ePTeHok #
09:28
будет 2:eth3
09:28
и т д
09:29
полный bus все равно будет разным
dvolodin #
09:29
тогда по логике вещей должно быть что-то вроде bus id -> interface name
09:29
на выходе
_4ePTeHok #
09:30
да
dvolodin #
09:30
проблема в другом
09:30
для сетевого железа другой подход потребуется
_4ePTeHok #
09:31
дык там в name уже имя интерфейса
09:32
тут еще вопрос как приземлить на мамку эти вот сетевки, встроенные в нее.
dvolodin #
09:34
на самом деле задача так выглядит
09:34
привязка имени интерфейса к коннкретному connection
_4ePTeHok #
09:38
не...конкретной физической дырки
09:38
имя то у нас в get_interfaces еще
09:38
вместе с линком
09:39
а, ты connection в терминологии инвентори, тогда да
dvolodin #
10:17
вот как эту привязку без пользовательских функций сделать, не знаю
_4ePTeHok #
10:38
dvolodin, еще по блейдам загвоздка. По идее там должен быть контейнер на верхнем уровне иерархии(chassis), но оно не активное ни капли бывает - просто как железный ящик с БП и FAN, но при этом с блейда вытягивается информация про БП и FAN.
10:39
т е блейд допустим пол-ящика
10:39
как его в рэк пихать без контейнера на всю ширину стойки
dvolodin #
10:39
это как это оно не активное
10:39
активность этого самого пассивного бэкплейна на HP блядьцентр 7000 мне в свое время изрядно крови попортила
_4ePTeHok #
10:40
ну вот так, шасси для HP ProLiant SL390s G7 не имеет никакого отражения в ОС блейдов
10:40
точнее блейды отдают свое шасси
dvolodin #
10:40
а, ты про это
_4ePTeHok #
10:40
половинчатое которое
10:40
и уже из них видят БП и FAN общие для обоих половинок
10:41
а вот внешний ящик - ни где не фигурирует
10:41
хотя вроде как имеет свой серийник даже
10:43
оно вон как http://www.saronit.ru/catalog/hp-proliant-sl390s-g7/hp-proliant-sl390s-g7-x5672-626447-b21
10:46
хи..тут блин как бы не пришлось курами в модели указывать, что без высшестоящего шасси оно не бывает
10:46
руками*
10:47
а ящики там такие - http://shopping1.hp.com/is-bin/INTERSHOP.enfinity/WFS/WW-USSMBPublicStore-Site/en_US/-/USD/ViewStandardCatalog-Browse?CatalogCategoryID=YVsQ7EN6wesAAAEuJQoVgV7T
dvolodin #
10:47
и не надо
10:47
direction o
10:48
и все
_4ePTeHok #
10:48
э, не понял
dvolodin #
10:48
блейд -- тот же модуль
_4ePTeHok #
10:48
это понятно. Я про то, что вот этот вот ящик ты не вытянешь в get_inventory
10:48
оно как бы подразумевается
dvolodin #
10:48
ну не вытащишь
_4ePTeHok #
10:49
что блейд в воздухе висеть не может
dvolodin #
10:49
поставишь руками его и засандалишь в него блейды
10:49
из lost&found
_4ePTeHok #
10:49
мм..а как тогда с БП правильно обойтись?
10:49
физически они в этот ящик втыкаются
10:50
но их видно с каждого блейда
dvolodin #
10:51
в ящике они
_4ePTeHok #
10:55
я про то, что их не стыковать с блейдами тогда выходит
10:55
а видать в ящик
10:55
кидать*
dvolodin #
10:56
ну да
10:56
вообще они через management все отдают
mikevlz #
11:08
dvolodin: snmpset в скриптах будет или нет? а ту есть тут у нас эстеты , которым не нравится, что логна свичах логи забитваются
dvolodin #
11:09
а оно надо кому-нибудь вообще?
mikevlz #
11:10
ну вот не нравится некоторым
11:11
объясняют тем, что "а ты попробуй разберись, что происходит у абонента когда все логи забиты логином/логаутом
_4ePTeHok #
11:20
dvolodin, там нет на ящике никакого managment
11:20
это все уже на блейдах
11:21
а можно сделать модельку, и руками закинуть в нее все?
11:21
ну т е блейд то распознается сам, а вот ящик чтобы не тупо container делать, а как модель
11:33
connection rule кстати не дает выбрать пустым.
11:33
если клонируешь оттуда, где оно выставлено
dvolodin #
11:36
на BLc7000 есть
e_zombie #
11:37
http://xkcd.ru/1296/
_4ePTeHok #
11:38
дык это, можно модели вручную цеплять? или делать ящик контейнером(Group)
dvolodin #
11:41
нет
11:41
ящик должен быть именно ящиком со слотами
11:41
там еще есть вариант, когда лезвие занимает 2 слота
_4ePTeHok #
11:41
ну модель то я сделаю
11:41
вопрос в том, как оно потом сцепится
dvolodin #
11:42
connecton type
_4ePTeHok #
11:43
а для чего в коннекшенах model data?
dvolodin #
11:43
на всякий случай
_4ePTeHok #
11:47
так, у нас там 2 ноды, R и L, коннекшены тогда надо тоже делать 2 типа
11:48
чтобы левый в правую нельзя было воткнуть
dvolodin #
11:48
они несовместимы?
_4ePTeHok #
11:48
физически не вставишь левый блейд в правый отсек
dvolodin #
11:49
ok
11:49
тогда разные, да
_4ePTeHok #
11:49
HP | ProLiant s6500 Chassis Right Node
11:49
типа того
12:10
а LGA-1366 - это инлета изобретение?
12:11
Intel | LGA-1366 делать?
12:12
или по категориям = CPU | LGA-1366
e_zombie #
12:36
у производителей нет пересечения по названиям сокетов
12:36
они их не стандартизируют
12:37
так что второй вариант
dvolodin #
12:37
второй, да
12:37
ARM'ы, скажем, разные вендоры могут делать
12:38
пусть будет CPU | *, RAM | *
12:41
я переделываю сейчас способ синхронизации базы из json
12:41
можно будет потом безболезненно переименовывать
_4ePTeHok #
12:46
я вот еще чего подумал. Для устройств, что на мамке, сделал Connection type = MBoard | Internal , которым они цепляются к MB
12:46
раз мы пока не можем определить встроенное оно или нет
dvolodin #
12:52
устройства на мамке разные
12:52
нужны pci* разъемы
12:52
и у тех же блейдов меззанины
_4ePTeHok #
12:59
мм..
12:59
ну вот смотри - у меня в блейде, DIMM разьемы
12:59
RAM | DIMM 240-pin
13:00
при этом схема их наименования = PROC 2 DIMM 1F
13:00
каклй им делать name?
13:00
именно он же будет отображаться в дереве в итоге
13:01
мне удобнее видеть сразу физический разъем proc1_dimm_1F
13:01
internal_name = 1:1F
13:02
а про мамку - мы же не знаем, pci оно или pcie например
dvolodin #
13:02
ну и что
_4ePTeHok #
13:03
а для физических карт - будет именно различатся
dvolodin #
13:03
ты же connection type вообще не выдаешь в get_inventory
_4ePTeHok #
13:03
погоди, в коннекшен тайп - у нас именно что разъемы уже
dvolodin #
13:03
да
_4ePTeHok #
13:04
для встроенных разъема нет
13:04
физически
dvolodin #
13:04
нет
13:04
но они и builtin
_4ePTeHok #
13:04
хех, ну сейчас = нет
13:04
потому что их не определить
13:04
потому и сделал затычку MB | Internal
dvolodin #
13:05
мы builtin'ы определяем по bus id?
_4ePTeHok #
13:05
это единственный способ
13:05
вот только как это провернуть
13:06
в объекте internal name - в коннекшенах
13:07
а нам надо чтобы оно объект пометило втроенным, еще и родителя указало
dvolodin #
13:07
о
13:07
кстати
13:07
а если его нет нигде в internal_name, то оно вполне себе builtin
13:07
а?
_4ePTeHok #
13:08
а как дырки соотносить потом?
13:08
оно же тоже по bus соотносится
dvolodin #
13:08
дырки на мамке сразу
_4ePTeHok #
13:08
это понятно, как их привязывать
13:09
что nic2 - это скажем интеловский чип, а не бродком
13:09
оба встроенных
13:15
как кстати встроенное в дереве будет отображаться?
dvolodin #
13:18
никак
13:18
не должно
13:18
видно будет разъемы его
_4ePTeHok #
13:21
не очень хорошо, видеть бы чипы в итоге в свойствах
13:21
тут смотри в чем вопрос - для модели надо задать какие bus считать builtin
13:22
а объект тогда с таким bus - приклеивать к родителю
dvolodin #
13:43
ну да
_4ePTeHok #
13:49
вот только объект может от другой железки болтаться)
13:49
с таким же bus
13:49
или не?
13:56
PCI-e | rev 2.0 | x16 нормуль так обзывать?)
dvolodin #
14:06
ну да
14:06
а
14:06
там придется наследованием
14:06
может так
14:06
PCIe | 2.0 | x16
14:06
?
_4ePTeHok #
14:09
да как скажешь
14:13
а можно в inv.inv позволить редактировать имена объектов?
dvolodin #
14:14
_4ePTeHok: уже можно
14:14
во вкладке data кликни два раза на name
14:14
и редактируй
_4ePTeHok #
14:15
эм, давно? у меня не работает еще)
dvolodin #
14:15
вчера вроде
_4ePTeHok #
14:15
ага, обновляться надо
dvolodin #
14:19
это вообще полезно иногда
_4ePTeHok #
14:28
только не когда пол-дня модельки клепал в built_in)
dvolodin #
14:36
Скоро признака is_builtin вообще не будет
14:36
:)
_4ePTeHok #
14:41
а как определять что останется после апдейта, а что снесет?)
14:41
отдельный репо для моделек?
dvolodin #
14:41
нет
14:41
манифесты будут
_4ePTeHok #
14:42
ох ё. страшное слово
dvolodin #
14:42
сносить будет только то, что явно отозвано
_4ePTeHok #
14:45
скажи, а airflow у нас ко всем объектам добавляется где тепловой интерфейс есть?
14:45
вот скажем CPU/GPU
14:46
или это только шасси
dvolodin #
14:50
на шасси имеет смысл
14:50
по нему высчитываться будет, куда дуть
14:50
из стойки
_4ePTeHok #
14:51
а у нас можно реализовать совместимость коннекшенов? вот скажем PCIe 2.1 вставить в PCIe 2.0
14:54
и плиз, объесни доходчиво, какую роль играют context записи в connection rules
dvolodin #
14:57
да
14:58
можно сделать совместимость через наследование
14:58
или через cgroup
_4ePTeHok #
14:58
а второй вопрос?
dvolodin #
15:06
на формирование контекста
15:07
его в логе видно на каждый найденый модуль
15:08
грубо говоря, если ты делаешь контекст XXX, то когда встречается модуль данного типа в переменную контекста XXX пишется его number
15:08
и держится там либо пока не перепишется, либо пока не сработает reset context для него
_4ePTeHok #
15:17
эм. т е общая логика работы рула такая - берется устройство, для него формируется контекст(читай дергается намбер в xxx), а дальше сам рул должен сравнить тип, и таргет номер, и воткнуть в коннекшен xxx{n}, верно?
dvolodin #
15:27
контестов много может быть
15:28
ну да, в них переменные, по которым имя connection'а можно определить
_4ePTeHok #
15:29
а как мне правильно теперь работать в руле с internal_name?
15:30
d vjltkb pfgjkybk
15:30
в модели заполнил.
dvolodin #
15:37
просто в target connecton указываешь {N}
_4ePTeHok #
15:41
Trying to connect #1. CPU (Ncpu=0, chassis=None, Nchassis=0, NN=1, cpu=cpu@0, N=cpu@0)
15:41
Connecting CPU cpu@0:in -> CHASSIS None:cpu@0
15:41
Failed to connect: Remote connection not found: cpu@0
15:42
хм. ну name в шассях CPU0 lf
15:42
да
15:42
это что, name должен быть равен internal_name?
dvolodin #
15:56
нет
15:56
оно проверяет по name, если не находит, то по internal name
_4ePTeHok #
16:03
не работает значит
16:03
у меня интернал - как раз cpu@0
16:04
в name - cpu0
dvolodin #
16:04
покажи модель и connection rules
_4ePTeHok #
16:07
http://pastebin.com/qnkm740q
16:07
и там во всех моделях должен быть один рул?
16:08
и е придется делать общий рул для всех серверов
16:08
т е*
dvolodin #
16:09
и кусок get_inventory с процом
16:10
scope cpu нужен вообще?
_4ePTeHok #
16:10
эм..
16:11
ну я для теста
dvolodin #
16:11
ты еще gender на проце попутал
_4ePTeHok #
16:11
{'builtin': False,
16:11
'description': 'Intel(R) Xeon(R) CPU E5649 @ 2.53GHz',
16:11
'number': 'cpu@0',
16:11
'part_no': ['E5649'],
16:11
'serial': 'None',
16:11
'type': 'CPU',
dvolodin #
16:11
проц - папа, на плате - мама
_4ePTeHok #
16:11
'vendor': 'INTEL'},
16:11
там же штырьки в мамке
16:11
какая она мама
16:12
на проце - контактные площадки
dvolodin #
16:13
да без разницы, в общем-то
_4ePTeHok #
16:16
ну дык где ошибся?)
dvolodin #
16:16
полный лог discovery дай
16:24
косячок нашел
e_zombie #
16:24
косячёк это клёво
dvolodin #
16:24
_4ePTeHok: вытащи фикс
_4ePTeHok #
16:25
через час, убегаю счас..
dvolodin #
16:25
я умудрился продублировать метод
16:25
один поправил, другой - нет
e_zombie #
16:28
бывает.
16:29
у меня как то адинесники подобное заделали.
16:29
было весело. нашли после 4 месяцев прадакшена
mikevlz|2 #
16:42
_4ePTeHok: ты можешь разные железки по разным правилам втыкать в разные железки. где обнаружилось - туда воткнется
16:43
я так в Brocade SX воткнул питальник от RX. он один и тот же
16:43
а шасси совсем разные, у них свои наборы плат
16:44
e_zombie: адинэс зарабатывает веб-трансляциями. у них подводные программисты кодят на дне бассейна. это всем известно. А софт - побочный продукт, как газ при добыче нефти
16:49
Так... для живых, пользующихся FM. Врубите консоль явы, откройте вкладку алармов, посмотрите на лог HTTP запросов. Там должно идти обновление грида. Закройте вкладку алармов. У меня в фаерфоксе обновление грида никуда не пропадает. похоже на багу.
Tweet
Share this page
Share this page: Tweet