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: 06.03.2013
zi_rus #
05:59
меня тут мучают пошлые мысли по поводу сниппетов, хочет узнать побольше возможностей
05:59
интересует такая
05:59
как получить первый свободный префикс /30 внутри списка других префиксов
06:00
ну допустим я смогу определить первый
06:00
как вообще получить список свободных
freeseacher #
06:01
zi_rus, define: свободный
06:02
не содержит хостов ?
zi_rus #
06:02
нет
06:02
есть префикс /24
freeseacher #
06:02
не содержит других сетей ?
zi_rus #
06:02
из него выделены /30 подсетки
06:02
но не все
06:02
например 192,168,0,0/24
06:03
заняты только 0/30, 4/30
06:03
значит первый свободный 8/30
06:03
ну то есть когда я захожу в префикс и жму show free prefixes
06:04
и он показывает что есть свободного
06:04
я хочу автоматически находить первый свободный
06:05
из группы префиксов из которых и распределяются адреса
06:05
ну то есть у меня есть список разрозненых сетей /24, надо просмотреть их всех и найти первый свободный /30 внутри них
mikevlz|3 #
06:05
дык посмотри, как сделано show free
zi_rus #
06:06
мне кажется мне надо смотреть в http://kb.nocproject.org/display/BLOGS/IPAM+REST
06:09
хоть это и немного не то
06:10
freeseacher, мне кажется ты должен знать
06:10
есть ли функция получить список свободных
freeseacher #
06:12
mikevlz|2, show free не годится
06:12
данные уже есть на странице
06:12
zi_rus, нет я не знаю надо изучать вопрос
zi_rus #
06:13
жаль
06:30
dvolodin, не работает как ты сказал
dvolodin #
06:30
кто не работает?
zi_rus #
06:31
{% var vlan_id %}
06:31
{% var vpn_id %}
06:31
не запрашиваются у пользователя,
06:31
или я неправильно их использую в самом теле сниппета?
06:31
я просто пише vlan_id
dvolodin #
06:32
{% var name type %}
zi_rus #
06:32
ты не говорил что надо тип указывать
06:32
какие есть варианты?
dvolodin #
06:32
str
zi_rus #
06:34
dvolodin, понял, спасибо
06:34
вопрос номер 2
06:34
как использовать название vrf в fqdn_template
06:34
как ты раньше говорил vrf.name теперь не работает
06:38
dvolodin, и пока ты не убежал испугавшись этого вопроса, ибо ты ни разу на него так и не ответил, можно ли сделать функцию в ip/models/prefix.py, чтобы она возвращала список свободных префиксов, на подобие "def nested_prefix_set", которая возращает список всех занятых
dvolodin #
06:38
погоди, у меня утренняя текучка
mikevlz|3 #
07:24
я тут вчера скуки ради покопался в коде классификатора и ускорил его в три раза
zi_rus #
07:25
mikevlz|3, признайся, это не скука, а безысходность
07:25
dvolodin, ну что освободился?
dvolodin #
07:26
mikevlz|3: поподробнее :)
mikevlz|3 #
07:26
а сейчас еще pymongo обновил, посмотрим, будет оно втыкаться на ровном месте в Invalid bson size
07:26
dvolodin: сам знаешь, что там есть коммент "нада вынести эти две фигулины в конфиг"
dvolodin #
07:26
zi_rus: у нас так быстро не отстают
07:26
mikevlz|3: какие?
zi_rus #
07:26
сначала навазелинивают, а уж потом начинается сам процесс?
mikevlz|3 #
07:27
первая - через сколько тиков выдавать репорт, вторая - интервал проверки очереди. По дефолту очередь проверялась раз в 3 секунды, сделал раз в секунду
07:27
=)
zi_rus #
07:28
маг оптимизатор
07:28
сделай раз в 100мс
mikevlz|3 #
07:28
и ведь успевал, пока не воткнулся в invalid bson size. Часов 5 вкалывал, потом опять воткнулся и начал в час по капле обрабатывать
zi_rus #
07:28
ускорься в 30 раз
mikevlz|3 #
07:29
zi_rus: не, там минимум - раз в ноль секунд. Демон работает тиками, тик - одна секунда
07:30
dvolodin: можно несколько инстансов классификатора запускать? или это только активатор умеет? а то смущает меня ключ -i 0 в строке запуска всех демонов
zi_rus #
07:30
если эта оптимизация работает и не затрагивает другие аспекты вроде нагрузки на CPU, то хорошо
07:30
но я думаю надо бы с пинговалкой разобраться поему ей так плохо
mikevlz|3 #
07:31
ну CPU классификатор жрать начал чуть-больше, но до активатора с пингом ему далеко
07:31
до дискавери тоже далеко
07:36
да, пинги у меня непроходят пачкой. Обычно сначала пачка из десятка железок непропингуется, потом оставшиеся на ура
dvolodin #
07:37
mikevlz|3: пинги вызывают высокую загрузку?
07:38
mikevlz|3: нельзя пока
07:38
важен порядок событий
mikevlz|3 #
07:38
да нет, в среднем LA 4, подскакивает только во время дампа
dvolodin #
07:38
грубо говоря -- все события с одной железки должны попадать строго на один instance классификатора
mikevlz|3 #
07:39
понятно
07:39
а очередь событий классификатор сам себе набиват или ему sae отдает?
dvolodin #
07:39
иначе коррелятору на вход прилетят disposition'ы в неправильном порядке
07:40
классификатор тупо трясет коллекцию fm.alarms.new
07:40
а в нее срут все, кому не лень
07:40
включая SAE
mikevlz|3 #
07:41
понятно, значит нужен сначала механизм, который будет держать очереди для разных инстансов и кормить их событиями, чтоб они не пытались отклассифицировать то, что уже классифицируют другие
07:42
типа stomp, который будет кормить классификаторы на разных каналах...
zi_rus #
07:53
dvolodin, ну дык эта, мне повторить вопрос?
dvolodin #
08:03
mikevlz|3: именно, нужен диспечер event'ов
08:04
STOMP надо будет расширять, там нет механизма прилепания сообщения с заданным ключем к подписчику
zi_rus #
08:11
dvolodin, ну так что скажешь про ip/models/prefix.py и функцию свободных префиксов?
08:14
нок хорош как раз тем что легко позволяет найти свободный ресурс
08:14
обычно видно только то что занято
ss_ #
08:18
http://habrahabr.ru/post/171681/ рекламим
zi_rus #
08:18
freeseacher, а где можно увидеть как работает show free prefix которая в интерфейсе
freeseacher #
08:19
которая в интерфейсе нарочь не интересна.
08:19
там ява скрипт на 5 строк котороый прячет или показывает существующую информацию же
zi_rus #
08:20
а откуда берется эта инфрмация?
08:20
если нужной функции нет
08:20
может поробовать использовать алгоритм из существующего
freeseacher #
08:21
говорил же утром. надо изучать вопрос.
zi_rus #
08:21
просто даже не знаю в какой файл смотреть
freeseacher #
08:21
я пока это не успеваю поделать
08:21
смотри в районе ip/models/*
zi_rus #
08:29
не, там все очень мутно что я смог найти
08:29
надо какой-то свой кривой алгоритм думать
08:31
в /opt/noc/lib/ip.py есть
08:31
def iter_free(self, prefixes):
08:31
"""
08:31
Return generator of free prefixes.
08:44
dvolodin, можно ли для сниппета сделать необязательные переменные?
dvolodin #
08:48
ча чем iter_free вас смущает?
08:48
он работает
zi_rus #
08:50
dvolodin, как?
08:50
print Prefix.objects.filter(vrf=12, Prefix_group="Clients-p2p", afi=4)[0].iter_free
08:50
Traceback (most recent call last):
08:50
File "<console>", line 1, in <module>
08:50
AttributeError: 'Prefix' object has no attribute 'iter_free'
mikevlz|3 #
08:51
это не свойство, это функция
08:52
надо вызывать с параметрами в скобках
dvolodin #
08:59
у префикса его и нет
08:59
это отдельная либа вообще
08:59
совесть имейте :)
09:00
можно, конечно, их объединить и сделать методом Prefix
09:06
на хабре можно и порекламировать, напишите, что умеет перечитывать конфиги при изменении и работает не только с Cisco :)
zi_rus #
09:46
dvolodin, дык а если совести нет то как ее использовать, ты же говоришь что он работает
dvolodin #
09:46
работает
09:46
но это не метод префикса
zi_rus #
09:46
а метод чего?
09:49
dvolodin, я правильно делаю?
09:49
p= Prefix.objects.filter(vrf=12, Prefix_group="Clients-p2p", afi=4)[0].prefix
09:49
IP.prefix(p).iter_free()
09:51
я уже запутался в этих сущностях
09:52
хотя казалось бы вот vrf, вот префикс в нем, а вот адрес в префиксе
10:01
я понимаю что я тут несу бред и чушь
10:01
потому что ничего не понимаю
10:01
но помогите разобраться
dvolodin #
10:04
IP.prefix(p.prefix).iter_free()
zi_rus #
10:05
так я пробовал
10:05
>>> print IP.prefix(p.prefix).iter_free()
10:05
Traceback (most recent call last):
10:05
File "<console>", line 1, in <module>
10:05
TypeError: iter_free() takes exactly 2 arguments (1 given)
10:05
не пойму какой второй аргумент ему надо
10:07
методом подбора уже нашел что ему нужен префикс строкой на входе, а вот второй, подозреваю должен быть в самих скобках
10:10
все на что фантазии хватило уже туда подставил
mikevlz|3 #
10:15
ему надо в качестве параметра дать список уже занятых, если я правильно понял комментарии
zi_rus #
10:22
ну вот в b лежит этот список, это я тоже пробовал
10:22
print IP.prefix(p.prefix).iter_free(b)
10:22
<generator object iter_free at 0x808e185a0>
mikevlz|3 #
10:27
ну, получил генератор
10:27
вот теперь берешь и по одному их трогаешь, какой понравится занимаешь
zi_rus #
10:28
mikevlz|3, не понял
mikevlz|3 #
10:28
http://habrahabr.ru/post/30232/
dvolodin #
10:31
zi_rus: ему нужен список используемых префиксов в префиксе
10:31
ладно, постараюсь сделать тебе метод
zi_rus #
10:32
но ведь этот почти заработал
10:32
сейчас помедитирую что с этим генератором делать
10:34
mikevlz|3, не вкуривую статью на хабре
mikevlz|3 #
10:37
я конечно тот еще программист, но...
10:37
for free_pref in IP.prefix(p.prefix).iter_free(b):
10:37
print free_pref
zi_rus #
10:40
mikevlz|3, ты не поверишь, но это я тоже пробовал (уже по хабру), но без результата
10:40
>>> print b
10:40
['195.98.54.220/30', '195.98.54.8/30', ...]
10:40
>>> print p.prefix
10:40
195.98.54.0/24
10:40
>>> for x in IP.prefix(p.prefix).iter_free(b):
10:40
... print x
10:40
...
10:40
>>>
mikevlz|3 #
10:41
клева...
10:50
>>> pgen = IP.prefix(pref.prefix).iter_free(b)
10:50
>>> pgen
10:50
<generator object iter_free at 0x808b57780>
10:50
>>> for x in pgen:
10:50
... x
10:50
...
10:50
<IPv4 10.29.129.128/25>
10:51
а вот print x не отрабатывает...
10:51
да...
zi_rus #
10:51
>>> for free_pref in IP.prefix(p.prefix).iter_free(b):
10:51
... free_pref
10:51
...
10:51
>>>
mikevlz|3 #
10:51
а там есть свободные префиксы?
zi_rus #
10:52
ой
ss_ #
10:52
Выкинул еще на хабр чутка
zi_rus #
10:52
ну да там все занято
10:52
ss_, вбросил на вентилятор :)
ss_ #
10:53
http://habrahabr.ru/post/171681/ красивых картинок)
zi_rus #
10:53
mikevlz|3, будем считать что разобрались
mikevlz|3 #
10:53
бггг
zi_rus #
10:53
а как если что их перебирать?
mikevlz|3 #
10:54
Ну у меня, как видишь, все свободное влазит в один /25
10:55
если будет с дырами префикс родительнский - будет несколько вариантов. Можно сразу после первого элемента выпрыгнуть из цикла(break вроде), пользоваться им. Мож гуру червяка подскажет вариант правильнее
zi_rus #
10:55
mikevlz|3, хочешь сказать что он вернет все? сейчас поищу префикс где несколько свободных есть
mikevlz|3 #
10:58
да, причем несколько подряд соберет в бОльший
zi_rus #
10:58
ну это я знаю, это я буду сразу маску сразать и к /30 приводить
11:02
mikevlz|3, далеко в доку лезть, не подскажешь, если я в цикле бегаю по префиксам в поисках свободного, как выйти из цикла когда я нашел? то есть когда генератор мне вернул не пустой свободный префикс?
11:02
типа if a not null:
11:04
break
mikevlz|3 #
11:05
вроде да. Найди префикс, в котором несколько свободных есть сеток, попробуй
zi_rus #
11:09
jr
11:09
ok
11:13
если в теле сниппета я сделаю p.save() - он выполнится в момент отработки питона или после отработки всего сниппета?
mikevlz|3 #
11:17
при обработке питона, по идее. Но выполнится ли он один раз если будет галка "Confirm" или как ее там - не знаю
zi_rus #
11:19
думаю просто если буду тестировать начнет мне зараза префиксы занимать
dvolodin #
11:26
zi_rus: с каких это пор тебя питон укусил?
zi_rus #
11:27
приспичило нарисовать кнопку "сделать заебись"
11:31
dvolodin, знаешь какая фигня, приходится обрабатывать по сотне заявок в месяц и большинство однотипные, выделить ip, настроить порт, или проключить влан от сих до сих, я заколебался, хочу из нока пользу извлечь
11:32
mikevlz|3, фигня какая-то http://pastebin.com/MWqyUXzK - возвращает некоторые занятые префиксы
11:34
а нет
11:34
не надо было del locked[0] делать
mikevlz|3 #
11:35
а зачем ты нулевой элемент массива удаляешь?
zi_rus #
11:35
ну там почему то был сам префикс
11:36
то есть если я делаю принт то нулевым шел /24, а потом его вложенные
mikevlz|3 #
11:36
locked_prefixes = pref.nested_prefix_set
11:36
locked = []
11:36
free = []
11:36
for lock in locked_prefixes:
11:36
locked += {lock.prefix}
11:36
del locked[0]
11:36
можно заменить на
11:36
locked = [ x.prefix for x in pref.nested_prefix_set ]
zi_rus #
11:38
ок, программер из меня еще тот, я про такие приемы не знаю
11:45
но определенно высоты окна с телом снипета явно не хватает
11:45
а дескрипшен можно и урезать
mikevlz|3 #
11:49
=)
zi_rus #
12:04
этап номер 3, поиск свободного интерфейса в инвентори
mikevlz|3 #
12:11
=)
zi_rus #
12:43
dvolodin, я повторяю свой вопрос по поводу vrf и fqdn_template
dvolodin #
12:45
zi_rus: посмотрел
zi_rus #
12:45
точка :)
12:45
и? что делать то?
dvolodin #
13:05
нет там VRF в контексте вообще
zi_rus #
13:06
то есть забыть или добавишь?
13:22
дикость интерфейсы можно дернуть только по идентификатору МО
13:22
i = Interface.objects.get(managed_object=id, type="physical")
13:22
а по имени не хочет
13:23
а id не хочет выдергиваться
13:23
if mo_name==context["object"].name:
13:23
mo_id=context["object"].id
13:23
фейлится на этом
13:23
когда комментирую его
13:23
ве нормально
13:25
ой дурак
13:25
все я понял
dvolodin #
13:43
почему дикость?
13:43
в mongoengine действительно по id
13:46
по крайней мере, я не нашел там возможности влиять на построение QuerySet'а
13:46
то есть проверять, что передали как параметр и извлекать, в случае надобности, id
13:53
zi_rus: http://pastie.org/6404386
13:54
твое счастье где-то тут
13:58
проверяй
Tweet
Share this page
Share this page: Tweet