mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Moved rack units and device LLDP neighbors views into model viewsets
This commit is contained in:
@ -55,12 +55,6 @@ urlpatterns = [
|
|||||||
url(r'', include(router.urls)),
|
url(r'', include(router.urls)),
|
||||||
url(r'^devices/(?P<pk>\d+)/', include(device_router.urls)),
|
url(r'^devices/(?P<pk>\d+)/', include(device_router.urls)),
|
||||||
|
|
||||||
# Racks
|
|
||||||
url(r'^racks/(?P<pk>\d+)/rack-units/$', views.RackUnitListView.as_view(), name='rack_units'),
|
|
||||||
|
|
||||||
# Devices
|
|
||||||
url(r'^devices/(?P<pk>\d+)/lldp-neighbors/$', views.LLDPNeighborsView.as_view(), name='device_lldp-neighbors'),
|
|
||||||
|
|
||||||
# Miscellaneous
|
# Miscellaneous
|
||||||
url(r'^related-connections/$', views.RelatedConnectionsView.as_view(), name='related_connections'),
|
url(r'^related-connections/$', views.RelatedConnectionsView.as_view(), name='related_connections'),
|
||||||
url(r'^topology-maps/(?P<slug>[\w-]+)/$', TopologyMapView.as_view(), name='topology_map'),
|
url(r'^topology-maps/(?P<slug>[\w-]+)/$', TopologyMapView.as_view(), name='topology_map'),
|
||||||
|
@ -70,14 +70,11 @@ class RackViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
|
|||||||
serializer_class = serializers.RackSerializer
|
serializer_class = serializers.RackSerializer
|
||||||
filter_class = filters.RackFilter
|
filter_class = filters.RackFilter
|
||||||
|
|
||||||
|
@detail_route(url_path='rack-units')
|
||||||
class RackUnitListView(APIView):
|
def rack_units(self, request, pk=None):
|
||||||
"""
|
"""
|
||||||
List rack units (by rack)
|
List rack units (by rack)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get(self, request, pk):
|
|
||||||
|
|
||||||
rack = get_object_or_404(Rack, pk=pk)
|
rack = get_object_or_404(Rack, pk=pk)
|
||||||
face = request.GET.get('face', 0)
|
face = request.GET.get('face', 0)
|
||||||
exclude_pk = request.GET.get('exclude', None)
|
exclude_pk = request.GET.get('exclude', None)
|
||||||
@ -149,6 +146,28 @@ class DeviceViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
|
|||||||
filter_class = filters.DeviceFilter
|
filter_class = filters.DeviceFilter
|
||||||
renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES + [BINDZoneRenderer, FlatJSONRenderer]
|
renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES + [BINDZoneRenderer, FlatJSONRenderer]
|
||||||
|
|
||||||
|
@detail_route(url_path='lldp-neighbors')
|
||||||
|
def lldp_neighbors(self, request, pk):
|
||||||
|
"""
|
||||||
|
Retrieve live LLDP neighbors of a device
|
||||||
|
"""
|
||||||
|
device = get_object_or_404(Device, pk=pk)
|
||||||
|
if not device.primary_ip:
|
||||||
|
raise ServiceUnavailable("No IP configured for this device.")
|
||||||
|
|
||||||
|
RPC = device.get_rpc_client()
|
||||||
|
if not RPC:
|
||||||
|
raise ServiceUnavailable("No RPC client available for this platform ({}).".format(device.platform))
|
||||||
|
|
||||||
|
# Connect to device and retrieve inventory info
|
||||||
|
try:
|
||||||
|
with RPC(device, username=settings.NETBOX_USERNAME, password=settings.NETBOX_PASSWORD) as rpc_client:
|
||||||
|
lldp_neighbors = rpc_client.get_lldp_neighbors()
|
||||||
|
except:
|
||||||
|
raise ServiceUnavailable("Error connecting to the remote device.")
|
||||||
|
|
||||||
|
return Response(lldp_neighbors)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Console Ports
|
# Console Ports
|
||||||
|
Reference in New Issue
Block a user