Improve representation of available IP space

This commit is contained in:
Jeremy Stretch 2025-04-03 12:21:52 -04:00
parent 4ee9653e63
commit 5960385fcd
2 changed files with 17 additions and 6 deletions

View File

@ -26,14 +26,12 @@ PREFIX_LINK_WITH_DEPTH = """
""" + PREFIX_LINK """ + PREFIX_LINK
IPADDRESS_LINK = """ IPADDRESS_LINK = """
{% if record.address %} {% if record.address or record.start_address %}
<a href="{{ record.get_absolute_url }}" id="ipaddress_{{ record.pk }}">{{ record.address }}</a> <a href="{{ record.get_absolute_url }}">{{ record }}</a>
{% elif record.start_address %}
<a href="{{ record.get_absolute_url }}" id="range_{{ record.pk }}">{{ record }}</a>
{% elif perms.ipam.add_ipaddress %} {% elif perms.ipam.add_ipaddress %}
<a href="{% url 'ipam:ipaddress_add' %}?address={{ record.first_ip }}{% if object.vrf %}&vrf={{ object.vrf.pk }}{% endif %}{% if object.tenant %}&tenant={{ object.tenant.pk }}{% endif %}&return_url={% url 'ipam:prefix_ipaddresses' pk=object.pk %}" class="btn btn-sm btn-success">{% if record.size <= 65536 %}{{ record.size }}{% else %}Many{% endif %} IP{{ record.size|pluralize }} available</a> <a href="{% url 'ipam:ipaddress_add' %}?address={{ record.first_ip }}{% if object.vrf %}&vrf={{ object.vrf.pk }}{% endif %}{% if object.tenant %}&tenant={{ object.tenant.pk }}{% endif %}&return_url={% url 'ipam:prefix_ipaddresses' pk=object.pk %}" class="btn btn-sm btn-success">{{ record.title }}</a>
{% else %} {% else %}
{% if record.size <= 65536 %}{{ record.size }}{% else %}Many{% endif %} IP{{ record.size|pluralize }} available {{ record.title }}
{% endif %} {% endif %}
""" """

View File

@ -1,6 +1,8 @@
from dataclasses import dataclass from dataclasses import dataclass
import netaddr import netaddr
from django.utils.translation import gettext_lazy as _
from .constants import * from .constants import *
from .models import Prefix, VLAN from .models import Prefix, VLAN
@ -16,9 +18,20 @@ __all__ = (
@dataclass @dataclass
class AvailableIPSpace: class AvailableIPSpace:
"""
A representation of available IP space between two IP addresses/ranges.
"""
size: int size: int
first_ip: str first_ip: str
@property
def title(self):
if self.size == 1:
return _('1 IP available')
if self.size <= 65536:
return _('{count} IPs available').format(count=self.size)
return _('Many IPs available')
def add_requested_prefixes(parent, prefix_list, show_available=True, show_assigned=True): def add_requested_prefixes(parent, prefix_list, show_available=True, show_assigned=True):
""" """