feat(network): Batch requests when filtering on interfaces

This avoids an issue where the requested URI is too long when many
interfaces are present
This commit is contained in:
Tom Hubrecht 2024-05-07 13:54:27 +02:00
parent ba4cdb217b
commit e04d0c6d59

View file

@ -1,7 +1,7 @@
import logging
import os
import re
from itertools import chain
from itertools import chain, islice
import netifaces
from netaddr import IPAddress
@ -413,11 +413,16 @@ class Network(object):
# delete IP on netbox that are not known on this server
if len(nb_nics):
netbox_ips = nb.ipam.ip_addresses.filter(
**{self.intf_type: [x.id for x in nb_nics]}
def batched(it, n):
while batch := tuple(islice(it, n)):
yield batch
netbox_ips = []
for ids in batched((x.id for x in nb_nics), 25):
netbox_ips += list(
nb.ipam.ip_addresses.filter(**{self.intf_type: ids})
)
netbox_ips = list(netbox_ips)
all_local_ips = list(chain.from_iterable([
x['ip'] for x in self.nics if x['ip'] is not None
]))