From 98272c29f7b54983258ff9474545fc6ddc9a6a92 Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Zaroubin Date: Wed, 19 Mar 2025 02:00:36 +0000 Subject: [PATCH 1/4] Add fhrpgroup to IPAddressImportForm --- netbox/ipam/forms/bulk_import.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/netbox/ipam/forms/bulk_import.py b/netbox/ipam/forms/bulk_import.py index a672fd64144..ae417862768 100644 --- a/netbox/ipam/forms/bulk_import.py +++ b/netbox/ipam/forms/bulk_import.py @@ -327,6 +327,13 @@ class IPAddressImportForm(NetBoxModelImportForm): to_field_name='name', help_text=_('Assigned interface') ) + fhrpgroup = CSVModelChoiceField( + label=_('FHRP Group (ID)'), + queryset=FHRPGroup.objects.all(), + required=False, + to_field_name='group_id', + help_text=_('Assigned FHRP Group ID') + ) is_primary = forms.BooleanField( label=_('Is primary'), help_text=_('Make this the primary IP for the assigned device'), @@ -341,8 +348,8 @@ class IPAddressImportForm(NetBoxModelImportForm): class Meta: model = IPAddress fields = [ - 'address', 'vrf', 'tenant', 'status', 'role', 'device', 'virtual_machine', 'interface', 'is_primary', - 'is_oob', 'dns_name', 'description', 'comments', 'tags', + 'address', 'vrf', 'tenant', 'status', 'role', 'device', 'virtual_machine', 'interface', 'fhrpgroup', + 'is_primary', 'is_oob', 'dns_name', 'description', 'comments', 'tags', ] def __init__(self, data=None, *args, **kwargs): @@ -398,6 +405,8 @@ def save(self, *args, **kwargs): # Set interface assignment if self.cleaned_data.get('interface'): self.instance.assigned_object = self.cleaned_data['interface'] + if self.cleaned_data.get('fhrpgroup'): + self.instance.assigned_object = self.cleaned_data['fhrpgroup'] ipaddress = super().save(*args, **kwargs) From a1f6523bf1973d10f039ebcf399e03a0df242032 Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Zaroubin Date: Wed, 19 Mar 2025 02:11:46 +0000 Subject: [PATCH 2/4] Change fhrpgroup accessor to name --- netbox/ipam/forms/bulk_import.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/netbox/ipam/forms/bulk_import.py b/netbox/ipam/forms/bulk_import.py index ae417862768..44943dc36e1 100644 --- a/netbox/ipam/forms/bulk_import.py +++ b/netbox/ipam/forms/bulk_import.py @@ -328,11 +328,11 @@ class IPAddressImportForm(NetBoxModelImportForm): help_text=_('Assigned interface') ) fhrpgroup = CSVModelChoiceField( - label=_('FHRP Group (ID)'), + label=_('FHRP Group'), queryset=FHRPGroup.objects.all(), required=False, - to_field_name='group_id', - help_text=_('Assigned FHRP Group ID') + to_field_name='name', + help_text=_('Assigned FHRP Group name') ) is_primary = forms.BooleanField( label=_('Is primary'), From b16f60b7f660d019ac97b7b30d355ad041f9a87e Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Zaroubin Date: Fri, 21 Mar 2025 19:26:39 +0000 Subject: [PATCH 3/4] rename fhrpgroup to fhrp_group --- netbox/ipam/forms/bulk_import.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/netbox/ipam/forms/bulk_import.py b/netbox/ipam/forms/bulk_import.py index 44943dc36e1..0fbcd414b77 100644 --- a/netbox/ipam/forms/bulk_import.py +++ b/netbox/ipam/forms/bulk_import.py @@ -327,7 +327,7 @@ class IPAddressImportForm(NetBoxModelImportForm): to_field_name='name', help_text=_('Assigned interface') ) - fhrpgroup = CSVModelChoiceField( + fhrp_group = CSVModelChoiceField( label=_('FHRP Group'), queryset=FHRPGroup.objects.all(), required=False, @@ -348,7 +348,7 @@ class IPAddressImportForm(NetBoxModelImportForm): class Meta: model = IPAddress fields = [ - 'address', 'vrf', 'tenant', 'status', 'role', 'device', 'virtual_machine', 'interface', 'fhrpgroup', + 'address', 'vrf', 'tenant', 'status', 'role', 'device', 'virtual_machine', 'interface', 'fhrp_group', 'is_primary', 'is_oob', 'dns_name', 'description', 'comments', 'tags', ] @@ -405,8 +405,8 @@ def save(self, *args, **kwargs): # Set interface assignment if self.cleaned_data.get('interface'): self.instance.assigned_object = self.cleaned_data['interface'] - if self.cleaned_data.get('fhrpgroup'): - self.instance.assigned_object = self.cleaned_data['fhrpgroup'] + if self.cleaned_data.get('fhrp_group'): + self.instance.assigned_object = self.cleaned_data['fhrp_group'] ipaddress = super().save(*args, **kwargs) From 97b61e43c371e874d4142d07e5594735a219eeea Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Zaroubin Date: Fri, 21 Mar 2025 19:50:23 +0000 Subject: [PATCH 4/4] Add fhrp_group to IPAddressTestCase csv_data --- netbox/ipam/tests/test_views.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/netbox/ipam/tests/test_views.py b/netbox/ipam/tests/test_views.py index d7d367bb720..345f39a516d 100644 --- a/netbox/ipam/tests/test_views.py +++ b/netbox/ipam/tests/test_views.py @@ -666,6 +666,24 @@ def setUpTestData(cls): tags = create_tags('Alpha', 'Bravo', 'Charlie') + fhrp_groups = ( + FHRPGroup( + name='FHRP Group 1', + protocol=FHRPGroupProtocolChoices.PROTOCOL_HSRP, + group_id=10 + ), + FHRPGroup( + name='FHRP Group 2', + protocol=FHRPGroupProtocolChoices.PROTOCOL_HSRP, + group_id=20 + ), + FHRPGroup( + name='FHRP Group 3', + protocol=FHRPGroupProtocolChoices.PROTOCOL_HSRP, + group_id=30 + ), + ) + FHRPGroup.objects.bulk_create(fhrp_groups) cls.form_data = { 'vrf': vrfs[1].pk, 'address': IPNetwork('192.0.2.99/24'), @@ -679,10 +697,10 @@ def setUpTestData(cls): } cls.csv_data = ( - "vrf,address,status", - "VRF 1,192.0.2.4/24,active", - "VRF 1,192.0.2.5/24,active", - "VRF 1,192.0.2.6/24,active", + "vrf,address,status,fhrp_group", + "VRF 1,192.0.2.4/24,active,FHRP Group 1", + "VRF 1,192.0.2.5/24,active,FHRP Group 2", + "VRF 1,192.0.2.6/24,active,FHRP Group 3", ) cls.csv_update_data = (