
This patch adds a region selector dropdown at the top of both the Project and Admin dashboards if more than one region is available in the user's service catalog. The user is allowed to choose from any region available in the service catalog. By selecting a region, the user is limited to accessing endpoints in that region only as long as the go through api.base.url_for If there are more than one endpoint for a service in a region the first in the catalog is returned. Further work on the blueprint will handle that complexity. Supporting Keystone v2.0 and v3 catalog formats. Partially implements blueprint multiple-service-endpoints Change-Id: I1ab6539c7c5f4b1ae4b1716059370e86b6ca4d2e
87 lines
2.3 KiB
Python
87 lines
2.3 KiB
Python
import logging
|
|
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from horizon import tables
|
|
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
class QuotaFilterAction(tables.FilterAction):
|
|
def filter(self, table, tenants, filter_string):
|
|
q = filter_string.lower()
|
|
|
|
def comp(tenant):
|
|
if q in tenant.name.lower():
|
|
return True
|
|
return False
|
|
|
|
return filter(comp, tenants)
|
|
|
|
|
|
def get_quota_name(quota):
|
|
if quota.name == "cores":
|
|
return _('VCPUs')
|
|
if quota.name == "floating_ips":
|
|
return _('Floating IPs')
|
|
return quota.name.replace("_", " ").title()
|
|
|
|
|
|
class QuotasTable(tables.DataTable):
|
|
name = tables.Column(get_quota_name, verbose_name=_('Quota Name'))
|
|
limit = tables.Column("limit", verbose_name=_('Limit'))
|
|
|
|
def get_object_id(self, obj):
|
|
return obj.name
|
|
|
|
class Meta:
|
|
name = "quotas"
|
|
verbose_name = _("Quotas")
|
|
table_actions = (QuotaFilterAction,)
|
|
multi_select = False
|
|
|
|
|
|
class ServiceFilterAction(tables.FilterAction):
|
|
def filter(self, table, services, filter_string):
|
|
q = filter_string.lower()
|
|
|
|
def comp(service):
|
|
if q in service.type.lower():
|
|
return True
|
|
return False
|
|
|
|
return filter(comp, services)
|
|
|
|
|
|
def get_stats(service):
|
|
return template.loader.render_to_string('admin/services/_stats.html',
|
|
{'service': service})
|
|
|
|
|
|
def get_enabled(service, reverse=False):
|
|
options = ["Enabled", "Disabled"]
|
|
if reverse:
|
|
options.reverse()
|
|
# if not configured in this region, neither option makes sense
|
|
if service.host:
|
|
return options[0] if not service.disabled else options[1]
|
|
return None
|
|
|
|
|
|
class ServicesTable(tables.DataTable):
|
|
id = tables.Column('id', verbose_name=_('Id'), hidden=True)
|
|
name = tables.Column("name", verbose_name=_('Name'))
|
|
service_type = tables.Column('__unicode__', verbose_name=_('Service'))
|
|
host = tables.Column('host', verbose_name=_('Host'))
|
|
enabled = tables.Column(get_enabled,
|
|
verbose_name=_('Enabled'),
|
|
status=True)
|
|
|
|
class Meta:
|
|
name = "services"
|
|
verbose_name = _("Services")
|
|
table_actions = (ServiceFilterAction,)
|
|
multi_select = False
|
|
status_columns = ["enabled"]
|