Skip to content

Commit ac0c54c

Browse files
committed
#5401: Add custom field support for VMInterface
1 parent 19b78e6 commit ac0c54c

File tree

7 files changed

+22
-9
lines changed

7 files changed

+22
-9
lines changed

netbox/templates/virtualization/vminterface.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,10 @@
5757
</tr>
5858
</table>
5959
</div>
60-
{% plugin_left_page object %}
60+
{% plugin_left_page object %}
6161
</div>
6262
<div class="col-md-6">
63+
{% include 'inc/custom_fields_panel.html' %}
6364
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all %}
6465
{% plugin_right_page object %}
6566
</div>

netbox/templates/virtualization/vminterface_edit.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@
3131
{% render_field form.tagged_vlans %}
3232
</div>
3333
</div>
34+
{% if form.custom_fields %}
35+
<div class="panel panel-default">
36+
<div class="panel-heading"><strong>Custom Fields</strong></div>
37+
<div class="panel-body">
38+
{% render_custom_fields form %}
39+
</div>
40+
</div>
41+
{% endif %}
3442
{% endblock %}
3543

3644
{% block buttons %}

netbox/virtualization/api/serializers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def get_config_context(self, obj):
103103
# VM interfaces
104104
#
105105

106-
class VMInterfaceSerializer(TaggedObjectSerializer, ValidatedModelSerializer):
106+
class VMInterfaceSerializer(TaggedObjectSerializer, CustomFieldModelSerializer):
107107
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:vminterface-detail')
108108
virtual_machine = NestedVirtualMachineSerializer()
109109
mode = ChoiceField(choices=InterfaceModeChoices, allow_blank=True, required=False)
@@ -119,7 +119,7 @@ class Meta:
119119
model = VMInterface
120120
fields = [
121121
'id', 'url', 'virtual_machine', 'name', 'enabled', 'mtu', 'mac_address', 'description', 'mode',
122-
'untagged_vlan', 'tagged_vlans', 'tags',
122+
'untagged_vlan', 'tagged_vlans', 'tags', 'custom_fields', 'created', 'last_updated',
123123
]
124124

125125
def validate(self, data):

netbox/virtualization/filters.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ def _has_primary_ip(self, queryset, name, value):
237237
return queryset.exclude(params)
238238

239239

240-
class VMInterfaceFilterSet(BaseFilterSet):
240+
class VMInterfaceFilterSet(BaseFilterSet, CustomFieldModelFilterSet, CreatedUpdatedFilterSet):
241241
q = django_filters.CharFilter(
242242
method='search',
243243
label='Search',

netbox/virtualization/forms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -576,7 +576,7 @@ class VirtualMachineFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFil
576576
# VM interfaces
577577
#
578578

579-
class VMInterfaceForm(BootstrapMixin, InterfaceCommonForm, forms.ModelForm):
579+
class VMInterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm):
580580
untagged_vlan = DynamicModelChoiceField(
581581
queryset=VLAN.objects.all(),
582582
required=False,

netbox/virtualization/migrations/0020_standardize_models.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,9 @@ class Migration(migrations.Migration):
5454
name='last_updated',
5555
field=models.DateTimeField(auto_now=True, null=True),
5656
),
57+
migrations.AddField(
58+
model_name='vminterface',
59+
name='custom_field_data',
60+
field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder),
61+
),
5762
]

netbox/virtualization/models.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from extras.models import ConfigContextModel, TaggedItem
1010
from extras.querysets import ConfigContextModelQuerySet
1111
from extras.utils import extras_features
12-
from netbox.models import ChangeLoggedModel, OrganizationalModel, PrimaryModel
12+
from netbox.models import OrganizationalModel, PrimaryModel
1313
from utilities.fields import NaturalOrderingField
1414
from utilities.ordering import naturalize_interface
1515
from utilities.query_functions import CollateAsChar
@@ -372,9 +372,8 @@ def site(self):
372372
# Interfaces
373373
#
374374

375-
# TODO: Inherit from PrimaryModel
376-
@extras_features('export_templates', 'webhooks')
377-
class VMInterface(ChangeLoggedModel, BaseInterface):
375+
@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks')
376+
class VMInterface(PrimaryModel, BaseInterface):
378377
virtual_machine = models.ForeignKey(
379378
to='virtualization.VirtualMachine',
380379
on_delete=models.CASCADE,

0 commit comments

Comments
 (0)