Fixes: #18373 - Fix validation of site in Assign Device to Cluster flow (#18375)

* Fix validation of site in Assign Device to Cluster flow

* Validate Location as well as Site scope
This commit is contained in:
bctiemann 2025-01-17 08:35:17 -05:00 committed by Brian Tiemann
parent a0b084615b
commit 00b891000f

View File

@ -1,4 +1,5 @@
from django import forms from django import forms
from django.apps import apps
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -143,17 +144,24 @@ class ClusterAddDevicesForm(forms.Form):
def clean(self): def clean(self):
super().clean() super().clean()
# If the Cluster is assigned to a Site, all Devices must be assigned to that Site. # If the Cluster is assigned to a Site or Location, all Devices must be assigned to that same scope.
if self.cluster.site is not None: if self.cluster.scope is not None:
for device in self.cleaned_data.get('devices', []): for device in self.cleaned_data.get('devices', []):
if device.site != self.cluster.site: for scope_field in ['site', 'location']:
device_scope = getattr(device, scope_field)
if (
self.cluster.scope_type.model_class() == apps.get_model('dcim', scope_field)
and device_scope != self.cluster.scope
):
raise ValidationError({ raise ValidationError({
'devices': _( 'devices': _(
"{device} belongs to a different site ({device_site}) than the cluster ({cluster_site})" "{device} belongs to a different {scope_field} ({device_scope}) than the "
"cluster ({cluster_scope})"
).format( ).format(
device=device, device=device,
device_site=device.site, scope_field=scope_field,
cluster_site=self.cluster.site device_scope=device_scope,
cluster_scope=self.cluster.scope
) )
}) })