1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

101 lines
2.8 KiB
Python
Raw Normal View History

2021-11-01 16:14:44 -04:00
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
from django.contrib.contenttypes.models import ContentType
from django.core.validators import MaxValueValidator, MinValueValidator
2021-11-01 16:14:44 -04:00
from django.db import models
from django.urls import reverse
from extras.utils import extras_features
from netbox.models import ChangeLoggedModel, PrimaryModel
from ipam.choices import *
from ipam.constants import *
2021-11-01 16:14:44 -04:00
from utilities.querysets import RestrictedQuerySet
__all__ = (
'FHRPGroup',
'FHRPGroupAssignment',
)
@extras_features('custom_fields', 'custom_links', 'export_templates', 'tags', 'webhooks')
class FHRPGroup(PrimaryModel):
"""
A grouping of next hope resolution protocol (FHRP) peers. (For instance, VRRP or HSRP.)
"""
group_id = models.PositiveSmallIntegerField(
verbose_name='Group ID'
)
protocol = models.CharField(
max_length=50,
choices=FHRPGroupProtocolChoices
)
auth_type = models.CharField(
max_length=50,
choices=FHRPGroupAuthTypeChoices,
blank=True,
verbose_name='Authentication type'
)
auth_key = models.CharField(
max_length=255,
blank=True,
verbose_name='Authentication key'
)
description = models.CharField(
max_length=200,
blank=True
)
ip_addresses = GenericRelation(
to='ipam.IPAddress',
content_type_field='assigned_object_type',
object_id_field='assigned_object_id',
related_query_name='nhrp_group'
)
objects = RestrictedQuerySet.as_manager()
clone_fields = [
'protocol', 'auth_type', 'auth_key'
]
class Meta:
ordering = ['protocol', 'group_id', 'pk']
verbose_name = 'FHRP group'
def __str__(self):
return f'{self.get_protocol_display()} group {self.group_id}'
def get_absolute_url(self):
return reverse('ipam:fhrpgroup', args=[self.pk])
@extras_features('webhooks')
class FHRPGroupAssignment(ChangeLoggedModel):
content_type = models.ForeignKey(
to=ContentType,
on_delete=models.CASCADE
)
object_id = models.PositiveIntegerField()
object = GenericForeignKey(
ct_field='content_type',
fk_field='object_id'
)
group = models.ForeignKey(
to='ipam.FHRPGroup',
on_delete=models.CASCADE
)
priority = models.PositiveSmallIntegerField(
validators=(
MinValueValidator(FHRPGROUPASSIGNMENT_PRIORITY_MIN),
MaxValueValidator(FHRPGROUPASSIGNMENT_PRIORITY_MAX)
)
2021-11-01 16:14:44 -04:00
)
objects = RestrictedQuerySet.as_manager()
class Meta:
ordering = ('priority', 'pk')
unique_together = ('content_type', 'object_id', 'group')
verbose_name = 'FHRP group assignment'
2021-11-02 14:08:36 -04:00
def __str__(self):
return f'{self.object}: {self.group} ({self.priority})'