Browse Source

Fixes #1554: Don't require form_factor when creating an interface assigned to a virtual machine

Jeremy Stretch 7 years ago
parent
commit
100d979d3e

+ 4 - 6
netbox/dcim/constants.py

@@ -93,15 +93,13 @@ IFACE_FF_JUNIPER_VCP = 5200
 # Other
 # Other
 IFACE_FF_OTHER = 32767
 IFACE_FF_OTHER = 32767
 
 
-VIFACE_FF_CHOICES = [
-    [IFACE_FF_VIRTUAL, 'Virtual'],
-    [IFACE_FF_LAG, 'Link Aggregation Group (LAG)'],
-]
-
 IFACE_FF_CHOICES = [
 IFACE_FF_CHOICES = [
     [
     [
         'Virtual interfaces',
         'Virtual interfaces',
-        VIFACE_FF_CHOICES,
+        [
+            [IFACE_FF_VIRTUAL, 'Virtual'],
+            [IFACE_FF_LAG, 'Link Aggregation Group (LAG)'],
+        ],
     ],
     ],
     [
     [
         'Ethernet (fixed)',
         'Ethernet (fixed)',

+ 2 - 2
netbox/dcim/models.py

@@ -1303,9 +1303,9 @@ class Interface(models.Model):
             raise ValidationError("An interface must belong to either a device or a virtual machine.")
             raise ValidationError("An interface must belong to either a device or a virtual machine.")
 
 
         # VM interfaces must be virtual
         # VM interfaces must be virtual
-        if self.virtual_machine and self.form_factor not in VIRTUAL_IFACE_TYPES:
+        if self.virtual_machine and self.form_factor is not IFACE_FF_VIRTUAL:
             raise ValidationError({
             raise ValidationError({
-                'form_factor': "Virtual machines cannot have physical interfaces."
+                'form_factor': "Virtual machines can only have virtual interfaces."
             })
             })
 
 
         # Virtual interfaces cannot be connected
         # Virtual interfaces cannot be connected

+ 3 - 3
netbox/virtualization/api/serializers.py

@@ -3,7 +3,7 @@ from __future__ import unicode_literals
 from rest_framework import serializers
 from rest_framework import serializers
 
 
 from dcim.api.serializers import NestedDeviceRoleSerializer, NestedPlatformSerializer, NestedSiteSerializer
 from dcim.api.serializers import NestedDeviceRoleSerializer, NestedPlatformSerializer, NestedSiteSerializer
-from dcim.constants import VIFACE_FF_CHOICES
+from dcim.constants import IFACE_FF_VIRTUAL
 from dcim.models import Interface
 from dcim.models import Interface
 from extras.api.customfields import CustomFieldModelSerializer
 from extras.api.customfields import CustomFieldModelSerializer
 from tenancy.api.serializers import NestedTenantSerializer
 from tenancy.api.serializers import NestedTenantSerializer
@@ -122,12 +122,11 @@ class WritableVirtualMachineSerializer(CustomFieldModelSerializer):
 
 
 class InterfaceSerializer(serializers.ModelSerializer):
 class InterfaceSerializer(serializers.ModelSerializer):
     virtual_machine = NestedVirtualMachineSerializer()
     virtual_machine = NestedVirtualMachineSerializer()
-    form_factor = ChoiceFieldSerializer(choices=VIFACE_FF_CHOICES)
 
 
     class Meta:
     class Meta:
         model = Interface
         model = Interface
         fields = [
         fields = [
-            'id', 'name', 'virtual_machine', 'form_factor', 'enabled', 'mac_address', 'mtu', 'description',
+            'id', 'name', 'virtual_machine', 'enabled', 'mac_address', 'mtu', 'description',
         ]
         ]
 
 
 
 
@@ -140,6 +139,7 @@ class NestedInterfaceSerializer(serializers.ModelSerializer):
 
 
 
 
 class WritableInterfaceSerializer(ValidatedModelSerializer):
 class WritableInterfaceSerializer(ValidatedModelSerializer):
+    form_factor = serializers.IntegerField(default=IFACE_FF_VIRTUAL)
 
 
     class Meta:
     class Meta:
         model = Interface
         model = Interface

+ 6 - 1
netbox/virtualization/forms.py

@@ -6,7 +6,7 @@ from django import forms
 from django.core.exceptions import ValidationError
 from django.core.exceptions import ValidationError
 from django.db.models import Count
 from django.db.models import Count
 
 
-from dcim.constants import IFACE_FF_VIRTUAL, VIFACE_FF_CHOICES
+from dcim.constants import IFACE_FF_VIRTUAL
 from dcim.formfields import MACAddressFormField
 from dcim.formfields import MACAddressFormField
 from dcim.models import Device, DeviceRole, Interface, Platform, Rack, Region, Site
 from dcim.models import Device, DeviceRole, Interface, Platform, Rack, Region, Site
 from extras.forms import CustomFieldBulkEditForm, CustomFieldForm, CustomFieldFilterForm
 from extras.forms import CustomFieldBulkEditForm, CustomFieldForm, CustomFieldFilterForm
@@ -21,6 +21,11 @@ from .constants import STATUS_CHOICES
 from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
 from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
 
 
 
 
+VIFACE_FF_CHOICES = (
+    (IFACE_FF_VIRTUAL, 'Virtual'),
+)
+
+
 #
 #
 # Cluster types
 # Cluster types
 #
 #