Show Service Chain instances list and details
Change-Id: I04724770c3eb1dc67abfa1449ff15bf3d1b9d3b4 Closes-Bug: #1566006
This commit is contained in:
parent
5ade0d2013
commit
f0bedbde6b
|
@ -566,8 +566,6 @@ def servicechaininstance_list(request, tenant_id, **kwargs):
|
||||||
sc_instances = gbpclient(request).list_servicechain_instances(
|
sc_instances = gbpclient(request).list_servicechain_instances(
|
||||||
tenant_id=tenant_id, shared=False, **kwargs).get(
|
tenant_id=tenant_id, shared=False, **kwargs).get(
|
||||||
'servicechain_instances')
|
'servicechain_instances')
|
||||||
sc_instances.extend(gbpclient(request).list_servicechain_instances(
|
|
||||||
shared=True, **kwargs).get('servicechain_instances'))
|
|
||||||
return [ServiceChainInstance(item) for item in sc_instances]
|
return [ServiceChainInstance(item) for item in sc_instances]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -204,21 +204,60 @@ def update_sc_node_attributes(request, scnode):
|
||||||
return 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):
|
def update_sc_instance_attributes(request, scinstance):
|
||||||
ptg_url = "horizon:project:policytargets:policy_targetdetails"
|
ptg_url = "horizon:project:policytargets:policy_targetdetails"
|
||||||
clsurl = "horizon:project:application_policy:policyclassifierdetails"
|
clsurl = "horizon:project:application_policy:policyclassifierdetails"
|
||||||
scspec_url = "horizon:project:network_services:sc_spec_details"
|
scspec_url = "horizon:project:network_services:sc_spec_details"
|
||||||
consumer_ptg = scinstance.consumer_ptg
|
consumer_ptg = scinstance.consumer_ptg_id
|
||||||
provider_ptg = scinstance.provider_ptg
|
provider_ptg = scinstance.provider_ptg_id
|
||||||
scspec = scinstance.servicechain_spec
|
scspec = scinstance.servicechain_specs
|
||||||
classifier = scinstance.classifier
|
classifier = scinstance.classifier_id
|
||||||
if consumer_ptg is not None:
|
if consumer_ptg is not None and consumer_ptg != "N/A":
|
||||||
ptg = client.policy_target_get(request, consumer_ptg)
|
ptg = client.policy_target_get(request, consumer_ptg)
|
||||||
u = reverse(ptg_url, kwargs={'policy_target_id': ptg.id})
|
u = reverse(ptg_url, kwargs={'policy_target_id': ptg.id})
|
||||||
atag = "<a href='%s'>%s</a>" % (u, ptg.name)
|
atag = "<a href='%s'>%s</a>" % (u, ptg.name)
|
||||||
setattr(scinstance, 'consumer_ptg', mark_safe(atag))
|
setattr(scinstance, 'consumer_ptg', mark_safe(atag))
|
||||||
if provider_ptg is not None:
|
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})
|
u = reverse(ptg_url, kwargs={'policy_target_id': ptg.id})
|
||||||
atag = "<a href='%s'>%s</a>" % (u, ptg.name)
|
atag = "<a href='%s'>%s</a>" % (u, ptg.name)
|
||||||
setattr(scinstance, 'provider_ptg', mark_safe(atag))
|
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)
|
atag = "<a href='%s'>%s</a>" % (u, cls.name)
|
||||||
setattr(scinstance, 'classifier', mark_safe(atag))
|
setattr(scinstance, 'classifier', mark_safe(atag))
|
||||||
if scspec is not None:
|
if scspec is not None:
|
||||||
sc = client.get_servicechain_spec(request, scspec)
|
scs = client.get_servicechain_spec(request, scspec[0])
|
||||||
u = reverse(scspec_url, kwargs={'scspec_id': sc.id})
|
url = reverse(scspec_url, kwargs={'scspec_id': scs.id})
|
||||||
atag = "<a href='%s'>%s</a>" % (u, sc.name)
|
atag = "<a href='%s'>%s</a>" % (url, scs.name)
|
||||||
setattr(scinstance, 'servicechain_spec', mark_safe(atag))
|
setattr(scinstance, 'servicechain_spec', mark_safe(atag))
|
||||||
|
scni = update_scn_instance_attributes(request, scs)
|
||||||
|
setattr(scinstance, 'servicechain', scni.chain)
|
||||||
return scinstance
|
return scinstance
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -136,9 +136,11 @@ class ServiceChainInstanceTable(tables.DataTable):
|
||||||
description = tables.Column("description",
|
description = tables.Column("description",
|
||||||
verbose_name=_("Description"))
|
verbose_name=_("Description"))
|
||||||
provider_ptg = tables.Column(
|
provider_ptg = tables.Column(
|
||||||
"provider_ptg", verbose_name=_("Provider PTG"))
|
"provider_ptg", verbose_name=_("Provider"))
|
||||||
consumer_ptg = tables.Column(
|
servicechain = tables.Column(
|
||||||
"consumer_ptg", verbose_name=_("Consumer PTG"))
|
"servicechain", verbose_name=_("Service Chain"))
|
||||||
|
# consumer_ptg = tables.Column(
|
||||||
|
# "consumer_ptg", verbose_name=_("Consumer"))
|
||||||
servicechain_spec = tables.Column(
|
servicechain_spec = tables.Column(
|
||||||
"servicechain_spec", verbose_name=_("Service Chain Spec"))
|
"servicechain_spec", verbose_name=_("Service Chain Spec"))
|
||||||
classifier = tables.Column("classifier", verbose_name=_("Classifier"))
|
classifier = tables.Column("classifier", verbose_name=_("Classifier"))
|
||||||
|
@ -146,9 +148,6 @@ class ServiceChainInstanceTable(tables.DataTable):
|
||||||
class Meta(object):
|
class Meta(object):
|
||||||
name = "service_chain_instance_table"
|
name = "service_chain_instance_table"
|
||||||
verbose_name = _("Service Chain Instance")
|
verbose_name = _("Service Chain Instance")
|
||||||
table_actions = (CreateServiceChainInstanceLink,)
|
|
||||||
row_actions = (
|
|
||||||
EditServiceChainInstanceLink, DeleteServiceChainInstanceLink,)
|
|
||||||
|
|
||||||
|
|
||||||
class CreateServiceProfileLink(tables.LinkAction):
|
class CreateServiceProfileLink(tables.LinkAction):
|
||||||
|
|
|
@ -98,7 +98,8 @@ class ServiceProfileTab(tabs.TableTab):
|
||||||
|
|
||||||
class ServiceChainTabs(tabs.TabGroup):
|
class ServiceChainTabs(tabs.TabGroup):
|
||||||
slug = "service_chain_spec_tabs"
|
slug = "service_chain_spec_tabs"
|
||||||
tabs = (ServiceChainSpecTab, ServiceChainNodeTab, ServiceProfileTab,)
|
tabs = (ServiceChainSpecTab, ServiceChainNodeTab, ServiceProfileTab,
|
||||||
|
ServiceChainInstanceTab)
|
||||||
sticky = True
|
sticky = True
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
{% load i18n sizeformat parse_date %}
|
{% load i18n sizeformat parse_date %}
|
||||||
{% load url from future %}
|
{% load url from future %}
|
||||||
|
|
||||||
<div class="info row detail">
|
<div class="info detail">
|
||||||
<hr class="header_rule">
|
<hr class="header_rule">
|
||||||
<dl>
|
<dl class="dl-horizontal">
|
||||||
<dt>{% trans "Name" %}</dt>
|
<dt>{% trans "Name" %}</dt>
|
||||||
<dd>{{ scinstance.name|default:_("-") }}</dd>
|
<dd>{{ scinstance.name|default:_("-") }}</dd>
|
||||||
|
|
||||||
|
@ -14,17 +14,25 @@
|
||||||
<dd>{{ scinstance.id }} </dd>
|
<dd>{{ scinstance.id }} </dd>
|
||||||
|
|
||||||
<dt>{% trans "Provider PTG" %}</dt>
|
<dt>{% trans "Provider PTG" %}</dt>
|
||||||
<dd>{{ scinstance.provider_ptg }} </dd>
|
<dd>{{ scinstance.provider_ptg_id }} </dd>
|
||||||
|
|
||||||
<dt>{% trans "Consumer PTG" %}</dt>
|
<!--<dt>{% trans "Consumer PTG" %}</dt>
|
||||||
<dd>{{ scinstance.consumer_ptg }} </dd>
|
<dd>{{ scinstance.consumer_ptg_id }} </dd>-->
|
||||||
|
|
||||||
|
<dt>{% trans "Management PTG" %}</dt>
|
||||||
|
<dd>{{ scinstance.management_ptg_id }} </dd>
|
||||||
|
|
||||||
<dt>{% trans "Service Chain Spec" %}</dt>
|
<dt>{% trans "Service Chain Spec" %}</dt>
|
||||||
<dd>{{ scinstance.servicechain_spec}} </dd>
|
<dd>{{ scinstance.servicechain_specs}} </dd>
|
||||||
|
|
||||||
<dt>{% trans "Classifier" %}</dt>
|
<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>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue