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:
@@ -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']
|
||||
|
@@ -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')
|
||||
|
||||
|
@@ -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
|
||||
#
|
||||
|
Reference in New Issue
Block a user