Show Service Chain instances list and details

Change-Id: I04724770c3eb1dc67abfa1449ff15bf3d1b9d3b4
Closes-Bug: #1566006
This commit is contained in:
ank 2016-04-16 16:58:40 +05:30
parent 5ade0d2013
commit f0bedbde6b
5 changed files with 73 additions and 26 deletions

View File

@ -566,8 +566,6 @@ def servicechaininstance_list(request, tenant_id, **kwargs):
sc_instances = gbpclient(request).list_servicechain_instances(
tenant_id=tenant_id, shared=False, **kwargs).get(
'servicechain_instances')
sc_instances.extend(gbpclient(request).list_servicechain_instances(
shared=True, **kwargs).get('servicechain_instances'))
return [ServiceChainInstance(item) for item in sc_instances]

View File

@ -204,21 +204,60 @@ def update_sc_node_attributes(request, scnode):
return scnode
def update_scn_instance_attributes(request, scspec):
static_url = getattr(settings, 'STATIC_URL', "/static/")
img_path = static_url + "dashboard/img/"
provider = "default"
nodes = scspec.nodes
nodes = [client.get_servicechain_node(request, item) for item in nodes]
sc = ["<div>"]
ds_path = "/opt/stack/horizon/static/dashboard/img/"
if os.path.exists(ds_path):
local_img_path = ds_path
else:
local_img_path = "/usr/share/openstack-dashboard/" \
+ "openstack_dashboard/static/dashboard/img/"
if os.path.exists(local_img_path):
providers = os.listdir(local_img_path)
for p in providers:
if p in scspec.description:
provider = p
break
img_src = img_path + provider + "/"
for n in nodes:
service_profile_id = n.service_profile_id
try:
service_profile = client.get_service_profile(request,
service_profile_id)
service_type = service_profile.service_type
except Exception:
pass
sc.append(
"<span class='glyphicon glyphicon-arrow-right' "
"style='margin: auto 10px'></span>")
scnode = "<img src='" + img_src + service_type + ".png'>"
sc.append(scnode)
sc.append("</div>")
setattr(scspec, 'chain', mark_safe("".join(sc)))
return scspec
def update_sc_instance_attributes(request, scinstance):
ptg_url = "horizon:project:policytargets:policy_targetdetails"
clsurl = "horizon:project:application_policy:policyclassifierdetails"
scspec_url = "horizon:project:network_services:sc_spec_details"
consumer_ptg = scinstance.consumer_ptg
provider_ptg = scinstance.provider_ptg
scspec = scinstance.servicechain_spec
classifier = scinstance.classifier
if consumer_ptg is not None:
consumer_ptg = scinstance.consumer_ptg_id
provider_ptg = scinstance.provider_ptg_id
scspec = scinstance.servicechain_specs
classifier = scinstance.classifier_id
if consumer_ptg is not None and consumer_ptg != "N/A":
ptg = client.policy_target_get(request, consumer_ptg)
u = reverse(ptg_url, kwargs={'policy_target_id': ptg.id})
atag = "<a href='%s'>%s</a>" % (u, ptg.name)
setattr(scinstance, 'consumer_ptg', mark_safe(atag))
if provider_ptg is not None:
ptg = client.policy_target_get(request, consumer_ptg)
ptg = client.policy_target_get(request, provider_ptg)
u = reverse(ptg_url, kwargs={'policy_target_id': ptg.id})
atag = "<a href='%s'>%s</a>" % (u, ptg.name)
setattr(scinstance, 'provider_ptg', mark_safe(atag))
@ -228,10 +267,12 @@ def update_sc_instance_attributes(request, scinstance):
atag = "<a href='%s'>%s</a>" % (u, cls.name)
setattr(scinstance, 'classifier', mark_safe(atag))
if scspec is not None:
sc = client.get_servicechain_spec(request, scspec)
u = reverse(scspec_url, kwargs={'scspec_id': sc.id})
atag = "<a href='%s'>%s</a>" % (u, sc.name)
scs = client.get_servicechain_spec(request, scspec[0])
url = reverse(scspec_url, kwargs={'scspec_id': scs.id})
atag = "<a href='%s'>%s</a>" % (url, scs.name)
setattr(scinstance, 'servicechain_spec', mark_safe(atag))
scni = update_scn_instance_attributes(request, scs)
setattr(scinstance, 'servicechain', scni.chain)
return scinstance

View File

@ -136,9 +136,11 @@ class ServiceChainInstanceTable(tables.DataTable):
description = tables.Column("description",
verbose_name=_("Description"))
provider_ptg = tables.Column(
"provider_ptg", verbose_name=_("Provider PTG"))
consumer_ptg = tables.Column(
"consumer_ptg", verbose_name=_("Consumer PTG"))
"provider_ptg", verbose_name=_("Provider"))
servicechain = tables.Column(
"servicechain", verbose_name=_("Service Chain"))
# consumer_ptg = tables.Column(
# "consumer_ptg", verbose_name=_("Consumer"))
servicechain_spec = tables.Column(
"servicechain_spec", verbose_name=_("Service Chain Spec"))
classifier = tables.Column("classifier", verbose_name=_("Classifier"))
@ -146,9 +148,6 @@ class ServiceChainInstanceTable(tables.DataTable):
class Meta(object):
name = "service_chain_instance_table"
verbose_name = _("Service Chain Instance")
table_actions = (CreateServiceChainInstanceLink,)
row_actions = (
EditServiceChainInstanceLink, DeleteServiceChainInstanceLink,)
class CreateServiceProfileLink(tables.LinkAction):

View File

@ -98,7 +98,8 @@ class ServiceProfileTab(tabs.TableTab):
class ServiceChainTabs(tabs.TabGroup):
slug = "service_chain_spec_tabs"
tabs = (ServiceChainSpecTab, ServiceChainNodeTab, ServiceProfileTab,)
tabs = (ServiceChainSpecTab, ServiceChainNodeTab, ServiceProfileTab,
ServiceChainInstanceTab)
sticky = True

View File

@ -1,9 +1,9 @@
{% load i18n sizeformat parse_date %}
{% load url from future %}
<div class="info row detail">
<div class="info detail">
<hr class="header_rule">
<dl>
<dl class="dl-horizontal">
<dt>{% trans "Name" %}</dt>
<dd>{{ scinstance.name|default:_("-") }}</dd>
@ -14,17 +14,25 @@
<dd>{{ scinstance.id }} </dd>
<dt>{% trans "Provider PTG" %}</dt>
<dd>{{ scinstance.provider_ptg }} </dd>
<dd>{{ scinstance.provider_ptg_id }} </dd>
<dt>{% trans "Consumer PTG" %}</dt>
<dd>{{ scinstance.consumer_ptg }} </dd>
<!--<dt>{% trans "Consumer PTG" %}</dt>
<dd>{{ scinstance.consumer_ptg_id }} </dd>-->
<dt>{% trans "Management PTG" %}</dt>
<dd>{{ scinstance.management_ptg_id }} </dd>
<dt>{% trans "Service Chain Spec" %}</dt>
<dd>{{ scinstance.servicechain_spec}} </dd>
<dd>{{ scinstance.servicechain_specs}} </dd>
<dt>{% trans "Classifier" %}</dt>
<dd>{{ scinstance.classifier}} </dd>
<dd>{{ scinstance.classifier_id}} </dd>
<dt>{% trans "Config parameter values" %}</dt>
<dd>{{ scinstance.config_param_values}} </dd>
<dt>{% trans "Project ID" %}</dt>
<dd>{{ scinstance.tenant_id}} </dd>
</dl>
</div>