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

Initial work on virtual chassis support

This commit is contained in:
Jeremy Stretch
2017-11-17 16:47:26 -05:00
parent 7e475511b6
commit 55e07c1c9a
10 changed files with 256 additions and 5 deletions

View File

@@ -14,7 +14,7 @@ from dcim.models import (
ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
DeviceBayTemplate, DeviceType, DeviceRole, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer,
InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup,
RackReservation, RackRole, Region, Site,
RackReservation, RackRole, Region, Site, VirtualChassis, VCMembership
)
from extras.api.customfields import CustomFieldModelSerializer
from ipam.models import IPAddress, VLAN
@@ -799,3 +799,52 @@ class WritableInterfaceConnectionSerializer(ValidatedModelSerializer):
class Meta:
model = InterfaceConnection
fields = ['id', 'interface_a', 'interface_b', 'connection_status']
#
# Virtual chassis
#
class VirtualChassisSerializer(serializers.ModelSerializer):
site = NestedSiteSerializer()
master = NestedDeviceSerializer()
class Meta:
model = VirtualChassis
fields = ['id', 'site', 'domain', 'master']
class NestedVirtualChassisSerializer(serializers.ModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:virtualchassis-detail')
class Meta:
model = VirtualChassis
fields = ['id', 'url']
class WritableVirtualChassisSerializer(ValidatedModelSerializer):
class Meta:
model = VirtualChassis
fields = ['id', 'site', 'domain', 'master']
#
# Virtual chassis memberships
#
class VCMembershipSerializer(serializers.ModelSerializer):
virtual_chassis = NestedVirtualChassisSerializer()
device = NestedDeviceSerializer()
class Meta:
model = VCMembership
fields = ['id', 'virtual_chassis', 'device', 'master_enabled', 'position', 'priority']
class WritableVCMembershipSerializer(serializers.ModelSerializer):
virtual_chassis = serializers.PrimaryKeyRelatedField(queryset=VirtualChassis.objects.all(), required=False)
class Meta:
model = VCMembership
fields = ['id', 'virtual_chassis', 'device', 'master_enabled', 'position', 'priority']

View File

@@ -60,6 +60,10 @@ router.register(r'console-connections', views.ConsoleConnectionViewSet, base_nam
router.register(r'power-connections', views.PowerConnectionViewSet, base_name='powerconnections')
router.register(r'interface-connections', views.InterfaceConnectionViewSet)
# Virtual chassis
router.register(r'virtual-chassis', views.VirtualChassisViewSet)
router.register(r'vc-memberships', views.VCMembershipViewSet)
# Miscellaneous
router.register(r'connected-device', views.ConnectedDeviceViewSet, base_name='connected-device')

View File

@@ -15,7 +15,7 @@ from dcim.models import (
ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
DeviceBayTemplate, DeviceRole, DeviceType, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer,
InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup,
RackReservation, RackRole, Region, Site,
RackReservation, RackRole, Region, Site, VCMembership, VirtualChassis
)
from extras.api.serializers import RenderedGraphSerializer
from extras.api.views import CustomFieldModelViewSet
@@ -396,6 +396,24 @@ class InterfaceConnectionViewSet(ModelViewSet):
filter_class = filters.InterfaceConnectionFilter
#
# Virtual chassis
#
class VirtualChassisViewSet(ModelViewSet):
queryset = VirtualChassis.objects.select_related('master')
serializer_class = serializers.VirtualChassisSerializer
write_serializer_class = serializers.WritableVirtualChassisSerializer
# filter_class = filters.VirtualChassisFilter
class VCMembershipViewSet(ModelViewSet):
queryset = VCMembership.objects.select_related('virtual_chassis', 'device')
serializer_class = serializers.VCMembershipSerializer
write_serializer_class = serializers.WritableVCMembershipSerializer
# filter_class = filters.VCMembershipFilter
#
# Miscellaneous
#