Для добавления железок используются ип адреса из address space managment-assignet addresses. Там же нужно проставить tag. Вот сам скрипт
from noc.sa.models import * from noc.inv.models import * from noc.ip.models import * from noc.main.models import SystemNotification import string import commands for i in range(1,10): #задаем диапазон сеток prf=Prefix.objects.filter(prefix='10.10.'+str(i)+'.0/24',vrf='1') #делим диапазон на сети /24 (10.10.1.0/24 по 10.10.10.0/24) for p in prf: if p.tags: tags1= ','.join(str(v) for v in p.tags) #ищем тег сетки adrs=p.nested_address_set #поиск найденных адресов print tags1 for a in adrs: addpr=False mo=ManagedObject.objects.filter(address=a.address) #проверка на наличие mo if mo: for o in mo: print o.name addpr=False else: print a.address ring="ring"+str(int(str(a.address).split('.')[3])//20) #доп тег cmd="snmpget -v 2c -c public " + str(a.address) + " 1.3.6.1.2.1.1.2.0 -O Uvqn" #вендор cmd2="snmpget -v 2c -c public " + str(a.address) + " 1.3.6.1.2.1.1.5.0 -O Uvqn" #hostname - будущее имя mo x=str(commands.getoutput(cmd)) name=commands.getoutput(cmd2).replace('"', '') if x == ".1.3.6.1.4.1.2011.2.23.92": #различные вендоры type1="Huawei.VRP"#s2326 type2="s2300" addpr=True if x == ".1.3.6.1.4.1.259.6.10.94": type1="EdgeCore.ES" type2="edge" addpr=True if x == ".1.3.6.1.4.1.2011.2.23.96": #железку не добавляем type1="Huawei.VRP" addpr=False continue if x == ".1.3.6.1.4.1.2011.2.23.229": type1="Huawei.VRP" #s2328 type2="s2300" addpr=True if x.startswith("Timeout"): addpr=False continue if addpr: tags2 = [tags1,ring,type2] print tags2 print addpr print name m = ManagedObject(name=name.format(a.address),is_managed=True,administrative_domain=AdministrativeDomain.objects.get(name="default"),activator = Activator.objects.get(name='default'),profile_name = type1, tags = tags2, snmp_ro = 'public', object_profile = ManagedObjectProfile.objects.get(name='test1'), scheme = 0, address = a.address, user = 'user', password = 'pass') m.save() #запись нового mo a.managed_object = m
Работает через ./noc shell. На выходе куча железок в sa-mo, в которых проставлены вендоры, теги и тд, те сразу начинается сбор статистики.
Код далек от идеала. Например, выдет ошибку, если у мо 2 ип (это поправимо).
- Как запихнуть этот код в пируль?
- При переносе железки с изменением ип, хотелось бы старый мо удалить и создать новый.
- Как применить несколько snmp community?
2 Comments
Unknown User (gnu-linux)
Каждый пилит свою добавлялку МО, и когда появится штатный МО дискавери не ясно...
1. Pyrule для Inventory, который пригодится для FM каждого
2. Сие можно только по маку или серийному номеру, также как проверяешь наличие IP в базе надо просматривать серийник и мак, если совпадение нашлось то вместо создания нового объекта менять IP старого.
3. Вводишь переменную community в виде списка значений и перебераешь их в цыкле.
Unknown User (chaotism)
Вместо конкатенации строк советую использовать "%s "%value или через формат. Ифы нижние причесать в elif или в словарь, конечно когда у вас
if
x
сработает два раза нештатная ситуация, но все в будущем дебажить это дело будет не фонтан.