- add rack elevation view for one or multiple racks - render front and rear device positions by rack unit - show physical cabling below selected racks - add site, location, rack, and empty-rack filters - add network, leaf, spine, and aggregation switch icons - add “Weitere Ansichten” navigation category
767 lines
25 KiB
Python
767 lines
25 KiB
Python
from cProfile import label
|
|
from django import forms
|
|
from django.conf import settings
|
|
|
|
from django.utils.translation import gettext as _
|
|
|
|
from circuits.models import Circuit
|
|
from dcim.models import Device, Site, SiteGroup, Region, DeviceRole, Location, Rack, Manufacturer, DeviceType, Platform, PowerPanel, PowerFeed
|
|
|
|
from django import forms
|
|
from dcim.choices import DeviceStatusChoices, DeviceAirflowChoices
|
|
from tenancy.models import TenantGroup, Tenant
|
|
from extras.models import ConfigTemplate
|
|
from extras.forms import LocalConfigContextFilterForm
|
|
from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
|
|
from django.conf import settings
|
|
from netbox.forms import NetBoxModelFilterSetForm, NetBoxModelForm, NetBoxModelImportForm
|
|
from utilities.forms.rendering import FieldSet
|
|
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice
|
|
from utilities.forms.fields import (
|
|
TagFilterField,
|
|
DynamicModelMultipleChoiceField
|
|
)
|
|
|
|
from netbox_topology_views.models import IndividualOptions, CoordinateGroup, Coordinate, CircuitCoordinate, PowerPanelCoordinate, PowerFeedCoordinate
|
|
from netbox_topology_views.choices import NodeLabelItems
|
|
|
|
class DeviceFilterForm(
|
|
LocalConfigContextFilterForm,
|
|
TenancyFilterForm,
|
|
ContactModelFilterForm,
|
|
NetBoxModelFilterSetForm
|
|
):
|
|
model = Device
|
|
fieldsets = (
|
|
FieldSet('q', 'filter_id', 'tag'),
|
|
FieldSet(
|
|
'group', 'ignore_cable_type', 'save_coords', 'show_unconnected', 'show_cables', 'show_wireless',
|
|
'show_logical_connections', 'show_single_cable_logical_conns', 'show_neighbors',
|
|
'group_sites', 'group_locations', 'group_racks', 'group_virtualchassis', 'straight_cables',
|
|
'draw_termination_labels', 'draw_cable_labels', 'grid_size', 'node_label_items', name=_("Options")
|
|
),
|
|
FieldSet(
|
|
'show_circuit', 'show_power', name=_("Additional filter-independent types (non-devices)")
|
|
),
|
|
FieldSet('id', name=_("Device")),
|
|
FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_("Location")),
|
|
FieldSet('status', 'role_id', 'airflow', 'serial', 'asset_tag', 'mac_address', name=_("Operation")),
|
|
FieldSet('manufacturer_id', 'device_type_id', 'platform_id', name=_("Hardware")),
|
|
FieldSet('tenant_group_id', 'tenant_id', name=_("Tenant")),
|
|
FieldSet('contact', 'contact_role', 'contact_group', name=_("Contacts")),
|
|
FieldSet(
|
|
'console_ports', 'console_server_ports', 'power_ports', 'power_outlets', 'interfaces', 'pass_through_ports', name=_("Components")
|
|
),
|
|
FieldSet(
|
|
'has_primary_ip', 'has_oob_ip', 'virtual_chassis_member', 'config_template_id', 'local_context_data', name=_("Miscellaneous")
|
|
),
|
|
)
|
|
group = forms.ModelChoiceField(
|
|
queryset=CoordinateGroup.objects.all(),
|
|
required=False,
|
|
label=_('Coordinate group'),
|
|
)
|
|
id = DynamicModelMultipleChoiceField(
|
|
queryset=Device.objects.all(),
|
|
required=False,
|
|
label=_('Device'),
|
|
query_params={
|
|
'location_id': '$location_id',
|
|
'region_id': '$region_id',
|
|
'site_group_id': '$site_group_id',
|
|
'site_id': '$site_id',
|
|
'role_id': '$role_id',
|
|
'contact': '$contact',
|
|
'contact_role': '$contact_role',
|
|
'contact_group': '$contact_group',
|
|
},
|
|
)
|
|
region_id = DynamicModelMultipleChoiceField(
|
|
queryset=Region.objects.all(),
|
|
required=False,
|
|
label=_('Region')
|
|
)
|
|
site_group_id = DynamicModelMultipleChoiceField(
|
|
queryset=SiteGroup.objects.all(),
|
|
required=False,
|
|
label=_('Site Group'),
|
|
)
|
|
site_id = DynamicModelMultipleChoiceField(
|
|
queryset=Site.objects.all(),
|
|
required=False,
|
|
query_params={
|
|
'region_id': '$region_id',
|
|
'group_id': '$site_group_id',
|
|
},
|
|
label=_('Site'),
|
|
)
|
|
location_id = DynamicModelMultipleChoiceField(
|
|
queryset=Location.objects.all(),
|
|
required=False,
|
|
query_params={
|
|
'region_id': '$region_id',
|
|
'site_group_id': '$site_group_id',
|
|
'site_id': '$site_id',
|
|
},
|
|
label=_('Location'),
|
|
)
|
|
rack_id = DynamicModelMultipleChoiceField(
|
|
queryset=Rack.objects.all(),
|
|
required=False,
|
|
query_params={
|
|
'region_id': '$region_id',
|
|
'site_group_id': '$site_group_id',
|
|
'site_id': '$site_id',
|
|
'location_id': '$location_id',
|
|
},
|
|
label=_('Rack'),
|
|
)
|
|
status = forms.MultipleChoiceField(
|
|
choices=DeviceStatusChoices,
|
|
required=False,
|
|
label=_('Device Status')
|
|
)
|
|
role_id = DynamicModelMultipleChoiceField(
|
|
queryset=DeviceRole.objects.all(),
|
|
required=False,
|
|
label=_('Role')
|
|
)
|
|
airflow = forms.MultipleChoiceField(
|
|
label=_('Airflow'),
|
|
choices=add_blank_choice(DeviceAirflowChoices),
|
|
required=False
|
|
)
|
|
serial = forms.CharField(
|
|
label=_('Serial'),
|
|
required=False
|
|
)
|
|
asset_tag = forms.CharField(
|
|
label=_('Asset tag'),
|
|
required=False
|
|
)
|
|
mac_address = forms.CharField(
|
|
required=False,
|
|
label=_('MAC address')
|
|
)
|
|
manufacturer_id = DynamicModelMultipleChoiceField(
|
|
queryset=Manufacturer.objects.all(),
|
|
required=False,
|
|
label=_('Manufacturer')
|
|
)
|
|
device_type_id = DynamicModelMultipleChoiceField(
|
|
queryset=DeviceType.objects.all(),
|
|
required=False,
|
|
query_params={
|
|
'manufacturer_id': '$manufacturer_id'
|
|
},
|
|
label=_('Model')
|
|
)
|
|
platform_id = DynamicModelMultipleChoiceField(
|
|
queryset=Platform.objects.all(),
|
|
required=False,
|
|
null_option='None',
|
|
label=_('Platform')
|
|
)
|
|
console_ports = forms.NullBooleanField(
|
|
required=False,
|
|
label=_('Has console ports'),
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
console_server_ports = forms.NullBooleanField(
|
|
required=False,
|
|
label=_('Has console server ports'),
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
power_ports = forms.NullBooleanField(
|
|
required=False,
|
|
label=_('Has power ports'),
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
power_outlets = forms.NullBooleanField(
|
|
required=False,
|
|
label=_('Has power outlets'),
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
interfaces = forms.NullBooleanField(
|
|
required=False,
|
|
label=_('Has interfaces'),
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
pass_through_ports = forms.NullBooleanField(
|
|
required=False,
|
|
label=_('Has pass-through ports'),
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
config_template_id = DynamicModelMultipleChoiceField(
|
|
queryset=ConfigTemplate.objects.all(),
|
|
required=False,
|
|
label=_('Config template')
|
|
)
|
|
has_primary_ip = forms.NullBooleanField(
|
|
required=False,
|
|
label=_('Has a primary IP'),
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
has_oob_ip = forms.NullBooleanField(
|
|
required=False,
|
|
label=_('Has an OOB IP'),
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
virtual_chassis_member = forms.NullBooleanField(
|
|
required=False,
|
|
label=_('Virtual chassis member'),
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
tag = TagFilterField(model)
|
|
|
|
# options
|
|
ignore_cable_type = forms.MultipleChoiceField(
|
|
label=_('Ignore Termination Types'),
|
|
required=False,
|
|
choices=IndividualOptions.CHOICES
|
|
)
|
|
save_coords = forms.NullBooleanField(
|
|
label=_('Save Coordinates'),
|
|
required=False,
|
|
disabled=(not settings.PLUGINS_CONFIG['netbox_topology_views']['allow_coordinates_saving'] or settings.PLUGINS_CONFIG['netbox_topology_views']['always_save_coordinates']),
|
|
initial=(settings.PLUGINS_CONFIG['netbox_topology_views']['always_save_coordinates']),
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
show_unconnected = forms.NullBooleanField(
|
|
label=_('Show Unconnected'),
|
|
required=False,
|
|
initial=False,
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
|
|
show_cables = forms.NullBooleanField(
|
|
required=False,
|
|
initial=False,
|
|
label=_('Show Cables'),
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
show_wireless = forms.NullBooleanField(
|
|
label =_('Show Wireless Links'), required=False, initial=False,
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
show_logical_connections = forms.NullBooleanField(
|
|
label =_('Show Logical Connections'), required=False, initial=False,
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
show_single_cable_logical_conns = forms.NullBooleanField(
|
|
label =_('Show redundant Cable and Logical Connection'), required=False, initial=False,
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
show_neighbors = forms.NullBooleanField(
|
|
label =_('Show Neighbors'), required=False, initial=False,
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
group_sites = forms.NullBooleanField(
|
|
label =_('Group Sites'), required=False, initial=False,
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
group_locations = forms.NullBooleanField(
|
|
label =_('Group Locations'), required=False, initial=False,
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
group_racks = forms.NullBooleanField(
|
|
label =_('Group Racks'), required=False, initial=False,
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
group_virtualchassis = forms.NullBooleanField(
|
|
label =_('Group Virtual Chassis'), required=False, initial=False,
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
straight_cables = forms.BooleanField(
|
|
label=_('Straight Cables'), required=False, initial=False,
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
draw_termination_labels = forms.BooleanField(
|
|
label=_('Termination Labels'), required=False, initial=False,
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
draw_cable_labels = forms.BooleanField(
|
|
label=_('Cable Labels'), required=False, initial=False,
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
grid_size = forms.IntegerField(
|
|
label=_('Grid Size'),
|
|
required=False,
|
|
initial=0,
|
|
min_value=0,
|
|
max_value=1000,
|
|
help_text=_('Show grid and snap dragged icons to grid. Set to 0 to disable grid and snapping.')
|
|
)
|
|
node_label_items = forms.MultipleChoiceField(
|
|
label=_('Node Label Items'),
|
|
required=False,
|
|
choices=NodeLabelItems
|
|
)
|
|
|
|
# Additional types (non-devices)
|
|
show_circuit = forms.NullBooleanField(
|
|
label=_('Show Circuit Terminations'), required=False, initial=False,
|
|
help_text=_('All Circuits will be displayed. Circuits cannot be filtered.'),
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
show_power = forms.NullBooleanField(
|
|
label=_('Show Power Feeds'), required=False, initial=False,
|
|
help_text=_('All Power Feeds will be displayed. Power Feeds cannot be filtered.'),
|
|
widget=forms.Select(
|
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
|
)
|
|
)
|
|
|
|
|
|
class RackElevationFilterForm(forms.Form):
|
|
"""Compact selector for the rack elevation view."""
|
|
|
|
site_id = DynamicModelMultipleChoiceField(
|
|
queryset=Site.objects.all(), required=False, label=_("Site")
|
|
)
|
|
location_id = DynamicModelMultipleChoiceField(
|
|
queryset=Location.objects.all(), required=False, label=_("Location"),
|
|
query_params={"site_id": "$site_id"},
|
|
)
|
|
rack_id = DynamicModelMultipleChoiceField(
|
|
queryset=Rack.objects.all(), required=False, label=_("Racks"),
|
|
query_params={"site_id": "$site_id", "location_id": "$location_id"},
|
|
help_text=_("Select one or more racks. If empty, all matching racks are shown."),
|
|
)
|
|
include_empty = forms.BooleanField(
|
|
required=False, initial=False, label=_("Include empty racks")
|
|
)
|
|
|
|
|
|
class CoordinateGroupsForm(NetBoxModelForm):
|
|
fieldsets = (
|
|
FieldSet('name', 'description', name=_("Group Details")),
|
|
)
|
|
|
|
class Meta:
|
|
model = CoordinateGroup
|
|
fields = ('name', 'description')
|
|
|
|
class CoordinateGroupsImportForm(NetBoxModelImportForm):
|
|
class Meta:
|
|
model = CoordinateGroup
|
|
fields = ('name', 'description')
|
|
|
|
class CircuitCoordinatesForm(NetBoxModelForm):
|
|
fieldsets = (
|
|
FieldSet('group', 'device', 'x', 'y', name=_("Circuit Coordinate")),
|
|
)
|
|
|
|
class Meta:
|
|
model = CircuitCoordinate
|
|
fields = ('group', 'device', 'x', 'y')
|
|
|
|
class PowerPanelCoordinatesForm(NetBoxModelForm):
|
|
fieldsets = (
|
|
FieldSet('group', 'device', 'x', 'y', name=_("Power Panel")),
|
|
)
|
|
|
|
class Meta:
|
|
model = PowerPanelCoordinate
|
|
fields = ('group', 'device', 'x', 'y')
|
|
|
|
class PowerFeedCoordinatesForm(NetBoxModelForm):
|
|
fieldsets = (
|
|
FieldSet('group', 'device', 'x', 'y', name=_("PowerFeed Coordinate")),
|
|
)
|
|
|
|
class Meta:
|
|
model = PowerFeedCoordinate
|
|
fields = ('group', 'device', 'x', 'y')
|
|
|
|
class CoordinatesForm(NetBoxModelForm):
|
|
fieldsets = (
|
|
FieldSet('group', 'device', 'x', 'y', name=_("Coordinate")),
|
|
)
|
|
|
|
class Meta:
|
|
model = Coordinate
|
|
fields = ('group', 'device', 'x', 'y')
|
|
|
|
class CircuitCoordinatesImportForm(NetBoxModelImportForm):
|
|
class Meta:
|
|
model = CircuitCoordinate
|
|
fields = ('group', 'device', 'x', 'y')
|
|
|
|
class PowerPanelCoordinatesImportForm(NetBoxModelImportForm):
|
|
class Meta:
|
|
model = PowerPanelCoordinate
|
|
fields = ('group', 'device', 'x', 'y')
|
|
|
|
class PowerFeedCoordinatesImportForm(NetBoxModelImportForm):
|
|
class Meta:
|
|
model = PowerFeedCoordinate
|
|
fields = ('group', 'device', 'x', 'y')
|
|
|
|
class CoordinatesImportForm(NetBoxModelImportForm):
|
|
class Meta:
|
|
model = Coordinate
|
|
fields = ('group', 'device', 'x', 'y')
|
|
|
|
class CircuitCoordinatesFilterForm(NetBoxModelFilterSetForm):
|
|
model = CircuitCoordinate
|
|
fieldsets = (
|
|
FieldSet('q', 'filter_id'),
|
|
FieldSet('group', 'device', 'x', 'y', name=_("Circuit Coordinates")),
|
|
)
|
|
|
|
group = forms.ModelMultipleChoiceField(
|
|
queryset=CoordinateGroup.objects.all(),
|
|
required=False
|
|
)
|
|
|
|
device = DynamicModelMultipleChoiceField(
|
|
queryset=Circuit.objects.all(),
|
|
required=False
|
|
)
|
|
|
|
x = forms.IntegerField(
|
|
required=False
|
|
)
|
|
|
|
y = forms.IntegerField(
|
|
required=False
|
|
)
|
|
|
|
class PowerPanelCoordinatesFilterForm(NetBoxModelFilterSetForm):
|
|
model = PowerPanelCoordinate
|
|
fieldsets = (
|
|
FieldSet('q', 'filter_id'),
|
|
FieldSet('group', 'device', 'x', 'y', name=_('PowerPanel Coordinates')),
|
|
)
|
|
|
|
group = forms.ModelMultipleChoiceField(
|
|
queryset=CoordinateGroup.objects.all(),
|
|
required=False
|
|
)
|
|
|
|
device = DynamicModelMultipleChoiceField(
|
|
queryset=PowerPanel.objects.all(),
|
|
required=False
|
|
)
|
|
|
|
x = forms.IntegerField(
|
|
required=False
|
|
)
|
|
|
|
y = forms.IntegerField(
|
|
required=False
|
|
)
|
|
|
|
class PowerFeedCoordinatesFilterForm(NetBoxModelFilterSetForm):
|
|
model = Coordinate
|
|
fieldsets = (
|
|
FieldSet('q', 'filter_id'),
|
|
FieldSet('group', 'device', 'x', 'y', name=_("PowerFeed Coordinates")),
|
|
)
|
|
|
|
group = forms.ModelMultipleChoiceField(
|
|
queryset=CoordinateGroup.objects.all(),
|
|
required=False
|
|
)
|
|
|
|
device = DynamicModelMultipleChoiceField(
|
|
queryset=PowerFeed.objects.all(),
|
|
required=False
|
|
)
|
|
|
|
x = forms.IntegerField(
|
|
required=False
|
|
)
|
|
|
|
y = forms.IntegerField(
|
|
required=False
|
|
)
|
|
|
|
class CoordinatesFilterForm(NetBoxModelFilterSetForm):
|
|
model = Coordinate
|
|
fieldsets = (
|
|
FieldSet('q', 'filter_id'),
|
|
FieldSet('group', 'device', 'x', 'y', name=_("Coordinates")),
|
|
)
|
|
|
|
group = forms.ModelMultipleChoiceField(
|
|
queryset=CoordinateGroup.objects.all(),
|
|
required=False
|
|
)
|
|
|
|
device = DynamicModelMultipleChoiceField(
|
|
queryset=Device.objects.all(),
|
|
required=False
|
|
)
|
|
|
|
x = forms.IntegerField(
|
|
required=False
|
|
)
|
|
|
|
y = forms.IntegerField(
|
|
required=False
|
|
)
|
|
|
|
class IndividualOptionsForm(NetBoxModelForm):
|
|
fieldsets = (
|
|
FieldSet
|
|
(
|
|
'ignore_cable_type',
|
|
'preselected_device_roles',
|
|
'preselected_tags',
|
|
'save_coords',
|
|
'show_unconnected',
|
|
'show_cables',
|
|
'show_wireless',
|
|
'show_logical_connections',
|
|
'show_single_cable_logical_conns',
|
|
'show_neighbors',
|
|
'group_sites',
|
|
'group_locations',
|
|
'group_racks',
|
|
'group_virtualchassis',
|
|
'draw_default_layout',
|
|
'straight_cables',
|
|
'draw_termination_labels',
|
|
'draw_cable_labels',
|
|
'grid_size',
|
|
'node_label_items',
|
|
),
|
|
FieldSet
|
|
(
|
|
'show_circuit',
|
|
'show_power',
|
|
name=_("Additional filter-independent types (non-devices)")
|
|
),
|
|
)
|
|
|
|
user_id = forms.CharField(widget=forms.HiddenInput())
|
|
|
|
ignore_cable_type = forms.MultipleChoiceField(
|
|
label=_('Ignore Termination Types'),
|
|
required=False,
|
|
choices=IndividualOptions.CHOICES,
|
|
help_text=_('Choose Termination Types that you want to be ignored. '
|
|
'If any ignored Termination Type is part of a connection, the '
|
|
'cable is not displayed.')
|
|
)
|
|
preselected_device_roles = DynamicModelMultipleChoiceField(
|
|
label=_('Preselected Device Role'),
|
|
queryset=DeviceRole.objects.all(),
|
|
required=False,
|
|
help_text=_('Select Device Roles that you want to have '
|
|
'preselected in the filter tab.')
|
|
)
|
|
preselected_tags = forms.ModelMultipleChoiceField(
|
|
label=_('Preselected Tags'),
|
|
queryset=Device.tags.all(),
|
|
required=False,
|
|
help_text=_('Select Tags that you want to have '
|
|
'preselected in the filter tab.')
|
|
)
|
|
save_coords = forms.BooleanField(
|
|
label=_('Save Coordinates'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Coordinates of nodes will be saved if dragged to a different '
|
|
'position. This option depends on parameters set in the config file. '
|
|
'It has no effect if \'allow_coordinates_saving\' has not been set or '
|
|
' \'always_save_coordinates\' has been set.')
|
|
)
|
|
show_unconnected = forms.BooleanField(
|
|
label=_('Show Unconnected'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Draws devices that have no connections or for which no '
|
|
'connection is displayed. This option depends on other parameters '
|
|
'like \'Show Cables\' and \'Show Logical Connections\'.')
|
|
)
|
|
show_cables = forms.BooleanField(
|
|
label =_('Show Cables'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Displays connections between interfaces that are connected '
|
|
'with one or more cables. These connections are displayed as solid '
|
|
'lines in the color of the cable.')
|
|
)
|
|
show_wireless = forms.BooleanField(
|
|
label =_('Show Wireless Links'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Displays wireless connections. These connections are '
|
|
'displayed as blue dotted lines.')
|
|
)
|
|
show_logical_connections = forms.BooleanField(
|
|
label =_('Show Logical Connections'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Displays connections between devices that are not '
|
|
'directly connected (e.g. via patch panels). These connections '
|
|
'are displayed as yellow dotted lines.')
|
|
)
|
|
show_single_cable_logical_conns = forms.BooleanField(
|
|
label = ('Show redundant Cable and Logical Connection'),
|
|
required = False,
|
|
initial=False,
|
|
help_text=_('Shows a logical connection (in addition to a cable), '
|
|
'even if a cable is directly connected. Leaving this option '
|
|
'disabled prevents that redundant display. This option only '
|
|
'has an effect if \'Show Logical Connections\' is activated.')
|
|
)
|
|
show_neighbors = forms.BooleanField(
|
|
label =_('Show Neighbors'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Adds neighbors to the filter result set automatically. '
|
|
'Link peers will be added if \'Show Cables\' is ticked, far-end '
|
|
'terminations will be added if \'Show Logical Connections\' is ticked.')
|
|
)
|
|
group_sites = forms.BooleanField(
|
|
label =_('Group Sites'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Draws a rectangle around Devices that belong to the '
|
|
'same site.')
|
|
)
|
|
group_locations = forms.BooleanField(
|
|
label =_('Group Locations'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Draws a rectangle around Devices that belong to the '
|
|
'same location.')
|
|
)
|
|
group_racks = forms.BooleanField(
|
|
label =_('Group Racks'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Draws a rectangle around Devices that belong to the '
|
|
'same rack.')
|
|
)
|
|
group_virtualchassis = forms.BooleanField(
|
|
label =_('Group Virtual Chassis'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Draws a rectangle around Devices that belong to the '
|
|
'same virtual chassis.')
|
|
)
|
|
draw_default_layout = forms.BooleanField(
|
|
label = ('Draw Default Layout'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Enable this option if you want to draw the topology on '
|
|
'the initial load (when you go to the topology plugin page).')
|
|
)
|
|
straight_cables = forms.BooleanField(
|
|
label=('Use Straight Cables'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Enable this option if you want to draw cables as straight lines '
|
|
'instead of curves.')
|
|
)
|
|
draw_termination_labels = forms.BooleanField(
|
|
label=('Termination Labels'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Enable this option if you want to draw a label on each '
|
|
'cable end.')
|
|
)
|
|
draw_cable_labels = forms.BooleanField(
|
|
label=('Cable Labels'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Enable this option if you want to draw a cable labels.')
|
|
)
|
|
grid_size = forms.IntegerField(
|
|
label=_('Grid Size'),
|
|
required=True,
|
|
initial=0,
|
|
min_value=0,
|
|
max_value=1000,
|
|
help_text=_('Default grid value. Set to 0 to disable grid. '
|
|
'Integers between 0 and 1000 are allowed. Snap to grid will be '
|
|
'automatically enabled for values > 0.')
|
|
)
|
|
node_label_items = forms.MultipleChoiceField(
|
|
label=_('Node Label Items'),
|
|
required=False,
|
|
choices=NodeLabelItems,
|
|
help_text=_('Choose Label Items that you want to be displayed.')
|
|
)
|
|
show_circuit = forms.BooleanField(
|
|
label=_('Show Circuit Terminations'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Displays connections between circuit terminations. '
|
|
'These connections are displayed as blue dashed lines. '
|
|
'Be aware that Circuits cannot be filtered.')
|
|
)
|
|
show_power = forms.BooleanField(
|
|
label=_('Show Power Feeds'),
|
|
required=False,
|
|
initial=False,
|
|
help_text=_('Displays connections between power outlets and power '
|
|
'ports. These connections are displayed as solid lines in the '
|
|
'color of the cable. This option depends on \'Show Cables\'. '
|
|
'Be aware that Power Feeds cannot be filtered.')
|
|
)
|
|
|
|
class Meta:
|
|
model = IndividualOptions
|
|
fields = [
|
|
'user_id', 'ignore_cable_type', 'preselected_device_roles', 'preselected_tags',
|
|
'save_coords', 'show_unconnected', 'show_cables', 'show_wireless',
|
|
'show_logical_connections', 'show_single_cable_logical_conns', 'show_neighbors',
|
|
'group_sites', 'group_locations', 'group_racks', 'group_virtualchassis',
|
|
'draw_default_layout', 'straight_cables', 'draw_termination_labels', 'draw_cable_labels',
|
|
'grid_size', 'node_label_items', 'show_circuit', 'show_power'
|
|
]
|