diff --git a/openstack_dashboard/dashboards/project/firewalls/tabs.py b/openstack_dashboard/dashboards/project/firewalls/tabs.py
index e1424ffe03..7ee50b37fe 100644
--- a/openstack_dashboard/dashboards/project/firewalls/tabs.py
+++ b/openstack_dashboard/dashboards/project/firewalls/tabs.py
@@ -12,7 +12,6 @@
# License for the specific language governing permissions and limitations
# under the License.
-from django.core.urlresolvers import reverse_lazy
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
@@ -94,64 +93,30 @@ class FirewallsTab(tabs.TableTab):
class RuleDetailsTab(tabs.Tab):
- name = _("Firewall Rule Details")
+ name = _("Rule")
slug = "ruledetails"
template_name = "project/firewalls/_rule_details.html"
- failure_url = reverse_lazy('horizon:project:firewalls:index')
def get_context_data(self, request):
- rid = self.tab_group.kwargs['rule_id']
- try:
- rule = api.fwaas.rule_get(request, rid)
- except Exception:
- exceptions.handle(request,
- _('Unable to retrieve rule details.'),
- redirect=self.failure_url)
- return {'rule': rule}
+ return {"rule": self.tab_group.kwargs['rule']}
class PolicyDetailsTab(tabs.Tab):
- name = _("Firewall Policy Details")
+ name = _("Policy")
slug = "policydetails"
template_name = "project/firewalls/_policy_details.html"
- failure_url = reverse_lazy('horizon:project:firewalls:index')
def get_context_data(self, request):
- pid = self.tab_group.kwargs['policy_id']
- try:
- policy = api.fwaas.policy_get(request, pid)
- except Exception:
- exceptions.handle(request,
- _('Unable to retrieve policy details.'),
- redirect=self.failure_url)
- return {'policy': policy}
+ return {"policy": self.tab_group.kwargs['policy']}
class FirewallDetailsTab(tabs.Tab):
- name = _("Firewall Details")
+ name = _("Firewall")
slug = "firewalldetails"
template_name = "project/firewalls/_firewall_details.html"
- failure_url = reverse_lazy('horizon:project:firewalls:index')
def get_context_data(self, request):
- fid = self.tab_group.kwargs['firewall_id']
- try:
- firewall = api.fwaas.firewall_get(request, fid)
- body = {'firewall': firewall}
- if api.neutron.is_extension_supported(request,
- 'fwaasrouterinsertion'):
- tenant_id = self.request.user.tenant_id
- tenant_routers = api.neutron.router_list(request,
- tenant_id=tenant_id)
- router_ids = firewall.get_dict()['router_ids']
- routers = [r for r in tenant_routers
- if r['id'] in router_ids]
- body['routers'] = routers
- except Exception:
- exceptions.handle(request,
- _('Unable to retrieve firewall details.'),
- redirect=self.failure_url)
- return body
+ return {"firewall": self.tab_group.kwargs['firewall']}
class FirewallTabs(tabs.TabGroup):
diff --git a/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_firewall_details.html b/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_firewall_details.html
index 37fb59bfb1..ccbeec737a 100644
--- a/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_firewall_details.html
+++ b/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_firewall_details.html
@@ -1,8 +1,7 @@
{% load i18n sizeformat parse_date %}
{% load url from future %}
-
-
+
- {% trans "Name" %}
- {{ firewall.name|default:_("-") }}
diff --git a/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_policy_details.html b/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_policy_details.html
index d6a6750e06..19ef4efcff 100644
--- a/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_policy_details.html
+++ b/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_policy_details.html
@@ -1,8 +1,7 @@
{% load i18n sizeformat parse_date %}
{% load url from future %}
-
-
+
- {% trans "Name" %}
- {{ policy.name|default:_("-") }}
diff --git a/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_rule_details.html b/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_rule_details.html
index 1ac1ba0412..d95d799da3 100644
--- a/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_rule_details.html
+++ b/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_rule_details.html
@@ -1,8 +1,7 @@
{% load i18n sizeformat parse_date %}
{% load url from future %}
-
-
+
- {% trans "Name" %}
- {{ rule.name|default:_("-") }}
diff --git a/openstack_dashboard/dashboards/project/firewalls/urls.py b/openstack_dashboard/dashboards/project/firewalls/urls.py
index 4ae691160f..dc04b2f274 100644
--- a/openstack_dashboard/dashboards/project/firewalls/urls.py
+++ b/openstack_dashboard/dashboards/project/firewalls/urls.py
@@ -20,6 +20,11 @@ from openstack_dashboard.dashboards.project.firewalls import views
urlpatterns = patterns(
'openstack_dashboard.dashboards.project.firewalls.views',
url(r'^$', views.IndexView.as_view(), name='index'),
+ url(r'^\?tab=fwtabs__firewalls$',
+ views.IndexView.as_view(), name='firewalls'),
+ url(r'^\?tab=fwtabs__rules$', views.IndexView.as_view(), name='rules'),
+ url(r'^\?tab=fwtabs__policies$',
+ views.IndexView.as_view(), name='policies'),
url(r'^addrule$', views.AddRuleView.as_view(), name='addrule'),
url(r'^addpolicy$', views.AddPolicyView.as_view(), name='addpolicy'),
url(r'^addfirewall/(?P[^/]+)/$',
diff --git a/openstack_dashboard/dashboards/project/firewalls/views.py b/openstack_dashboard/dashboards/project/firewalls/views.py
index 34e76f3e98..a06925f17f 100644
--- a/openstack_dashboard/dashboards/project/firewalls/views.py
+++ b/openstack_dashboard/dashboards/project/firewalls/views.py
@@ -79,23 +79,127 @@ class AddFirewallView(workflows.WorkflowView):
return workflow
-class FireWallDetailTabs(tabs.TabView):
- template_name = 'project/firewalls/details_tabs.html'
-
-
-class RuleDetailsView(FireWallDetailTabs):
+class RuleDetailsView(tabs.TabView):
tab_group_class = (RuleDetailsTabs)
- page_title = _("Firewall Rule Details")
+ template_name = 'horizon/common/_detail.html'
+ page_title = "{{ rule.name|default:rule.id }}"
+ failure_url = reverse_lazy('horizon:project:firewalls:index')
+
+ def get_context_data(self, **kwargs):
+ context = super(RuleDetailsView, self).get_context_data(**kwargs)
+ rule = self.get_data()
+ table = fw_tabs.RulesTable(self.request)
+ breadcrumb = [
+ (_("Firewalls"),
+ reverse_lazy('horizon:project:firewalls:firewalls')),
+ (_("Rules"), reverse_lazy('horizon:project:firewalls:rules'))]
+ context["custom_breadcrumb"] = breadcrumb
+ context["rule"] = rule
+ context["url"] = self.failure_url
+ context["actions"] = table.render_row_actions(rule)
+ return context
+
+ @memoized.memoized_method
+ def get_data(self):
+ try:
+ rule_id = self.kwargs['rule_id']
+ rule = api.fwaas.rule_get(self.request, rule_id)
+ except Exception:
+ exceptions.handle(self.request,
+ _('Unable to retrieve rule details.'),
+ redirect=self.failure_url)
+ return rule
+
+ def get_tabs(self, request, *args, **kwargs):
+ rule = self.get_data()
+ return self.tab_group_class(request, rule=rule, **kwargs)
-class PolicyDetailsView(FireWallDetailTabs):
+class PolicyDetailsView(tabs.TabView):
tab_group_class = (PolicyDetailsTabs)
- page_title = _("Firewall Policy Details")
+ template_name = 'horizon/common/_detail.html'
+ page_title = "{{ policy.name|default:policy.id }}"
+ failure_url = reverse_lazy('horizon:project:firewalls:index')
+
+ def get_context_data(self, **kwargs):
+ context = super(PolicyDetailsView, self).get_context_data(**kwargs)
+ policy = self.get_data()
+ table = fw_tabs.PoliciesTable(self.request)
+ breadcrumb = [
+ (_("Firewalls"),
+ reverse_lazy('horizon:project:firewalls:firewalls')),
+ (_("Policies"),
+ reverse_lazy('horizon:project:firewalls:policies'))]
+ context["custom_breadcrumb"] = breadcrumb
+ context["policy"] = policy
+ context["url"] = self.failure_url
+ context["actions"] = table.render_row_actions(policy)
+ return context
+
+ @memoized.memoized_method
+ def get_data(self):
+ try:
+ policy_id = self.kwargs['policy_id']
+ policy = api.fwaas.policy_get(self.request, policy_id)
+ except Exception:
+ exceptions.handle(self.request,
+ _('Unable to retrieve policy details.'),
+ redirect=self.failure_url)
+ return policy
+
+ def get_tabs(self, request, *args, **kwargs):
+ policy = self.get_data()
+ return self.tab_group_class(request, policy=policy, **kwargs)
-class FirewallDetailsView(FireWallDetailTabs):
+class FirewallDetailsView(tabs.TabView):
tab_group_class = (FirewallDetailsTabs)
- page_title = _("Firewall Details")
+ template_name = 'horizon/common/_detail.html'
+ page_title = "{{ firewall.name|default:firewall.id }}"
+ failure_url = reverse_lazy('horizon:project:firewalls:index')
+
+ def get_context_data(self, **kwargs):
+ context = super(FirewallDetailsView, self).get_context_data(**kwargs)
+ firewall = self.get_data()
+ routers = self.get_routers_data(firewall)
+ table = fw_tabs.FirewallsTable(self.request)
+ context["firewall"] = firewall
+ context["routers"] = routers
+ context["url"] = self.failure_url
+ context["actions"] = table.render_row_actions(firewall)
+ return context
+
+ @memoized.memoized_method
+ def get_data(self):
+ try:
+ firewall_id = self.kwargs['firewall_id']
+ firewall = api.fwaas.firewall_get(self.request, firewall_id)
+ except Exception:
+ exceptions.handle(self.request,
+ _('Unable to retrieve firewall details.'),
+ redirect=self.failure_url)
+ return firewall
+
+ @memoized.memoized_method
+ def get_routers_data(self, firewall):
+ routers = []
+ try:
+ if api.neutron.is_extension_supported(self.request,
+ 'fwaasrouterinsertion'):
+ tenant_id = self.request.user.tenant_id
+ tenant_routers = api.neutron.router_list(self.request,
+ tenant_id=tenant_id)
+ router_ids = firewall.get_dict()['router_ids']
+ routers = [r for r in tenant_routers
+ if r['id'] in router_ids]
+ except Exception:
+ exceptions.handle(self.request,
+ _('Unable to retrieve list of routers.'), )
+ return routers
+
+ def get_tabs(self, request, *args, **kwargs):
+ firewall = self.get_data()
+ return self.tab_group_class(request, firewall=firewall, **kwargs)
class UpdateRuleView(forms.ModalFormView):
diff --git a/openstack_dashboard/dashboards/project/firewalls/workflows.py b/openstack_dashboard/dashboards/project/firewalls/workflows.py
index 0055cc8613..5fe8177ca7 100644
--- a/openstack_dashboard/dashboards/project/firewalls/workflows.py
+++ b/openstack_dashboard/dashboards/project/firewalls/workflows.py
@@ -70,7 +70,7 @@ class AddRuleAction(workflows.Action):
super(AddRuleAction, self).__init__(request, *args, **kwargs)
class Meta(object):
- name = _("AddRule")
+ name = _("Rule")
permissions = ('openstack.services.network',)
help_text = _("Create a firewall rule.\n\n"
"Protocol and action must be specified. "
@@ -230,7 +230,7 @@ class AddPolicyAction(workflows.Action):
super(AddPolicyAction, self).__init__(request, *args, **kwargs)
class Meta(object):
- name = _("AddPolicy")
+ name = _("Policy")
permissions = ('openstack.services.network',)
help_text = _("Create a firewall policy with an ordered list "
"of firewall rules.\n\n"
@@ -301,7 +301,7 @@ class AddFirewallAction(workflows.Action):
self.fields['firewall_policy_id'].choices = firewall_policy_id_choices
class Meta(object):
- name = _("AddFirewall")
+ name = _("Firewall")
permissions = ('openstack.services.network',)
help_text = _("Create a firewall based on a policy.\n\n"
"A policy must be selected. "
diff --git a/openstack_dashboard/dashboards/project/networks/ports/views.py b/openstack_dashboard/dashboards/project/networks/ports/views.py
index 8766f9e76e..257b0ee614 100644
--- a/openstack_dashboard/dashboards/project/networks/ports/views.py
+++ b/openstack_dashboard/dashboards/project/networks/ports/views.py
@@ -81,10 +81,10 @@ class DetailView(tabs.TabView):
network_id=port.network_id)
# TODO(robcresswell) Add URL for "Ports" crumb after bug/1416838
breadcrumb = [
- ("Networks", self.get_redirect_url()),
+ (_("Networks"), self.get_redirect_url()),
(network_nav, reverse('horizon:project:networks:detail',
args=(port.network_id,))),
- ("Ports",), ]
+ (_("Ports"),), ]
context["custom_breadcrumb"] = breadcrumb
context["port"] = port
context["url"] = self.get_redirect_url()