1
0
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:
Jeremy Stretch
2017-01-30 17:24:04 -05:00
parent d9e4017677
commit 173a6eee03
2 changed files with 27 additions and 14 deletions

View File

@ -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'),

View File

@ -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