Skip to end of metadata
Go to start of metadata

Проверка правильности VLAN на линках может быть произведена так:

from noc.inv.models import *
report =[]
for l in Link.objects.all():                                                          
  s1 = SubInterface.objects.get(interface=l.interfaces[0].id)                         
  s2 = SubInterface.objects.get(interface=l.interfaces[1].id)                         
  if 50 in s1.tagged_vlans:
        s1.tagged_vlans.remove(50)
  if 50 in s2.tagged_vlans:
        s2.tagged_vlans.remove(50)
  if 950 in s1.tagged_vlans:
        s1.tagged_vlans.remove(950)
  if 950 in s2.tagged_vlans:
        s2.tagged_vlans.remove(950)
  if s1.tagged_vlans and s2.tagged_vlans and s1.tagged_vlans != s2.tagged_vlans:
     l,(set(s1.tagged_vlans)-set(s2.tagged_vlans)),(set(s2.tagged_vlans)-set(s1.tagged_vlans))

50-й и 950-й вланы - это ISM/Multicast vlan. Длинк их обрабатывает отдельно от других вланов и не показывает, что этот влан висит на порту. Чтобы избежать ситуации, когда на L3 этот влан есть, а на домовом свиче нет - удаляем мультикастовый влан из списка.

Быстрая расстановка тегов может быть произведена так:

from noc.sa.models import *
objs = ManagedObject.objects.filter(address__startswith="172.16.0.")
for o in objs:
 if not "someTag," in o.tags:
    o.tags += "someTag,"
    o.save()

Эти куски червяка надо сажать в ./noc shell для того, чтоб они дали урожай. С собственно сниппетами не возился, может в комментах подскажут, как реализовать сниппеты

 

ДОБАВЛЕНО:

Если вдруг надо закрыть все Ping Failed Alarm, может помочь такой кусок кода:

from noc.fm.models import *
ac = AlarmClass.objects.filter(name__icontains="Ping Failed")[0]
aa = ActiveAlarm.objects.filter(alarm_class=ac.id)
for a in aa:
   raw_vars = {"source": "system","activator": "default","ip": "{0}".format(a.managed_object.address),"probe": "ping","result": "success"}
   ne = NewEvent(timestamp=datetime.datetime.now(),managed_object=a.managed_object,raw_vars=raw_vars,log=[])
   ne.save()
   print ne.id

  • No labels

3 Comments

  1. Unknown User (lexus)

    В сниппетах оно почти так же и будет. Там для этого есть специальный тег {% python %} и нужно будет добавить внешние переменные по желанию.

    Кстати, в первом примере мне не совсем понятно, что там после последнего if делается.. или имелось с виду помещение этого всего в список report?

     

     

     

     

    1. Unknown User (mikevlz) AUTHOR

      Ну подразумевалось помещение в список, после чего отправка списка, но что-то как-то лень было доводить до ума, оставил консольно-шелловым. Последняя строка выводит имя линка и два набора - вланы, которых нет на втором интерфейсе и есть на первом, вланы которых нет на первом интерфейсе, но есть на втором.

      Если сделать report словарем, то можно будет ему аппендить детей, потом отправлять форматированный Notify.

      Если хочется автомата - то загонять pyrule, которое будет создавать и гасить алармы в зависимости от разницы вланов на интерфейсах

       

  2. Unknown User (dv)

    Более корретно находить сабы так

    s1 = SubInterface.objects.filter(interface=l.interfaces[0], enabled_afi=['BRIDGE']).first()
    if not s1 or not s1.tagged_vlans:
        continue

    Отфильтровывать vlan'ы коректнее так

    IGNORED_VLANS = set([50, 950])
    ...
    s1_vlans = set(s1.tagged_vlans) - IGNORED_VLANS
    ...