1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Remove separate config-context API endpoints; include rendered config context when retrieving a single device/VM

This commit is contained in:
Jeremy Stretch
2018-07-03 12:29:20 -04:00
parent 6ddbd79fe6
commit 25b36d6d42
4 changed files with 42 additions and 14 deletions

View File

@ -440,6 +440,21 @@ class DeviceSerializer(CustomFieldModelSerializer):
return data
class DeviceWithConfigContextSerializer(DeviceSerializer):
config_context = serializers.SerializerMethodField()
class Meta(DeviceSerializer.Meta):
fields = [
'id', 'name', 'display_name', 'device_type', 'device_role', 'tenant', 'platform', 'serial', 'asset_tag',
'site', 'rack', 'position', 'face', 'parent_device', 'status', 'primary_ip', 'primary_ip4', 'primary_ip6',
'cluster', 'virtual_chassis', 'vc_position', 'vc_priority', 'comments', 'tags', 'custom_fields',
'config_context', 'created', 'last_updated',
]
def get_config_context(self, obj):
return obj.get_config_context()
#
# Console server ports
#

View File

@ -230,13 +230,15 @@ class DeviceViewSet(CustomFieldModelViewSet):
).prefetch_related(
'primary_ip4__nat_outside', 'primary_ip6__nat_outside',
)
serializer_class = serializers.DeviceSerializer
filter_class = filters.DeviceFilter
@action(detail=True, url_path='config-context')
def config_context(self, request, pk):
device = get_object_or_404(Device, pk=pk)
return Response(device.get_config_context())
def get_serializer_class(self):
"""
Include rendered config context when retrieving a single Device.
"""
if self.action == 'retrieve':
return serializers.DeviceWithConfigContextSerializer
return serializers.DeviceSerializer
@action(detail=True, url_path='napalm')
def napalm(self, request, pk):

View File

@ -109,6 +109,19 @@ class VirtualMachineSerializer(CustomFieldModelSerializer):
]
class VirtualMachineWithConfigContextSerializer(VirtualMachineSerializer):
config_context = serializers.SerializerMethodField()
class Meta(VirtualMachineSerializer.Meta):
fields = [
'id', 'name', 'status', 'cluster', 'role', 'tenant', 'platform', 'primary_ip', 'primary_ip4', 'primary_ip6',
'vcpus', 'memory', 'disk', 'comments', 'tags', 'custom_fields', 'config_context', 'created', 'last_updated',
]
def get_config_context(self, obj):
return obj.get_config_context()
class NestedVirtualMachineSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:virtualmachine-detail')

View File

@ -1,9 +1,5 @@
from __future__ import unicode_literals
from django.shortcuts import get_object_or_404
from rest_framework.decorators import action
from rest_framework.response import Response
from dcim.models import Interface
from extras.api.views import CustomFieldModelViewSet
from utilities.api import FieldChoicesViewSet, ModelViewSet
@ -50,13 +46,15 @@ class ClusterViewSet(CustomFieldModelViewSet):
class VirtualMachineViewSet(CustomFieldModelViewSet):
queryset = VirtualMachine.objects.all()
serializer_class = serializers.VirtualMachineSerializer
filter_class = filters.VirtualMachineFilter
@action(detail=True, url_path='config-context')
def config_context(self, request, pk):
device = get_object_or_404(VirtualMachine, pk=pk)
return Response(device.get_config_context())
def get_serializer_class(self):
"""
Include rendered config context when retrieving a single VirtualMachine.
"""
if self.action == 'retrieve':
return serializers.VirtualMachineWithConfigContextSerializer
return serializers.VirtualMachineSerializer
class InterfaceViewSet(ModelViewSet):