From f4892caa51dea6458893388fe0e74de7c6986ca3 Mon Sep 17 00:00:00 2001 From: Martin Hauser Date: Tue, 13 Jan 2026 18:13:31 +0100 Subject: [PATCH] fix(ipam): Prevent reassignment of OOB IPs Disable reassignment of IP addresses designated as primary or OOB for parent objects. Adds validation to block changes when an IP is marked as the OOB IP. Fixes #21050 --- netbox/ipam/forms/model_forms.py | 4 ++-- netbox/ipam/models/ip.py | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) 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({