Речь о той версии, которая 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+ это дало пачку багов.
НО оказывается, там работает поиск и заполнять сразу все записи нет нужды, причём можно делать поиск по нескольким параметрам сразу
Комментариев нет:
Отправить комментарий