diff --git a/netbox_topology_views/__init__.py b/netbox_topology_views/__init__.py index 7bd3eda..65ff4fc 100644 --- a/netbox_topology_views/__init__.py +++ b/netbox_topology_views/__init__.py @@ -10,12 +10,13 @@ class TopologyViewsConfig(PluginConfig): base_url = 'netbox_topology_views' required_settings = [] default_settings = { - 'preselected_device_roles': 'Firewall,Router,Distribution Switch,Core Switch,Internal Switch,Access Switch,Server,Storage,Backup,Wireless AP', - 'ignore_cable_type': 'power outlet,power port', - 'device_img': 'access-switch,core-switch,firewall,router,distribution-switch,backup,storage,wan-network,wireless-ap,server,internal-switch,isp-cpe-material,non-racked-devices,power-units', + 'preselected_device_roles': ['Firewall', 'Router', 'Distribution Switch', 'Core Switch', 'Internal Switch', 'Access Switch', 'Server', 'Storage', 'Backup', 'Wireless AP'], + 'ignore_cable_type': ['power outlet','power port'], + 'device_img': ['access-switch', 'core-switch', 'firewall', 'router', 'distribution-switch', 'backup', 'storage,wan-network', 'wireless-ap', 'server', 'internal-switch', 'isp-cpe-material', 'non-racked-devices', 'power-units'], 'allow_coordinates_saving': False, - 'preselected_tags' : '', - 'enable_circuit_terminations': False + 'preselected_tags' : [], + 'enable_circuit_terminations': False, + 'draw_default_layout': False } config = TopologyViewsConfig diff --git a/netbox_topology_views/filters.py b/netbox_topology_views/filters.py index 85d2aba..8b9dfac 100644 --- a/netbox_topology_views/filters.py +++ b/netbox_topology_views/filters.py @@ -11,7 +11,7 @@ class DeviceFilterSet(django_filters.FilterSet): ) tag = TagFilter() - role_id = django_filters.ModelMultipleChoiceFilter( + device_role_id = django_filters.ModelMultipleChoiceFilter( field_name='device_role_id', queryset=DeviceRole.objects.all(), label='Role (ID)', diff --git a/netbox_topology_views/forms.py b/netbox_topology_views/forms.py index ef941d4..744361a 100644 --- a/netbox_topology_views/forms.py +++ b/netbox_topology_views/forms.py @@ -46,4 +46,3 @@ class DeviceFilterForm(CustomFieldModelFilterForm): ) tag = TagFilterField(model) - diff --git a/netbox_topology_views/static_dev/css/app.scss b/netbox_topology_views/static_dev/css/app.scss index 878c2b0..1b7d663 100644 --- a/netbox_topology_views/static_dev/css/app.scss +++ b/netbox_topology_views/static_dev/css/app.scss @@ -1,3 +1,4 @@ #visgraph { height: 70vh; } + diff --git a/netbox_topology_views/views.py b/netbox_topology_views/views.py index 3a14ef0..064d278 100644 --- a/netbox_topology_views/views.py +++ b/netbox_topology_views/views.py @@ -3,12 +3,16 @@ from django.db.models import Q from django.views.generic import View from django.contrib.auth.mixins import PermissionRequiredMixin from django.conf import settings +from django.http import QueryDict +from django.http import HttpResponseRedirect from .forms import DeviceFilterForm from .filters import DeviceFilterSet + import json from dcim.models import Device, Cable, DeviceRole, DeviceType +from extras.models import Tag def get_topology_data(queryset): nodes = [] @@ -133,7 +137,6 @@ def get_topology_data(queryset): node["color.border"] = "#" + qs_device.device_role.color if "coordinates" in qs_device.custom_field_data: - print(qs_device.custom_field_data) if qs_device.custom_field_data["coordinates"] is not None: cords = qs_device.custom_field_data["coordinates"].split(";") node["x"] = int(cords[0]) @@ -160,6 +163,19 @@ class TopologyHomeView(PermissionRequiredMixin, View): topo_data = None if request.GET: topo_data = get_topology_data(self.queryset) + else: + preselected_device_roles = settings.PLUGINS_CONFIG["netbox_topology_views"]["preselected_device_roles"] + preselected_tags = settings.PLUGINS_CONFIG["netbox_topology_views"]["preselected_tags"] + + q_device_role_id = DeviceRole.objects.filter(name__in=preselected_device_roles).values_list('id', flat=True) + q_tags = Tag.objects.filter(name__in=preselected_tags).values_list('name', flat=True) + + q = QueryDict(mutable=True) + q.setlist('device_role_id', list(q_device_role_id)) + q.setlist('tag', list(q_tags)) + query_string = q.urlencode() + print(query_string) + return HttpResponseRedirect(request.path + "?" + query_string) return render(request, 'netbox_topology_views/index.html' , { 'filter_form': DeviceFilterForm(request.GET, label_suffix=''),