mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Fixes #1699: Correct nested representation in the API of primary IPs for virtual machines and add missing primary_ip property
This commit is contained in:
@ -6,6 +6,7 @@ from dcim.api.serializers import NestedDeviceRoleSerializer, NestedPlatformSeria
|
|||||||
from dcim.constants import IFACE_FF_VIRTUAL
|
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 ipam.models import IPAddress
|
||||||
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 STATUS_CHOICES
|
from virtualization.constants import STATUS_CHOICES
|
||||||
@ -83,18 +84,30 @@ class WritableClusterSerializer(CustomFieldModelSerializer):
|
|||||||
# Virtual machines
|
# Virtual machines
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# Cannot import ipam.api.NestedIPAddressSerializer due to circular dependency
|
||||||
|
class VirtualMachineIPAddressSerializer(serializers.ModelSerializer):
|
||||||
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = IPAddress
|
||||||
|
fields = ['id', 'url', 'family', 'address']
|
||||||
|
|
||||||
|
|
||||||
class VirtualMachineSerializer(CustomFieldModelSerializer):
|
class VirtualMachineSerializer(CustomFieldModelSerializer):
|
||||||
status = ChoiceFieldSerializer(choices=STATUS_CHOICES)
|
status = ChoiceFieldSerializer(choices=STATUS_CHOICES)
|
||||||
cluster = NestedClusterSerializer()
|
cluster = NestedClusterSerializer()
|
||||||
role = NestedDeviceRoleSerializer()
|
role = NestedDeviceRoleSerializer()
|
||||||
tenant = NestedTenantSerializer()
|
tenant = NestedTenantSerializer()
|
||||||
platform = NestedPlatformSerializer()
|
platform = NestedPlatformSerializer()
|
||||||
|
primary_ip = VirtualMachineIPAddressSerializer()
|
||||||
|
primary_ip4 = VirtualMachineIPAddressSerializer()
|
||||||
|
primary_ip6 = VirtualMachineIPAddressSerializer()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = VirtualMachine
|
model = VirtualMachine
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'name', 'status', 'cluster', 'role', 'tenant', 'platform', 'primary_ip4', 'primary_ip6', 'vcpus',
|
'id', 'name', 'status', 'cluster', 'role', 'tenant', 'platform', 'primary_ip', 'primary_ip4', 'primary_ip6',
|
||||||
'memory', 'disk', 'comments', 'custom_fields',
|
'vcpus', 'memory', 'disk', 'comments', 'custom_fields',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
from django.contrib.contenttypes.fields import GenericRelation
|
from django.contrib.contenttypes.fields import GenericRelation
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db import models
|
from django.db import models
|
||||||
@ -255,3 +256,14 @@ class VirtualMachine(CreatedUpdatedModel, CustomFieldModel):
|
|||||||
|
|
||||||
def get_status_class(self):
|
def get_status_class(self):
|
||||||
return VM_STATUS_CLASSES[self.status]
|
return VM_STATUS_CLASSES[self.status]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def primary_ip(self):
|
||||||
|
if settings.PREFER_IPV4 and self.primary_ip4:
|
||||||
|
return self.primary_ip4
|
||||||
|
elif self.primary_ip6:
|
||||||
|
return self.primary_ip6
|
||||||
|
elif self.primary_ip4:
|
||||||
|
return self.primary_ip4
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
Reference in New Issue
Block a user