first commit
This commit is contained in:
76
netbox_librenms_plugin/models.py
Normal file
76
netbox_librenms_plugin/models.py
Normal file
@@ -0,0 +1,76 @@
|
||||
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}"
|
||||
Reference in New Issue
Block a user