|
@@ -3,10 +3,10 @@ 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 IFACE_FF_VIRTUAL
|
|
|
|
|
|
+from dcim.constants import IFACE_FF_VIRTUAL, IFACE_MODE_CHOICES
|
|
from dcim.models import Interface
|
|
from dcim.models import Interface
|
|
from extras.api.customfields import CustomFieldModelSerializer
|
|
from extras.api.customfields import CustomFieldModelSerializer
|
|
-from ipam.models import IPAddress
|
|
|
|
|
|
+from ipam.models import IPAddress, VLAN
|
|
from tenancy.api.serializers import NestedTenantSerializer
|
|
from tenancy.api.serializers import NestedTenantSerializer
|
|
from utilities.api import ChoiceFieldSerializer, ValidatedModelSerializer
|
|
from utilities.api import ChoiceFieldSerializer, ValidatedModelSerializer
|
|
from virtualization.constants import VM_STATUS_CHOICES
|
|
from virtualization.constants import VM_STATUS_CHOICES
|
|
@@ -133,13 +133,26 @@ class WritableVirtualMachineSerializer(CustomFieldModelSerializer):
|
|
# VM interfaces
|
|
# VM interfaces
|
|
#
|
|
#
|
|
|
|
|
|
|
|
+# Cannot import ipam.api.serializers.NestedVLANSerializer due to circular dependency
|
|
|
|
+class InterfaceVLANSerializer(serializers.ModelSerializer):
|
|
|
|
+ url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlan-detail')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ model = VLAN
|
|
|
|
+ fields = ['id', 'url', 'vid', 'name', 'display_name']
|
|
|
|
+
|
|
|
|
+
|
|
class InterfaceSerializer(serializers.ModelSerializer):
|
|
class InterfaceSerializer(serializers.ModelSerializer):
|
|
virtual_machine = NestedVirtualMachineSerializer()
|
|
virtual_machine = NestedVirtualMachineSerializer()
|
|
|
|
+ mode = ChoiceFieldSerializer(choices=IFACE_MODE_CHOICES)
|
|
|
|
+ untagged_vlan = InterfaceVLANSerializer()
|
|
|
|
+ tagged_vlans = InterfaceVLANSerializer(many=True)
|
|
|
|
|
|
class Meta:
|
|
class Meta:
|
|
model = Interface
|
|
model = Interface
|
|
fields = [
|
|
fields = [
|
|
- 'id', 'name', 'virtual_machine', 'enabled', 'mac_address', 'mtu', 'description',
|
|
|
|
|
|
+ 'id', 'name', 'virtual_machine', 'enabled', 'mac_address', 'mtu', 'mode', 'untagged_vlan', 'tagged_vlans',
|
|
|
|
+ 'description',
|
|
]
|
|
]
|
|
|
|
|
|
|
|
|
|
@@ -157,5 +170,6 @@ class WritableInterfaceSerializer(ValidatedModelSerializer):
|
|
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', 'form_factor', 'enabled', 'mac_address', 'mtu', 'mode', 'untagged_vlan',
|
|
|
|
+ 'tagged_vlans', 'description',
|
|
]
|
|
]
|