NetBox v3.3 support

This commit is contained in:
Victor Golovanenko 2022-08-26 15:06:56 +03:00
parent f0aa63e6e0
commit 44211d254a
Signed by: drygdryg
GPG Key ID: 50E0F568281DB835
4 changed files with 21 additions and 6 deletions

View File

@ -4,7 +4,7 @@ from extras.plugins import PluginConfig
class DeviceMapConfig(PluginConfig):
name = 'netbox_device_map'
verbose_name = 'Device map'
version = '0.1'
version = '0.1.1'
author = 'Victor Golovanenko'
author_email = 'drygdryg2014@yandex.com'
base_url = 'device-map'

View File

@ -1,11 +1,15 @@
from packaging import version
from dcim.models import Device
from django.db.models import QuerySet, Q
from ipam.models import VLAN
from netbox.settings import VERSION
from .settings import plugin_settings
LOCATION_CF_NAME = plugin_settings['device_geolocation_cf']
NETBOX_VERSION = version.parse(VERSION)
LatLon = tuple[float, float]
@ -22,11 +26,19 @@ def get_connected_devices(device: Device, vlan: VLAN = None) -> QuerySet[Device]
included_interfaces = device.interfaces.all()
if vlan is not None:
included_interfaces = included_interfaces.filter(Q(untagged_vlan=vlan) | Q(tagged_vlans=vlan))
if NETBOX_VERSION < version.parse('3.3.0'):
return Device.objects.filter(interfaces___link_peer_id__in=included_interfaces)
else:
return Device.objects.filter(
interfaces__cable__terminations__interface__in=device.interfaces.all()
).exclude(pk=device.id)
def are_devices_connected(device_a: Device, device_b: Device) -> bool:
"""Determines whether devices are connected to each other by a direct connection"""
return bool(
Device.objects.filter(interfaces___link_peer_id__in=device_a.interfaces.all(), id=device_b.id).values('pk')
)
if NETBOX_VERSION < version.parse('3.3.0'):
queryset = Device.objects.filter(interfaces___link_peer_id__in=device_a.interfaces.all(), id=device_b.id)
else:
queryset = Device.objects.filter(
interfaces__cable__terminations__interface__in=device_a.interfaces.all(), id=device_b.id)
return bool(queryset.values('pk'))

3
requirements.txt Normal file
View File

@ -0,0 +1,3 @@
setuptools
Django
packaging

View File

@ -5,7 +5,7 @@ with open('README.md', encoding='utf-8') as f:
setup(
name='netbox-plugin-device-map',
version='0.1.0',
version='0.1.1',
description='A simple device map with filter criteria',
long_description=long_description,
long_description_content_type='text/markdown',