|
@@ -7,12 +7,12 @@ from django.urls import reverse
|
|
|
from circuits.models import Provider, Circuit
|
|
from circuits.models import Provider, Circuit
|
|
|
from circuits.tables import ProviderTable
|
|
from circuits.tables import ProviderTable
|
|
|
from dcim.filtersets import InterfaceFilterSet
|
|
from dcim.filtersets import InterfaceFilterSet
|
|
|
-from dcim.models import Interface, Site
|
|
|
|
|
|
|
+from dcim.models import Interface, Site, Device
|
|
|
from dcim.tables import SiteTable
|
|
from dcim.tables import SiteTable
|
|
|
from netbox.views import generic
|
|
from netbox.views import generic
|
|
|
from utilities.utils import count_related
|
|
from utilities.utils import count_related
|
|
|
from virtualization.filtersets import VMInterfaceFilterSet
|
|
from virtualization.filtersets import VMInterfaceFilterSet
|
|
|
-from virtualization.models import VMInterface
|
|
|
|
|
|
|
+from virtualization.models import VMInterface, VirtualMachine
|
|
|
from . import filtersets, forms, tables
|
|
from . import filtersets, forms, tables
|
|
|
from .constants import *
|
|
from .constants import *
|
|
|
from .models import *
|
|
from .models import *
|
|
@@ -676,7 +676,19 @@ class IPAddressView(generic.ObjectView):
|
|
|
related_ips_table = tables.IPAddressTable(related_ips, orderable=False)
|
|
related_ips_table = tables.IPAddressTable(related_ips, orderable=False)
|
|
|
related_ips_table.configure(request)
|
|
related_ips_table.configure(request)
|
|
|
|
|
|
|
|
- services = Service.objects.restrict(request.user, 'view').filter(ipaddresses=instance)
|
|
|
|
|
|
|
+ # Find services belonging to the IP
|
|
|
|
|
+ service_filter = Q(ipaddresses=instance)
|
|
|
|
|
+
|
|
|
|
|
+ # Find services listening on all IPs on the assigned device/vm
|
|
|
|
|
+ if instance.assigned_object and instance.assigned_object.parent_object:
|
|
|
|
|
+ parent_object = instance.assigned_object.parent_object
|
|
|
|
|
+
|
|
|
|
|
+ if isinstance(parent_object, VirtualMachine):
|
|
|
|
|
+ service_filter |= (Q(virtual_machine=parent_object) & Q(ipaddresses=None))
|
|
|
|
|
+ elif isinstance(parent_object, Device):
|
|
|
|
|
+ service_filter |= (Q(device=parent_object) & Q(ipaddresses=None))
|
|
|
|
|
+
|
|
|
|
|
+ services = Service.objects.restrict(request.user, 'view').filter(service_filter)
|
|
|
|
|
|
|
|
return {
|
|
return {
|
|
|
'parent_prefixes_table': parent_prefixes_table,
|
|
'parent_prefixes_table': parent_prefixes_table,
|