Add fip to lbaas vip info

This change adds floating ip address where the vip is displayed.  The
floating IP is a critical peice of information and it is a real hassle
to find this information.

Change-Id: Id9cfeffd3eebe7651bc53baa5e52972ce2c50547
Closes-bug: #1452411
This commit is contained in:
eric 2015-05-06 12:43:18 -06:00 committed by Eric Peterson
parent be6fdd8a38
commit 0b7901c4ca
5 changed files with 48 additions and 22 deletions

View File

@ -141,7 +141,7 @@ def pool_create(request, **kwargs):
return Pool(pool) return Pool(pool)
def _get_vip(request, pool, vip_dict, expand_name_only=False): def _get_vip(request, pool, vip_dict):
if pool['vip_id'] is not None: if pool['vip_id'] is not None:
try: try:
if vip_dict: if vip_dict:
@ -152,8 +152,6 @@ def _get_vip(request, pool, vip_dict, expand_name_only=False):
messages.warning(request, _("Unable to get VIP for pool " messages.warning(request, _("Unable to get VIP for pool "
"%(pool)s.") % {"pool": pool["id"]}) "%(pool)s.") % {"pool": pool["id"]})
vip = Vip({'id': pool['vip_id'], 'name': ''}) vip = Vip({'id': pool['vip_id'], 'name': ''})
if expand_name_only:
vip = vip.name_or_id
return vip return vip
else: else:
return None return None
@ -175,8 +173,7 @@ def _pool_list(request, expand_subnet=False, expand_vip=False, **kwargs):
vips = vip_list(request) vips = vip_list(request)
vip_dict = SortedDict((v.id, v) for v in vips) vip_dict = SortedDict((v.id, v) for v in vips)
for p in pools: for p in pools:
p['vip_name'] = _get_vip(request, p, vip_dict, p['vip'] = _get_vip(request, p, vip_dict)
expand_name_only=True)
return [Pool(p) for p in pools] return [Pool(p) for p in pools]
@ -202,8 +199,7 @@ def _pool_get(request, pool_id, expand_resource=False):
except Exception: except Exception:
messages.warning(request, _("Unable to get subnet for pool " messages.warning(request, _("Unable to get subnet for pool "
"%(pool)s.") % {"pool": pool_id}) "%(pool)s.") % {"pool": pool_id})
pool['vip'] = _get_vip(request, pool, vip_dict=None, pool['vip'] = _get_vip(request, pool, vip_dict=None)
expand_name_only=False)
try: try:
pool['members'] = _member_list(request, expand_pool=False, pool['members'] = _member_list(request, expand_pool=False,
pool_id=pool_id) pool_id=pool_id)

View File

@ -14,6 +14,7 @@
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django import template
from django.template import defaultfilters as filters from django.template import defaultfilters as filters
from django.utils import http from django.utils import http
from django.utils.translation import pgettext_lazy from django.utils.translation import pgettext_lazy
@ -220,14 +221,6 @@ class UpdateMonitorLink(policy.PolicyTargetMixin, tables.LinkAction):
return base_url return base_url
def get_vip_link(pool):
if pool.vip_id:
return reverse("horizon:project:loadbalancers:vipdetails",
args=(http.urlquote(pool.vip_id),))
else:
return None
class AddPMAssociationLink(policy.PolicyTargetMixin, class AddPMAssociationLink(policy.PolicyTargetMixin,
tables.LinkAction): tables.LinkAction):
name = "addassociation" name = "addassociation"
@ -273,9 +266,9 @@ class UpdatePoolsRow(tables.Row):
pool = api.lbaas.pool_get(request, pool_id) pool = api.lbaas.pool_get(request, pool_id)
try: try:
vip = api.lbaas.vip_get(request, pool.vip_id) vip = api.lbaas.vip_get(request, pool.vip_id)
pool.vip_name = vip.name pool.vip = vip
except Exception: except Exception:
pool.vip_name = pool.vip_id pass
try: try:
subnet = api.neutron.subnet_get(request, pool.subnet_id) subnet = api.neutron.subnet_get(request, pool.subnet_id)
pool.subnet_name = subnet.cidr pool.subnet_name = subnet.cidr
@ -311,6 +304,15 @@ STATUS_DISPLAY_CHOICES = (
) )
def get_vip_name(pool):
if hasattr(pool, "vip") and pool.vip:
template_name = 'project/loadbalancers/_pool_table_vip_cell.html'
context = {"vip": pool.vip, }
return template.loader.render_to_string(template_name, context)
else:
return None
class PoolsTable(tables.DataTable): class PoolsTable(tables.DataTable):
METHOD_DISPLAY_CHOICES = ( METHOD_DISPLAY_CHOICES = (
("round_robin", pgettext_lazy("load balancing method", ("round_robin", pgettext_lazy("load balancing method",
@ -337,8 +339,7 @@ class PoolsTable(tables.DataTable):
status=True, status=True,
status_choices=STATUS_CHOICES, status_choices=STATUS_CHOICES,
display_choices=STATUS_DISPLAY_CHOICES) display_choices=STATUS_DISPLAY_CHOICES)
vip_name = tables.Column('vip_name', verbose_name=_("VIP"), vip_name = tables.Column(get_vip_name, verbose_name=_("VIP"))
link=get_vip_link)
class Meta(object): class Meta(object):
name = "poolstable" name = "poolstable"

View File

@ -30,12 +30,22 @@ class PoolsTab(tabs.TableTab):
template_name = "horizon/common/_detail_table.html" template_name = "horizon/common/_detail_table.html"
def get_poolstable_data(self): def get_poolstable_data(self):
pools = []
try: try:
request = self.tab_group.request
tenant_id = self.request.user.tenant_id tenant_id = self.request.user.tenant_id
pools = api.lbaas.pool_list(self.tab_group.request, pools = api.lbaas.pool_list(request,
tenant_id=tenant_id) tenant_id=tenant_id)
fips = None
for pool in pools:
if hasattr(pool, "vip") and pool.vip:
if not fips:
fips = api.network.tenant_floating_ip_list(request)
vip_fip = [fip for fip in fips
if fip.port_id == pool.vip.port_id]
if vip_fip:
pool.vip.fip = vip_fip[0]
except Exception: except Exception:
pools = []
exceptions.handle(self.tab_group.request, exceptions.handle(self.tab_group.request,
_('Unable to retrieve pools list.')) _('Unable to retrieve pools list.'))
return pools return pools
@ -100,10 +110,15 @@ class VipDetailsTab(tabs.Tab):
def get_context_data(self, request): def get_context_data(self, request):
vid = self.tab_group.kwargs['vip_id'] vid = self.tab_group.kwargs['vip_id']
vip = []
try: try:
vip = api.lbaas.vip_get(request, vid) vip = api.lbaas.vip_get(request, vid)
fips = api.network.tenant_floating_ip_list(self.tab_group.request)
vip_fip = [fip for fip in fips
if fip.port_id == vip.port.id]
if vip_fip:
vip.fip = vip_fip[0]
except Exception: except Exception:
vip = []
exceptions.handle(self.tab_group.request, exceptions.handle(self.tab_group.request,
_('Unable to retrieve VIP details.')) _('Unable to retrieve VIP details.'))
return {'vip': vip} return {'vip': vip}

View File

@ -0,0 +1,9 @@
{% load i18n %}
{% url 'horizon:project:loadbalancers:vipdetails' vip.id as vip_url %}
<a href="{{ vip_url }}">{{ vip.name }}</a>
<br/>
{% trans "Address:" %} {{ vip.address }}
{% if vip.fip %}
<br/>
{% trans "Floating IP:" %} {{ vip.fip.floating_ip_address }}
{% endif %}

View File

@ -22,6 +22,11 @@
<dt>{% trans "Address" %}</dt> <dt>{% trans "Address" %}</dt>
<dd>{{ vip.address }}</dd> <dd>{{ vip.address }}</dd>
{% if vip.fip %}
<dt>{% trans "Floating IP" %}</dt>
<dd>{{ vip.fip.floating_ip_address }}</dd>
{% endif %}
<dt>{% trans "Protocol Port" %}</dt> <dt>{% trans "Protocol Port" %}</dt>
<dd>{{ vip.protocol_port }}</dd> <dd>{{ vip.protocol_port }}</dd>