вторник, 8 ноября 2022 г.

Особенности работы с python-netbox

 Речь о той версии, которая pip install python-netbox (потому что их несколько)

Держим под рукой доку https://demo.netbox.dev/api/docs/ (можно на свой ипам открыть, /api/docs)

Главный косяк: некоторая неадекватность аргументов. В частности netbox.dcim.create_device(name, device_role, site_name, device_type)

Имя - тут понятно, это новое имя.

device_role - что писать, имя или ID? Вроде правильно что нужно имя. Но - а если такого имени нет и мы заранее делаем device_roles = netbox.dcim.get_device_roles() и проверяем что если роли нет то добавляем? А не важно, оно хочет имя. И "внутрях" делает "GET /api/dcim/device-roles/?name=ххх&limit=0 HTTP/1.1". 

Туда же device-types, sites. Вроде упростили жизнь - но нет, передать уже проверенные айди туда нельзя, будь добр передавать имена.

В чём проблема? В том что смотрим в доку по апи - и получаем что вот тут надо ID, но вот конкретно этим функциям - имена. 

С тэгами всё ещё печальнее. Хинт: нужно передавать лист диктов, заполненные например slug:

tags = [{'slug': 'test tag'},{...}]

Разумеется, само оно тоже создать тэг не может, добро пожаловать в отдельную функцию "до проверки перед вызовами" и там всё заполнять если таких пока нет.

Вроде, не так и плохо. Но.

netbox.dcim.create_device_type

Хотим передать производителя,  manufacturer = 'hetzner' - и... упс, требуется его id!

netbox.exceptions.ClientException: Related objects must be referenced by numeric ID or by dictionary of attributes. Received an unrecognized value: hetzner 

Именно в этом и проблема. И невозможно передать ид если апи хочет там имя, и отладка превращается в "угадай что сюда поставить".

И бонусом - некоторых вещей там просто нету, например extras/custom-fields

PS найден ещё прикол. Несмотря на ?limit=0 в запросе, такой запрос

ips = netbox.ipam.get_ip_addresses() заполнит всего 1000 записей. У нас на 5000+ это дало пачку багов.

НО оказывается, там работает поиск и заполнять сразу все записи нет нужды, причём можно делать поиск по нескольким параметрам сразу

Комментариев нет:

Отправить комментарий