Moved VC master designation to membership model
This commit is contained in:
@@ -1494,21 +1494,10 @@ class VirtualChassis(models.Model):
|
||||
max_length=30,
|
||||
blank=True
|
||||
)
|
||||
master = models.OneToOneField(
|
||||
to='Device',
|
||||
on_delete=models.PROTECT,
|
||||
related_name='vc_master_for'
|
||||
)
|
||||
|
||||
def get_absolute_url(self):
|
||||
return "{}?virtual_chassis={}".format(reverse('dcim:device_list'), self.pk)
|
||||
|
||||
def clean(self):
|
||||
|
||||
# Check that the master Device is not already assigned to a VirtualChassis.
|
||||
if VCMembership.objects.filter(device=self.master).exclude(virtual_chassis=self):
|
||||
raise ValidationError("The master device is already assigned to a different virtual chassis.")
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class VCMembership(models.Model):
|
||||
@@ -1525,12 +1514,12 @@ class VCMembership(models.Model):
|
||||
on_delete=models.CASCADE,
|
||||
related_name='vc_membership'
|
||||
)
|
||||
master_enabled = models.BooleanField(
|
||||
default=True
|
||||
)
|
||||
position = models.PositiveSmallIntegerField(
|
||||
validators=[MaxValueValidator(255)]
|
||||
)
|
||||
is_master = models.BooleanField(
|
||||
default=False
|
||||
)
|
||||
priority = models.PositiveSmallIntegerField(
|
||||
blank=True,
|
||||
null=True,
|
||||
@@ -1541,3 +1530,14 @@ class VCMembership(models.Model):
|
||||
ordering = ['virtual_chassis', 'position']
|
||||
unique_together = ['virtual_chassis', 'position']
|
||||
verbose_name = 'VC membership'
|
||||
|
||||
def clean(self):
|
||||
|
||||
# Check for master conflicts
|
||||
if self.virtual_chassis and self.is_master:
|
||||
master_conflict = VCMembership.objects.filter(virtual_chassis=self.virtual_chassis).first()
|
||||
if master_conflict:
|
||||
raise ValidationError({
|
||||
'virtual_chassis': "{} has already been designated as the master for this virtual chassis. It must "
|
||||
"be demoted before a new master can be assigned.".format(master_conflict.device)
|
||||
})
|
||||
|
Reference in New Issue
Block a user