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

This commit is contained in:
Jeremy Stretch 2017-10-09 14:27:31 -04:00
parent b734599f40
commit 100d979d3e
4 changed files with 15 additions and 12 deletions

View File

@ -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)',

View File

@ -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

View File

@ -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

View File

@ -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
# #