Skip to content

Commit 68bbd3d

Browse files
authored
Merge pull request #4 from k1nky/v0.3.0-pre
v0.3.0-rc0
2 parents b656b36 + 29b75c0 commit 68bbd3d

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

netbox_scripthelper/api/serializers.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,13 @@ class AvailableIPSerializer(serializers.Serializer):
3030
Representation of an IP address which does not exist in the database.
3131
"""
3232
def to_representation(self, instance):
33+
with_mask = self.context['request'].query_params.get('with_mask', 'True')
34+
35+
value = f"{instance}/{self.context['parent'].mask_length}"
36+
if with_mask == 'False':
37+
value = str(instance)
38+
3339
return {
34-
'id': f"{instance}/{self.context['parent'].mask_length}",
35-
'display': f"{instance}/{self.context['parent'].mask_length}",
40+
'id': value,
41+
'display': value,
3642
}

netbox_scripthelper/utils.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from typing import List
2-
from netaddr import IPSet, IPNetwork
2+
from netaddr import IPSet, IPNetwork, IPAddress
3+
from django.core.exceptions import ValidationError
4+
from ipam.models import Prefix
35

46

57
class IPSplitter:
@@ -23,3 +25,16 @@ def split(self, prefix_len: int, limit: int) -> List[IPNetwork]:
2325
break
2426

2527
return subnets
28+
29+
30+
def get_available_ip_list(prefix: Prefix, base_addr: str, size: int) -> List[IPAddress]:
31+
available_addresses = prefix.get_available_ips()
32+
base_addr = base_addr.split('/')[0]
33+
addresses = []
34+
for i in range(0, size):
35+
next_addr = IPAddress(base_addr) + i
36+
if next_addr in available_addresses:
37+
addresses.append(next_addr)
38+
if len(addresses) != size:
39+
raise ValidationError("not enough free addresses")
40+
return addresses

0 commit comments

Comments
 (0)