diff --git a/netbox/ipam/forms/model_forms.py b/netbox/ipam/forms/model_forms.py index 645c3f72e..c1ad60ff5 100644 --- a/netbox/ipam/forms/model_forms.py +++ b/netbox/ipam/forms/model_forms.py @@ -372,8 +372,8 @@ class IPAddressForm(TenancyForm, PrimaryModelForm): 'virtual_machine_id': instance.assigned_object.virtual_machine.pk, }) - # Disable object assignment fields if the IP address is designated as primary - if self.initial.get('primary_for_parent'): + # Disable object assignment fields if the IP address is designated as primary or OOB + if self.initial.get('primary_for_parent') or self.initial.get('oob_for_parent'): self.fields['interface'].disabled = True self.fields['vminterface'].disabled = True self.fields['fhrpgroup'].disabled = True diff --git a/netbox/ipam/models/ip.py b/netbox/ipam/models/ip.py index 92fff195f..370ccb2b2 100644 --- a/netbox/ipam/models/ip.py +++ b/netbox/ipam/models/ip.py @@ -940,6 +940,13 @@ class IPAddress(ContactsMixin, PrimaryModel): _("Cannot reassign IP address while it is designated as the primary IP for the parent object") ) + # can't use is_oob_ip as self.assigned_object might be changed + if hasattr(original_parent, 'oob_ip') and original_parent.oob_ip_id == self.pk: + if parent != original_parent: + raise ValidationError( + _("Cannot reassign IP address while it is designated as the OOB IP for the parent object") + ) + # Validate IP status selection if self.status == IPAddressStatusChoices.STATUS_SLAAC and self.family != 6: raise ValidationError({