Prechádzať zdrojové kódy

Rename FHRPGroupAssignment object to interface

jeremystretch 4 rokov pred
rodič
commit
131e433880

+ 3 - 3
netbox/dcim/models/device_components.py

@@ -601,9 +601,9 @@ class Interface(ComponentModel, BaseInterface, LinkTermination, PathEndpoint):
     )
     fhrp_group_assignments = GenericRelation(
         to='ipam.FHRPGroupAssignment',
-        content_type_field='content_type',
-        object_id_field='object_id',
-        related_query_name='interface'
+        content_type_field='interface_type',
+        object_id_field='interface_id',
+        related_query_name='+'
     )
 
     clone_fields = ['device', 'parent', 'bridge', 'lag', 'type', 'mgmt_only']

+ 8 - 7
netbox/ipam/api/serializers.py

@@ -110,24 +110,25 @@ class FHRPGroupSerializer(PrimaryModelSerializer):
 
 class FHRPGroupAssignmentSerializer(PrimaryModelSerializer):
     url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:contactassignment-detail')
-    content_type = ContentTypeField(
+    interface_type = ContentTypeField(
         queryset=ContentType.objects.all()
     )
-    object = serializers.SerializerMethodField(read_only=True)
+    interface = serializers.SerializerMethodField(read_only=True)
 
     class Meta:
         model = FHRPGroupAssignment
         fields = [
-            'id', 'url', 'display', 'content_type', 'object_id', 'object', 'priority', 'created', 'last_updated',
+            'id', 'url', 'display', 'interface_type', 'interface_id', 'interface', 'priority', 'created',
+            'last_updated',
         ]
 
     @swagger_serializer_method(serializer_or_field=serializers.DictField)
-    def get_object(self, obj):
-        if obj.object is None:
+    def get_interface(self, obj):
+        if obj.interface is None:
             return None
-        serializer = get_serializer_for_model(obj.object, prefix='Nested')
+        serializer = get_serializer_for_model(obj.interface, prefix='Nested')
         context = {'request': self.context['request']}
-        return serializer(obj.object, context=context).data
+        return serializer(obj.interface, context=context).data
 
 
 #

+ 1 - 1
netbox/ipam/api/views.py

@@ -130,7 +130,7 @@ class FHRPGroupViewSet(CustomFieldModelViewSet):
 
 
 class FHRPGroupAssignmentViewSet(CustomFieldModelViewSet):
-    queryset = FHRPGroupAssignment.objects.prefetch_related('group', 'object')
+    queryset = FHRPGroupAssignment.objects.prefetch_related('group', 'interface')
     serializer_class = serializers.FHRPGroupAssignmentSerializer
     filterset_class = filtersets.FHRPGroupAssignmentFilterSet
 

+ 6 - 2
netbox/ipam/filtersets.py

@@ -663,11 +663,15 @@ class FHRPGroupFilterSet(PrimaryModelFilterSet):
 
 
 class FHRPGroupAssignmentFilterSet(ChangeLoggedModelFilterSet):
-    content_type = ContentTypeFilter()
+    interface_type = ContentTypeFilter()
+    group_id = django_filters.ModelMultipleChoiceFilter(
+        queryset=FHRPGroup.objects.all(),
+        label='Group (ID)',
+    )
 
     class Meta:
         model = FHRPGroupAssignment
-        fields = ['id', 'content_type_id', 'priority']
+        fields = ['id', 'group_id', 'interface_type', 'interface_id', 'priority']
 
 
 class VLANGroupFilterSet(OrganizationalModelFilterSet):

+ 1 - 1
netbox/ipam/forms/models.py

@@ -543,7 +543,7 @@ class FHRPGroupAssignmentForm(BootstrapMixin, forms.ModelForm):
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
 
-        ipaddresses = self.instance.object.ip_addresses.all()
+        ipaddresses = self.instance.interface.ip_addresses.all()
         for ipaddress in ipaddresses:
             self.fields['group'].widget.add_query_param('related_ip', ipaddress.pk)
 

+ 4 - 4
netbox/ipam/migrations/0052_fhrpgroup.py

@@ -8,8 +8,8 @@ import taggit.managers
 class Migration(migrations.Migration):
 
     dependencies = [
-        ('extras', '0064_configrevision'),
         ('contenttypes', '0002_remove_content_type_name'),
+        ('extras', '0064_configrevision'),
         ('ipam', '0051_extend_tag_support'),
     ]
 
@@ -44,15 +44,15 @@ class Migration(migrations.Migration):
                 ('created', models.DateField(auto_now_add=True, null=True)),
                 ('last_updated', models.DateTimeField(auto_now=True, null=True)),
                 ('id', models.BigAutoField(primary_key=True, serialize=False)),
-                ('object_id', models.PositiveIntegerField()),
+                ('interface_id', models.PositiveIntegerField()),
                 ('priority', models.PositiveSmallIntegerField(validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(255)])),
-                ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')),
                 ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ipam.fhrpgroup')),
+                ('interface_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')),
             ],
             options={
                 'verbose_name': 'FHRP group assignment',
                 'ordering': ('priority', 'pk'),
-                'unique_together': {('content_type', 'object_id', 'group')},
+                'unique_together': {('interface_type', 'interface_id', 'group')},
             },
         ),
     ]

+ 7 - 7
netbox/ipam/models/fhrp.py

@@ -69,14 +69,14 @@ class FHRPGroup(PrimaryModel):
 
 @extras_features('webhooks')
 class FHRPGroupAssignment(ChangeLoggedModel):
-    content_type = models.ForeignKey(
+    interface_type = models.ForeignKey(
         to=ContentType,
         on_delete=models.CASCADE
     )
-    object_id = models.PositiveIntegerField()
-    object = GenericForeignKey(
-        ct_field='content_type',
-        fk_field='object_id'
+    interface_id = models.PositiveIntegerField()
+    interface = GenericForeignKey(
+        ct_field='interface_type',
+        fk_field='interface_id'
     )
     group = models.ForeignKey(
         to='ipam.FHRPGroup',
@@ -93,8 +93,8 @@ class FHRPGroupAssignment(ChangeLoggedModel):
 
     class Meta:
         ordering = ('priority', 'pk')
-        unique_together = ('content_type', 'object_id', 'group')
+        unique_together = ('interface_type', 'interface_id', 'group')
         verbose_name = 'FHRP group assignment'
 
     def __str__(self):
-        return f'{self.object}: {self.group} ({self.priority})'
+        return f'{self.interface}: {self.group} ({self.priority})'

+ 6 - 6
netbox/ipam/tables/fhrp.py

@@ -27,8 +27,8 @@ class FHRPGroupTable(BaseTable):
         orderable=False,
         verbose_name='IP Addresses'
     )
-    member_count = tables.Column(
-        verbose_name='Members'
+    interface_count = tables.Column(
+        verbose_name='Interfaces'
     )
     tags = TagColumn(
         url_name='ipam:fhrpgroup_list'
@@ -37,10 +37,10 @@ class FHRPGroupTable(BaseTable):
     class Meta(BaseTable.Meta):
         model = FHRPGroup
         fields = (
-            'pk', 'group_id', 'protocol', 'auth_type', 'auth_key', 'description', 'ip_addresses', 'member_count',
+            'pk', 'group_id', 'protocol', 'auth_type', 'auth_key', 'description', 'ip_addresses', 'interface_count',
             'tags',
         )
-        default_columns = ('pk', 'group_id', 'protocol', 'auth_type', 'description', 'ip_addresses', 'member_count')
+        default_columns = ('pk', 'group_id', 'protocol', 'auth_type', 'description', 'ip_addresses', 'interface_count')
 
 
 class FHRPGroupAssignmentTable(BaseTable):
@@ -51,7 +51,7 @@ class FHRPGroupAssignmentTable(BaseTable):
         orderable=False,
         verbose_name='Parent'
     )
-    object = tables.Column(
+    interface = tables.Column(
         linkify=True,
         orderable=False
     )
@@ -65,4 +65,4 @@ class FHRPGroupAssignmentTable(BaseTable):
 
     class Meta(BaseTable.Meta):
         model = FHRPGroupAssignment
-        fields = ('pk', 'group', 'object_parent', 'object', 'priority')
+        fields = ('pk', 'group', 'object_parent', 'interface', 'priority')

+ 5 - 5
netbox/ipam/views.py

@@ -914,24 +914,24 @@ class FHRPGroupAssignmentEditView(generic.ObjectEditView):
 
     def alter_obj(self, instance, request, args, kwargs):
         if not instance.pk:
-            # Assign the object based on URL kwargs
+            # Assign the interface based on URL kwargs
             try:
-                app_label, model = request.GET.get('content_type').split('.')
+                app_label, model = request.GET.get('interface_type').split('.')
             except (AttributeError, ValueError):
                 raise Http404("Content type not specified")
             content_type = get_object_or_404(ContentType, app_label=app_label, model=model)
-            instance.object = get_object_or_404(content_type.model_class(), pk=request.GET.get('object_id'))
+            instance.interface = get_object_or_404(content_type.model_class(), pk=request.GET.get('interface_id'))
         return instance
 
     def get_return_url(self, request, obj=None):
-        return obj.object.get_absolute_url() if obj else super().get_return_url(request)
+        return obj.interface.get_absolute_url() if obj else super().get_return_url(request)
 
 
 class FHRPGroupAssignmentDeleteView(generic.ObjectDeleteView):
     queryset = FHRPGroupAssignment.objects.all()
 
     def get_return_url(self, request, obj=None):
-        return obj.object.get_absolute_url() if obj else super().get_return_url(request)
+        return obj.interface.get_absolute_url() if obj else super().get_return_url(request)
 
 
 #

+ 1 - 1
netbox/templates/dcim/interface.html

@@ -459,7 +459,7 @@
                 </div>
                 {% if perms.ipam.add_ipaddress %}
                     <div class="card-footer text-end noprint">
-                        <a href="{% url 'ipam:ipaddress_add' %}?device={{ object.device.pk }}&interface={{ object.pk }}" class="btn btn-sm btn-primary">
+                        <a href="{% url 'ipam:ipaddress_add' %}?device={{ object.device.pk }}&interface={{ object.pk }}&return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-primary">
                             <span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add IP Address
                         </a>
                     </div>

+ 1 - 1
netbox/templates/ipam/fhrpgroupassignment_edit.html

@@ -9,7 +9,7 @@
     <div class="row mb-3">
         <label class="col-sm-3 col-form-label text-lg-end">Interface</label>
         <div class="col">
-            <input class="form-control" value="{{ form.instance.object }}" disabled />
+            <input class="form-control" value="{{ form.instance.interface }}" disabled />
         </div>
     </div>
     {% render_field form.group %}

+ 7 - 3
netbox/templates/ipam/inc/panels/fhrp_groups.html

@@ -7,6 +7,7 @@
       <thead>
         <tr>
           <th>Group</th>
+          <th>Protocol</th>
           <th>Virtual IPs</th>
           <th>Priority</th>
         </tr>
@@ -15,7 +16,10 @@
         {% for assignment in object.fhrp_group_assignments.all %}
           <tr>
             <td>
-              <a href="{{ assignment.group.get_absolute_url }}">{{ assignment.group }}</a>
+              <a href="{{ assignment.group.get_absolute_url }}">{{ assignment.group.group_id }}</a>
+            </td>
+            <td>
+              {{ assignment.group.get_protocol_display }}
             </td>
             <td>
               {% for ipaddress in assignment.group.ip_addresses.all %}
@@ -37,12 +41,12 @@
   </div>
   <div class="card-footer text-end noprint">
     {% if perms.ipam.add_fhrpgroup %}
-      <a href="{% url 'ipam:fhrpgroup_add' %}?return_url={% url 'ipam:fhrpgroupassignment_add' %}%3Fcontent_type={{ object|meta:"app_label" }}.{{ object|meta:"model_name" }}%26object_id={{ object.pk }}" class="btn btn-sm btn-primary">
+      <a href="{% url 'ipam:fhrpgroup_add' %}?return_url={% url 'ipam:fhrpgroupassignment_add' %}%3Finterface_type={{ object|meta:"app_label" }}.{{ object|meta:"model_name" }}%26interface_id={{ object.pk }}" class="btn btn-sm btn-primary">
         <span class="mdi mdi-plus-thick" aria-hidden="true"></span> Create Group
       </a>
     {% endif %}
     {% if perms.ipam.add_fhrpgroupassignment %}
-      <a href="{% url 'ipam:fhrpgroupassignment_add' %}?content_type={{ object|meta:"app_label" }}.{{ object|meta:"model_name" }}&object_id={{ object.pk }}" class="btn btn-sm btn-primary">
+      <a href="{% url 'ipam:fhrpgroupassignment_add' %}?interface_type={{ object|meta:"app_label" }}.{{ object|meta:"model_name" }}&interface_id={{ object.pk }}" class="btn btn-sm btn-primary">
         <span class="mdi mdi-plus-thick" aria-hidden="true"></span> Assign Group
       </a>
     {% endif %}

+ 1 - 1
netbox/templates/virtualization/vminterface.html

@@ -100,7 +100,7 @@
             </div>
             {% if perms.ipam.add_ipaddress %}
                 <div class="card-footer text-end noprint">
-                    <a href="{% url 'ipam:ipaddress_add' %}?virtual_machine={{ object.virtual_machine.pk }}&vminterface={{ object.pk }}" class="btn btn-sm btn-primary">
+                    <a href="{% url 'ipam:ipaddress_add' %}?virtual_machine={{ object.virtual_machine.pk }}&vminterface={{ object.pk }}&return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-primary">
                         <span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add IP Address
                     </a>
                 </div>

+ 3 - 3
netbox/virtualization/models.py

@@ -400,9 +400,9 @@ class VMInterface(PrimaryModel, BaseInterface):
     )
     fhrp_group_assignments = GenericRelation(
         to='ipam.FHRPGroupAssignment',
-        content_type_field='content_type',
-        object_id_field='object_id',
-        related_query_name='vminterface'
+        content_type_field='interface_type',
+        object_id_field='interface_id',
+        related_query_name='+'
     )
 
     objects = RestrictedQuerySet.as_manager()