102 lines
3.8 KiB
Python
Executable File
102 lines
3.8 KiB
Python
Executable File
#
|
|
# Copyright (c) 2016 Wind River Systems, Inc.
|
|
#
|
|
# The right to copy, distribute, modify, or otherwise make use
|
|
# of this software may be licensed only pursuant to the terms
|
|
# of an applicable Wind River license agreement.
|
|
#
|
|
|
|
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
|
|
|
import logging
|
|
|
|
from django.core.urlresolvers import reverse
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from horizon import exceptions
|
|
from horizon.utils import memoized
|
|
from horizon import views
|
|
from openstack_dashboard import api
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
class DetailNeighbourView(views.HorizonTemplateView):
|
|
template_name = 'admin/inventory/_detail_neighbour.html'
|
|
page_title = "{{ localportname }}"
|
|
|
|
def _get_object(self, *args, **kwargs):
|
|
if not hasattr(self, "_object"):
|
|
neighbour_uuid = self.kwargs['neighbour_uuid']
|
|
try:
|
|
self._object = \
|
|
api.sysinv.host_lldpneighbour_get(self.request,
|
|
neighbour_uuid)
|
|
|
|
except Exception:
|
|
redirect = reverse('horizon:admin:inventory:index')
|
|
msg = _('Unable to retrieve LLDP neighbor details "%s".') \
|
|
% neighbour_uuid
|
|
exceptions.handle(self.request, msg, redirect=redirect)
|
|
|
|
return self._object
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(DetailNeighbourView, self).get_context_data(**kwargs)
|
|
# Context "neighbour" is referenced in _detail_neighbour.html
|
|
# Reformat some attributes for better display
|
|
neighbour = self._get_object()
|
|
context['localportname'] = neighbour.get_local_port_display_name()
|
|
if neighbour.system_capabilities:
|
|
context['systemcaps'] = \
|
|
neighbour.system_capabilities.replace(',', '\n')
|
|
if neighbour.dot1_proto_vids:
|
|
context['dot1provids'] = \
|
|
neighbour.dot1_proto_vids.replace(',', '\n')
|
|
if neighbour.dot1_vlan_names:
|
|
context['vlannames'] = neighbour.dot1_vlan_names.replace(',', '\n')
|
|
if neighbour.dot1_proto_ids:
|
|
context['dot1protoids'] = \
|
|
neighbour.dot1_proto_ids.replace(',', '\n')
|
|
if neighbour.dot1_lag:
|
|
context['dot1lag'] = neighbour.dot1_lag.replace(',', '\n')
|
|
if neighbour.dot3_mac_status:
|
|
# The dot3_mac_status has irregular format. An example is
|
|
# auto-negotiation-capable=y,auto-negotiation-enabled=y,capability
|
|
# =10-base-t-fd,100-base-t4,1000-base-t-fd,mau-type=4-pair-
|
|
# category-5-utp-fd
|
|
status_list = neighbour.dot3_mac_status.split(',')
|
|
if status_list:
|
|
mac_status = []
|
|
for i in status_list:
|
|
if "=" in i:
|
|
mac_status.append(i)
|
|
else:
|
|
mac_status[-1] += "," + i
|
|
context['dot3macstatus'] = "\n".join(mac_status)
|
|
if neighbour.dot3_power_mdi:
|
|
context['dot3powermdi'] = \
|
|
neighbour.dot3_power_mdi.replace(',', '\n')
|
|
context['neighbour'] = neighbour
|
|
|
|
hostname = self.get_hostname(neighbour.host_uuid)
|
|
host_nav = hostname or "Unprovisioned Node"
|
|
breadcrumb = [
|
|
(host_nav, reverse('horizon:admin:inventory:detail',
|
|
args=(neighbour.host_uuid,))),
|
|
(_("Neighbors"), None)
|
|
]
|
|
context["custom_breadcrumb"] = breadcrumb
|
|
|
|
return context
|
|
|
|
@memoized.memoized_method
|
|
def get_hostname(self, host_uuid):
|
|
try:
|
|
host = api.sysinv.host_get(self.request, host_uuid)
|
|
except Exception:
|
|
host = {}
|
|
msg = _('Unable to retrieve hostname details.')
|
|
exceptions.handle(self.request, msg)
|
|
return host.hostname
|