| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
- from django.contrib.contenttypes.models import ContentType
- 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 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(
- blank=True,
- null=True
- )
- objects = RestrictedQuerySet.as_manager()
- class Meta:
- ordering = ('priority', 'pk')
- unique_together = ('content_type', 'object_id', 'group')
- verbose_name = 'FHRP group assignment'
|