feat: IPAM-Bereiche automatisch ergänzen
Fehlende Prefixe können direkt aus der IPAM-Bereichsliste für alle sichtbaren IP-Adressen angelegt werden. Zusätzlich zeigt die Prefix-IP-Ansicht das zugewiesene Gerät oder die VM standardmäßig an.
This commit is contained in:
@@ -1,13 +1,18 @@
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import permission_required
|
||||
from django.contrib.auth.mixins import PermissionRequiredMixin
|
||||
from django.core.paginator import Paginator
|
||||
from django.db.models import Q
|
||||
from django.shortcuts import redirect
|
||||
from django.views.decorators.http import require_POST
|
||||
from django.views.generic import TemplateView
|
||||
from dcim.models import Location, Region, Site, SiteGroup
|
||||
from ipam.models import Prefix
|
||||
from ipam.models import IPAddress, Prefix
|
||||
import netaddr
|
||||
|
||||
from .forms import NetworkOverviewFilterForm
|
||||
from .services import ensure_prefix_for_ip
|
||||
|
||||
|
||||
def _descendant_ids(obj):
|
||||
@@ -87,3 +92,31 @@ class NetworkOverviewView(PermissionRequiredMixin, TemplateView):
|
||||
}
|
||||
)
|
||||
return context
|
||||
|
||||
|
||||
@require_POST
|
||||
@permission_required(("ipam.view_ipaddress", "ipam.add_prefix"), raise_exception=True)
|
||||
def reconcile_missing_prefixes(request):
|
||||
created = skipped = failed = 0
|
||||
addresses = IPAddress.objects.restrict(request.user, "view").select_related(
|
||||
"tenant", "assigned_object_type"
|
||||
)
|
||||
for address in addresses.iterator():
|
||||
try:
|
||||
prefix, was_created = ensure_prefix_for_ip(address)
|
||||
created += int(was_created)
|
||||
skipped += int(prefix is None)
|
||||
except Exception:
|
||||
failed += 1
|
||||
|
||||
if failed:
|
||||
messages.warning(
|
||||
request,
|
||||
f"{created} Bereiche wurden angelegt; {failed} IP-Adressen konnten nicht verarbeitet werden.",
|
||||
)
|
||||
else:
|
||||
messages.success(
|
||||
request,
|
||||
f"{created} fehlende Bereiche wurden angelegt. {skipped} Host-Adressen wurden ignoriert.",
|
||||
)
|
||||
return redirect("ipam:prefix_list")
|
||||
|
||||
Reference in New Issue
Block a user