Есть такой замечательный инструмент для документирования сети – netdot. Он позволяет вести инвентаризацию оборудования, IPAM, с помощью snmp собирает много полезной инфы – vlan,ы, адресация, маки.. Имеет много плюсов и минусов. Здесь я хочу написать про API. Netdot имеет restfull интерфейс, для python есть соответствующая библиотека – pynetdot. Появилась задача по массовому добавлению устройств в нетдот, а именно ИБП. У нетдота есть discovery, но у нас нет одного диапазона адресов для ИБП, для них выделяются мелкие сети и они разнесены/размазаны по всему диапазону адресов. Итак, начнём.
Подключиться к серверу:
pynetdot.setup(
url='http://127.0.0.1/netdot',
username='admin',
password='pass')
Для привязки ИБП-шника к объекту (Site в терминологии нетдота) необходимо найти id нужного сайта:
site = pynetdot.Site.get_first(name="Суздальский 150")
site_id = site.id
Для опроса устройства по snmp ему нужно задать параметр snmp_target, проще говоря ip-адрес. Адрес уже может быть в нетдоте, например в статусе discovery или static, тогда нужно просто взять его id:
ip = pynetdot.Ipblock.get_first(address='192.168.10.1')
ip_id = ip.id
Если его нет по каким-то причинам, придётся создать вручную:
newip = pynetdot.Ipblock(name = ‘suzd150-eaton’)
newip.address = ‘192.168.10.1’ # need to be in x.x.x.x/32 format
newip.description = ‘suzd150-ups-eaton’
newip.save()
ip_id = newip.id
Что бы не было дублей, можно поискать устройство (Device) с таким ip-адресом:
pynetdot.Device.get_first(snmp_target=ip_id)
Для поиска можно использовать два метода: search или get_first. Search возвращает список (массив) из найденных “объектов”, а get_first первое совпадение. Причем в качестве snmp_target здесь уже задаём не адрес, а его id (ссылка в mysql-базе нетдота).
Далее необходимо создать dns-запись (имя устройства):
rname = pynetdot.RR(name = ‘suzd150-eaton’)
rname.name = ‘suzd150-eaton’
rname.zone = 9 # zone == ups (suzd150-eaton.ups)
rname.save()
И создаём устройство (экземпляр класса):
device = pynetdot.Device(name=”suzd150-eaton”)
Добавляем snmp-штуки:
device.snmp_managed = 1
device.community = “ololo”
device.snmp_version = “2”
device.snmp_bulk = 1
device.snmp_polling = 1
device.canautoupdate = 1
Добавляем устройству имя, snmp_target, entite(владелец), site:
device.name = rname.id
device.snmp_target = ip_id
device.owner = entity_id
device.site = site_id
device.save() # At first saved with name: 3386.defaultdomain
device.name = rname.id
device.save() # All right now
В следующем посте напишу скрипт для добавления этих ИБП.