77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
from dcim.choices import InterfaceTypeChoices
|
|
from django.db import models
|
|
from django.urls import reverse
|
|
from netbox.models import NetBoxModel
|
|
|
|
|
|
class LibreNMSSettings(models.Model):
|
|
"""
|
|
Model to store LibreNMS plugin settings, specifically which server to use
|
|
when multiple servers are configured.
|
|
"""
|
|
|
|
selected_server = models.CharField(
|
|
max_length=100,
|
|
default="default",
|
|
help_text="The key of the selected LibreNMS server from configuration",
|
|
)
|
|
|
|
vc_member_name_pattern = models.CharField(
|
|
max_length=100,
|
|
default="-M{position}",
|
|
help_text="Pattern for naming virtual chassis member devices. "
|
|
"Available placeholders: {position}, {serial}. "
|
|
"Example: '-M{position}' results in 'switch01-M2'",
|
|
)
|
|
|
|
use_sysname_default = models.BooleanField(
|
|
default=True,
|
|
help_text="Use SNMP sysName instead of LibreNMS hostname when importing devices",
|
|
)
|
|
|
|
strip_domain_default = models.BooleanField(
|
|
default=False,
|
|
help_text="Remove domain suffix from device names during import",
|
|
)
|
|
|
|
class Meta:
|
|
"""Meta options for LibreNMSSettings."""
|
|
|
|
verbose_name = "LibreNMS Settings"
|
|
verbose_name_plural = "LibreNMS Settings"
|
|
|
|
def get_absolute_url(self):
|
|
"""Return the URL for the settings page."""
|
|
return reverse("plugins:netbox_librenms_plugin:settings")
|
|
|
|
def __str__(self):
|
|
return f"LibreNMS Settings - Server: {self.selected_server}"
|
|
|
|
|
|
class InterfaceTypeMapping(NetBoxModel):
|
|
"""Map LibreNMS interface types and speeds to NetBox interface types."""
|
|
|
|
librenms_type = models.CharField(max_length=100)
|
|
netbox_type = models.CharField(
|
|
max_length=50,
|
|
choices=InterfaceTypeChoices,
|
|
default=InterfaceTypeChoices.TYPE_OTHER,
|
|
)
|
|
librenms_speed = models.BigIntegerField(null=True, blank=True)
|
|
description = models.TextField(
|
|
blank=True,
|
|
help_text="Optional description or notes about this interface type mapping",
|
|
)
|
|
|
|
def get_absolute_url(self):
|
|
"""Return the URL for this mapping's detail page."""
|
|
return reverse("plugins:netbox_librenms_plugin:interfacetypemapping_detail", args=[self.pk])
|
|
|
|
class Meta:
|
|
"""Meta options for InterfaceTypeMapping."""
|
|
|
|
unique_together = ["librenms_type", "librenms_speed"]
|
|
|
|
def __str__(self):
|
|
return f"{self.librenms_type} + {self.librenms_speed} -> {self.netbox_type}"
|