Add dropdown actions to all details pages
Partially implements: blueprint detail-pages-ia Change-Id: Ic09385d19b417b256cbc51d044d66ecbb54c7d52
This commit is contained in:
parent
0ee604c179
commit
aa93056953
|
@ -103,6 +103,8 @@ class NetworkTests(test.BaseAdminViewTests):
|
||||||
.AndReturn(mac_learning)
|
.AndReturn(mac_learning)
|
||||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||||
'dhcp_agent_scheduler').AndReturn(True)
|
'dhcp_agent_scheduler').AndReturn(True)
|
||||||
|
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||||
|
'dhcp_agent_scheduler').AndReturn(True)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
@ -186,6 +188,8 @@ class NetworkTests(test.BaseAdminViewTests):
|
||||||
.AndReturn(mac_learning)
|
.AndReturn(mac_learning)
|
||||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||||
'dhcp_agent_scheduler').AndReturn(True)
|
'dhcp_agent_scheduler').AndReturn(True)
|
||||||
|
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||||
|
'dhcp_agent_scheduler').AndReturn(True)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
@ -228,6 +232,12 @@ class NetworkTests(test.BaseAdminViewTests):
|
||||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||||
'mac-learning')\
|
'mac-learning')\
|
||||||
.AndReturn(mac_learning)
|
.AndReturn(mac_learning)
|
||||||
|
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||||
|
'dhcp_agent_scheduler')\
|
||||||
|
.AndReturn(True)
|
||||||
|
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||||
|
'dhcp_agent_scheduler')\
|
||||||
|
.AndReturn(True)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
@ -945,6 +955,9 @@ class NetworkPortTests(test.BaseAdminViewTests):
|
||||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||||
'mac-learning')\
|
'mac-learning')\
|
||||||
.AndReturn(mac_learning)
|
.AndReturn(mac_learning)
|
||||||
|
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||||
|
'mac-learning')\
|
||||||
|
.AndReturn(mac_learning)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,6 @@ class DetailView(tables.MultiTableView):
|
||||||
ports_tables.PortsTable,
|
ports_tables.PortsTable,
|
||||||
agents_tables.DHCPAgentsTable)
|
agents_tables.DHCPAgentsTable)
|
||||||
template_name = 'project/networks/detail.html'
|
template_name = 'project/networks/detail.html'
|
||||||
failure_url = reverse_lazy('horizon:admin:networks:index')
|
|
||||||
|
|
||||||
def get_subnets_data(self):
|
def get_subnets_data(self):
|
||||||
try:
|
try:
|
||||||
|
@ -148,16 +147,16 @@ class DetailView(tables.MultiTableView):
|
||||||
network = api.neutron.network_get(self.request, network_id)
|
network = api.neutron.network_get(self.request, network_id)
|
||||||
network.set_id_as_name_if_empty(length=0)
|
network.set_id_as_name_if_empty(length=0)
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = self.failure_url
|
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_('Unable to retrieve details for '
|
_('Unable to retrieve details for '
|
||||||
'network "%s".') % network_id,
|
'network "%s".') % network_id,
|
||||||
redirect=redirect)
|
redirect=self.get_redirect_url())
|
||||||
|
|
||||||
return network
|
return network
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
context["network"] = self._get_data()
|
network = self._get_data()
|
||||||
# Needs to exclude agents table if dhcp-agent-scheduler extension
|
# Needs to exclude agents table if dhcp-agent-scheduler extension
|
||||||
# is not supported.
|
# is not supported.
|
||||||
try:
|
try:
|
||||||
|
@ -166,8 +165,17 @@ class DetailView(tables.MultiTableView):
|
||||||
context['dhcp_agent_support'] = dhcp_agent_support
|
context['dhcp_agent_support'] = dhcp_agent_support
|
||||||
except Exception:
|
except Exception:
|
||||||
context['dhcp_agent_support'] = False
|
context['dhcp_agent_support'] = False
|
||||||
|
|
||||||
|
table = networks_tables.NetworksTable(self.request)
|
||||||
|
context["network"] = network
|
||||||
|
context["url"] = self.get_redirect_url()
|
||||||
|
context["actions"] = table.render_row_actions(network)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
|
return reverse_lazy('horizon:admin:networks:index')
|
||||||
|
|
||||||
|
|
||||||
class UpdateView(user_views.UpdateView):
|
class UpdateView(user_views.UpdateView):
|
||||||
form_class = project_forms.UpdateNetwork
|
form_class = project_forms.UpdateNetwork
|
||||||
|
|
|
@ -59,5 +59,6 @@ class UpdateStatusView(forms.ModalFormView):
|
||||||
class DetailView(views.DetailView):
|
class DetailView(views.DetailView):
|
||||||
tab_group_class = vol_snapshot_tabs.SnapshotDetailsTabs
|
tab_group_class = vol_snapshot_tabs.SnapshotDetailsTabs
|
||||||
|
|
||||||
def get_redirect_url(self):
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
return reverse('horizon:admin:volumes:index')
|
return reverse('horizon:admin:volumes:index')
|
||||||
|
|
|
@ -32,6 +32,8 @@ from openstack_dashboard import api
|
||||||
|
|
||||||
from openstack_dashboard.dashboards.project.images.images \
|
from openstack_dashboard.dashboards.project.images.images \
|
||||||
import forms as project_forms
|
import forms as project_forms
|
||||||
|
from openstack_dashboard.dashboards.project.images.images \
|
||||||
|
import tables as project_tables
|
||||||
from openstack_dashboard.dashboards.project.images.images \
|
from openstack_dashboard.dashboards.project.images.images \
|
||||||
import tabs as project_tabs
|
import tabs as project_tabs
|
||||||
|
|
||||||
|
@ -84,18 +86,25 @@ class DetailView(tabs.TabView):
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
context["image"] = self.get_data()
|
image = self.get_data()
|
||||||
|
table = project_tables.ImagesTable(self.request)
|
||||||
|
context["image"] = image
|
||||||
|
context["url"] = self.get_redirect_url()
|
||||||
|
context["actions"] = table.render_row_actions(image)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
|
return reverse_lazy('horizon:project:images:index')
|
||||||
|
|
||||||
@memoized.memoized_method
|
@memoized.memoized_method
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
try:
|
try:
|
||||||
return api.glance.image_get(self.request, self.kwargs['image_id'])
|
return api.glance.image_get(self.request, self.kwargs['image_id'])
|
||||||
except Exception:
|
except Exception:
|
||||||
url = reverse('horizon:project:images:index')
|
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_('Unable to retrieve image details.'),
|
_('Unable to retrieve image details.'),
|
||||||
redirect=url)
|
redirect=self.get_redirect_url())
|
||||||
|
|
||||||
def get_tabs(self, request, *args, **kwargs):
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
image = self.get_data()
|
image = self.get_data()
|
||||||
|
|
|
@ -253,7 +253,11 @@ class DetailView(tabs.TabView):
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
context["instance"] = self.get_data()
|
instance = self.get_data()
|
||||||
|
context["instance"] = instance
|
||||||
|
table = project_tables.InstancesTable(self.request)
|
||||||
|
context["url"] = reverse(self.redirect_url)
|
||||||
|
context["actions"] = table.render_row_actions(instance)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@memoized.memoized_method
|
@memoized.memoized_method
|
||||||
|
|
|
@ -21,7 +21,6 @@ from horizon import tabs
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
|
|
||||||
from openstack_dashboard.dashboards.project.loadbalancers import tables
|
from openstack_dashboard.dashboards.project.loadbalancers import tables
|
||||||
from openstack_dashboard.dashboards.project.loadbalancers import utils
|
|
||||||
|
|
||||||
|
|
||||||
class PoolsTab(tabs.TableTab):
|
class PoolsTab(tabs.TableTab):
|
||||||
|
@ -94,16 +93,7 @@ class PoolDetailsTab(tabs.Tab):
|
||||||
template_name = "project/loadbalancers/_pool_details.html"
|
template_name = "project/loadbalancers/_pool_details.html"
|
||||||
|
|
||||||
def get_context_data(self, request):
|
def get_context_data(self, request):
|
||||||
pid = self.tab_group.kwargs['pool_id']
|
pool = self.tab_group.kwargs['pool']
|
||||||
try:
|
|
||||||
pool = api.lbaas.pool_get(request, pid)
|
|
||||||
except Exception:
|
|
||||||
pool = []
|
|
||||||
exceptions.handle(request,
|
|
||||||
_('Unable to retrieve pool details.'))
|
|
||||||
for monitor in pool.health_monitors:
|
|
||||||
display_name = utils.get_monitor_display_name(monitor)
|
|
||||||
setattr(monitor, 'display_name', display_name)
|
|
||||||
return {'pool': pool}
|
return {'pool': pool}
|
||||||
|
|
||||||
|
|
||||||
|
@ -129,13 +119,7 @@ class MemberDetailsTab(tabs.Tab):
|
||||||
template_name = "project/loadbalancers/_member_details.html"
|
template_name = "project/loadbalancers/_member_details.html"
|
||||||
|
|
||||||
def get_context_data(self, request):
|
def get_context_data(self, request):
|
||||||
mid = self.tab_group.kwargs['member_id']
|
member = self.tab_group.kwargs['member']
|
||||||
try:
|
|
||||||
member = api.lbaas.member_get(request, mid)
|
|
||||||
except Exception:
|
|
||||||
member = []
|
|
||||||
exceptions.handle(self.tab_group.request,
|
|
||||||
_('Unable to retrieve member details.'))
|
|
||||||
return {'member': member}
|
return {'member': member}
|
||||||
|
|
||||||
|
|
||||||
|
@ -145,13 +129,7 @@ class MonitorDetailsTab(tabs.Tab):
|
||||||
template_name = "project/loadbalancers/_monitor_details.html"
|
template_name = "project/loadbalancers/_monitor_details.html"
|
||||||
|
|
||||||
def get_context_data(self, request):
|
def get_context_data(self, request):
|
||||||
mid = self.tab_group.kwargs['monitor_id']
|
monitor = self.tab_group.kwargs['monitor']
|
||||||
try:
|
|
||||||
monitor = api.lbaas.pool_health_monitor_get(request, mid)
|
|
||||||
except Exception:
|
|
||||||
monitor = []
|
|
||||||
exceptions.handle(self.tab_group.request,
|
|
||||||
_('Unable to retrieve monitor details.'))
|
|
||||||
return {'monitor': monitor}
|
return {'monitor': monitor}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,11 @@ from horizon import workflows
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
from openstack_dashboard.dashboards.project.loadbalancers \
|
from openstack_dashboard.dashboards.project.loadbalancers \
|
||||||
import forms as project_forms
|
import forms as project_forms
|
||||||
|
from openstack_dashboard.dashboards.project.loadbalancers \
|
||||||
|
import tables as project_tables
|
||||||
from openstack_dashboard.dashboards.project.loadbalancers \
|
from openstack_dashboard.dashboards.project.loadbalancers \
|
||||||
import tabs as project_tabs
|
import tabs as project_tabs
|
||||||
|
from openstack_dashboard.dashboards.project.loadbalancers import utils
|
||||||
from openstack_dashboard.dashboards.project.loadbalancers \
|
from openstack_dashboard.dashboards.project.loadbalancers \
|
||||||
import workflows as project_workflows
|
import workflows as project_workflows
|
||||||
|
|
||||||
|
@ -115,24 +118,110 @@ class AddMonitorView(workflows.WorkflowView):
|
||||||
|
|
||||||
|
|
||||||
class PoolDetailsView(tabs.TabView):
|
class PoolDetailsView(tabs.TabView):
|
||||||
tab_group_class = (project_tabs.PoolDetailsTabs)
|
tab_group_class = project_tabs.PoolDetailsTabs
|
||||||
template_name = 'project/loadbalancers/details_tabs.html'
|
template_name = 'project/loadbalancers/details_tabs.html'
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
|
def get_data(self):
|
||||||
|
pid = self.kwargs['pool_id']
|
||||||
|
|
||||||
|
try:
|
||||||
|
pool = api.lbaas.pool_get(self.request, pid)
|
||||||
|
except Exception:
|
||||||
|
pool = []
|
||||||
|
exceptions.handle(self.request,
|
||||||
|
_('Unable to retrieve pool details.'))
|
||||||
|
else:
|
||||||
|
for monitor in pool.health_monitors:
|
||||||
|
display_name = utils.get_monitor_display_name(monitor)
|
||||||
|
setattr(monitor, 'display_name', display_name)
|
||||||
|
|
||||||
|
return pool
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(PoolDetailsView, self).get_context_data(**kwargs)
|
||||||
|
pool = self.get_data()
|
||||||
|
context['pool'] = pool
|
||||||
|
table = project_tables.PoolsTable(self.request)
|
||||||
|
context["url"] = self.get_redirect_url()
|
||||||
|
context["actions"] = table.render_row_actions(pool)
|
||||||
|
return context
|
||||||
|
|
||||||
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
|
pool = self.get_data()
|
||||||
|
return self.tab_group_class(self.request, pool=pool, **kwargs)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
|
return reverse_lazy("horizon:project:loadbalancers:index")
|
||||||
|
|
||||||
|
|
||||||
class VipDetailsView(tabs.TabView):
|
class VipDetailsView(tabs.TabView):
|
||||||
tab_group_class = (project_tabs.VipDetailsTabs)
|
tab_group_class = project_tabs.VipDetailsTabs
|
||||||
template_name = 'project/loadbalancers/details_tabs.html'
|
template_name = 'project/loadbalancers/details_tabs.html'
|
||||||
|
|
||||||
|
|
||||||
class MemberDetailsView(tabs.TabView):
|
class MemberDetailsView(tabs.TabView):
|
||||||
tab_group_class = (project_tabs.MemberDetailsTabs)
|
tab_group_class = project_tabs.MemberDetailsTabs
|
||||||
template_name = 'project/loadbalancers/details_tabs.html'
|
template_name = 'project/loadbalancers/details_tabs.html'
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
|
def get_data(self):
|
||||||
|
mid = self.kwargs['member_id']
|
||||||
|
try:
|
||||||
|
return api.lbaas.member_get(self.request, mid)
|
||||||
|
except Exception:
|
||||||
|
exceptions.handle(self.request,
|
||||||
|
_('Unable to retrieve member details.'))
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(MemberDetailsView, self).get_context_data(**kwargs)
|
||||||
|
member = self.get_data()
|
||||||
|
context['member'] = member
|
||||||
|
table = project_tables.MembersTable(self.request)
|
||||||
|
context["url"] = self.get_redirect_url()
|
||||||
|
context["actions"] = table.render_row_actions(member)
|
||||||
|
return context
|
||||||
|
|
||||||
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
|
member = self.get_data()
|
||||||
|
return self.tab_group_class(request, member=member, **kwargs)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
|
return reverse_lazy("horizon:project:loadbalancers:index")
|
||||||
|
|
||||||
|
|
||||||
class MonitorDetailsView(tabs.TabView):
|
class MonitorDetailsView(tabs.TabView):
|
||||||
tab_group_class = (project_tabs.MonitorDetailsTabs)
|
tab_group_class = project_tabs.MonitorDetailsTabs
|
||||||
template_name = 'project/loadbalancers/details_tabs.html'
|
template_name = 'project/loadbalancers/details_tabs.html'
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
|
def get_data(self):
|
||||||
|
mid = self.kwargs['monitor_id']
|
||||||
|
try:
|
||||||
|
return api.lbaas.pool_health_monitor_get(self.request, mid)
|
||||||
|
except Exception:
|
||||||
|
exceptions.handle(self.request,
|
||||||
|
_('Unable to retrieve monitor details.'))
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(MonitorDetailsView, self).get_context_data(**kwargs)
|
||||||
|
monitor = self.get_data()
|
||||||
|
context['monitor'] = monitor
|
||||||
|
table = project_tables.MonitorsTable(self.request)
|
||||||
|
context["url"] = self.get_redirect_url()
|
||||||
|
context["actions"] = table.render_row_actions(monitor)
|
||||||
|
return context
|
||||||
|
|
||||||
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
|
monitor = self.get_data()
|
||||||
|
return self.tab_group_class(request, monitor=monitor, **kwargs)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
|
return reverse_lazy("horizon:project:loadbalancers:index")
|
||||||
|
|
||||||
|
|
||||||
class UpdatePoolView(forms.ModalFormView):
|
class UpdatePoolView(forms.ModalFormView):
|
||||||
form_class = project_forms.UpdatePool
|
form_class = project_forms.UpdatePool
|
||||||
|
|
|
@ -12,14 +12,10 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from django.core.urlresolvers import reverse
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from horizon import exceptions
|
|
||||||
from horizon import tabs
|
from horizon import tabs
|
||||||
|
|
||||||
from openstack_dashboard import api
|
|
||||||
|
|
||||||
|
|
||||||
class OverviewTab(tabs.Tab):
|
class OverviewTab(tabs.Tab):
|
||||||
name = _("Overview")
|
name = _("Overview")
|
||||||
|
@ -27,16 +23,7 @@ class OverviewTab(tabs.Tab):
|
||||||
template_name = "project/networks/ports/_detail_overview.html"
|
template_name = "project/networks/ports/_detail_overview.html"
|
||||||
|
|
||||||
def get_context_data(self, request):
|
def get_context_data(self, request):
|
||||||
port_id = self.tab_group.kwargs['port_id']
|
port = self.tab_group.kwargs['port']
|
||||||
try:
|
|
||||||
port = api.neutron.port_get(self.request, port_id)
|
|
||||||
except Exception:
|
|
||||||
redirect = reverse('horizon:project:networks:index')
|
|
||||||
msg = _('Unable to retrieve port details.')
|
|
||||||
exceptions.handle(request, msg, redirect=redirect)
|
|
||||||
if (api.neutron.is_extension_supported(request, 'mac-learning') and
|
|
||||||
not hasattr(port, 'mac_state')):
|
|
||||||
port.mac_state = api.neutron.OFF_STATE
|
|
||||||
return {'port': port}
|
return {'port': port}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,8 @@ from openstack_dashboard import api
|
||||||
|
|
||||||
from openstack_dashboard.dashboards.project.networks.ports \
|
from openstack_dashboard.dashboards.project.networks.ports \
|
||||||
import forms as project_forms
|
import forms as project_forms
|
||||||
|
from openstack_dashboard.dashboards.project.networks.ports \
|
||||||
|
import tables as project_tables
|
||||||
from openstack_dashboard.dashboards.project.networks.ports \
|
from openstack_dashboard.dashboards.project.networks.ports \
|
||||||
import tabs as project_tabs
|
import tabs as project_tabs
|
||||||
|
|
||||||
|
@ -32,6 +34,42 @@ class DetailView(tabs.TabView):
|
||||||
tab_group_class = project_tabs.PortDetailTabs
|
tab_group_class = project_tabs.PortDetailTabs
|
||||||
template_name = 'project/networks/ports/detail.html'
|
template_name = 'project/networks/ports/detail.html'
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
|
def get_data(self):
|
||||||
|
port_id = self.kwargs['port_id']
|
||||||
|
|
||||||
|
try:
|
||||||
|
port = api.neutron.port_get(self.request, port_id)
|
||||||
|
except Exception:
|
||||||
|
port = []
|
||||||
|
redirect = self.get_redirect_url()
|
||||||
|
msg = _('Unable to retrieve port details.')
|
||||||
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
|
|
||||||
|
if (api.neutron.is_extension_supported(self.request, 'mac-learning')
|
||||||
|
and not hasattr(port, 'mac_state')):
|
||||||
|
port.mac_state = api.neutron.OFF_STATE
|
||||||
|
|
||||||
|
return port
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
|
port = self.get_data()
|
||||||
|
table = project_tables.PortsTable(self.request,
|
||||||
|
network_id=port.network_id)
|
||||||
|
context["port"] = port
|
||||||
|
context["url"] = self.get_redirect_url()
|
||||||
|
context["actions"] = table.render_row_actions(port)
|
||||||
|
return context
|
||||||
|
|
||||||
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
|
port = self.get_data()
|
||||||
|
return self.tab_group_class(request, port=port, **kwargs)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
|
return reverse('horizon:project:networks:index')
|
||||||
|
|
||||||
|
|
||||||
class UpdateView(forms.ModalFormView):
|
class UpdateView(forms.ModalFormView):
|
||||||
form_class = project_forms.UpdatePort
|
form_class = project_forms.UpdatePort
|
||||||
|
|
|
@ -12,15 +12,10 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from django.core.urlresolvers import reverse
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from horizon import exceptions
|
|
||||||
from horizon import tabs
|
from horizon import tabs
|
||||||
|
|
||||||
from openstack_dashboard import api
|
|
||||||
from openstack_dashboard.dashboards.project.networks.subnets import utils
|
|
||||||
|
|
||||||
|
|
||||||
class OverviewTab(tabs.Tab):
|
class OverviewTab(tabs.Tab):
|
||||||
name = _("Overview")
|
name = _("Overview")
|
||||||
|
@ -28,17 +23,7 @@ class OverviewTab(tabs.Tab):
|
||||||
template_name = "project/networks/subnets/_detail_overview.html"
|
template_name = "project/networks/subnets/_detail_overview.html"
|
||||||
|
|
||||||
def get_context_data(self, request):
|
def get_context_data(self, request):
|
||||||
subnet_id = self.tab_group.kwargs['subnet_id']
|
subnet = self.tab_group.kwargs['subnet']
|
||||||
try:
|
|
||||||
subnet = api.neutron.subnet_get(self.request, subnet_id)
|
|
||||||
except Exception:
|
|
||||||
redirect = reverse('horizon:project:networks:index')
|
|
||||||
msg = _('Unable to retrieve subnet details.')
|
|
||||||
exceptions.handle(request, msg, redirect=redirect)
|
|
||||||
if subnet.ip_version == 6:
|
|
||||||
ipv6_modes = utils.get_ipv6_modes_menu_from_attrs(
|
|
||||||
subnet.ipv6_ra_mode, subnet.ipv6_address_mode)
|
|
||||||
subnet.ipv6_modes_desc = utils.IPV6_MODE_MAP.get(ipv6_modes)
|
|
||||||
return {'subnet': subnet}
|
return {'subnet': subnet}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,8 @@ from horizon import workflows
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
|
|
||||||
|
from openstack_dashboard.dashboards.project.networks.subnets \
|
||||||
|
import tables as project_tables
|
||||||
from openstack_dashboard.dashboards.project.networks.subnets \
|
from openstack_dashboard.dashboards.project.networks.subnets \
|
||||||
import tabs as project_tabs
|
import tabs as project_tabs
|
||||||
from openstack_dashboard.dashboards.project.networks.subnets import utils
|
from openstack_dashboard.dashboards.project.networks.subnets import utils
|
||||||
|
@ -99,3 +101,39 @@ class UpdateView(workflows.WorkflowView):
|
||||||
class DetailView(tabs.TabView):
|
class DetailView(tabs.TabView):
|
||||||
tab_group_class = project_tabs.SubnetDetailTabs
|
tab_group_class = project_tabs.SubnetDetailTabs
|
||||||
template_name = 'project/networks/subnets/detail.html'
|
template_name = 'project/networks/subnets/detail.html'
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
|
def get_data(self):
|
||||||
|
subnet_id = self.kwargs['subnet_id']
|
||||||
|
try:
|
||||||
|
subnet = api.neutron.subnet_get(self.request, subnet_id)
|
||||||
|
except Exception:
|
||||||
|
subnet = []
|
||||||
|
msg = _('Unable to retrieve subnet details.')
|
||||||
|
exceptions.handle(self.request, msg,
|
||||||
|
redirect=self.get_redirect_url())
|
||||||
|
else:
|
||||||
|
if subnet.ip_version == 6:
|
||||||
|
ipv6_modes = utils.get_ipv6_modes_menu_from_attrs(
|
||||||
|
subnet.ipv6_ra_mode, subnet.ipv6_address_mode)
|
||||||
|
subnet.ipv6_modes_desc = utils.IPV6_MODE_MAP.get(ipv6_modes)
|
||||||
|
|
||||||
|
return subnet
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
|
subnet = self.get_data()
|
||||||
|
table = project_tables.SubnetsTable(self.request,
|
||||||
|
network_id=subnet.network_id)
|
||||||
|
context["subnet"] = subnet
|
||||||
|
context["url"] = self.get_redirect_url()
|
||||||
|
context["actions"] = table.render_row_actions(subnet)
|
||||||
|
return context
|
||||||
|
|
||||||
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
|
subnet = self.get_data()
|
||||||
|
return self.tab_group_class(request, subnet=subnet, **kwargs)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
|
return reverse('horizon:project:networks:index')
|
||||||
|
|
|
@ -1609,6 +1609,9 @@ class NetworkPortTests(test.TestCase):
|
||||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||||
'mac-learning')\
|
'mac-learning')\
|
||||||
.AndReturn(mac_learning)
|
.AndReturn(mac_learning)
|
||||||
|
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||||
|
'mac-learning')\
|
||||||
|
.AndReturn(mac_learning)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
res = self.client.get(reverse('horizon:project:networks:ports:detail',
|
res = self.client.get(reverse('horizon:project:networks:ports:detail',
|
||||||
|
|
|
@ -96,7 +96,6 @@ class UpdateView(forms.ModalFormView):
|
||||||
class DetailView(tables.MultiTableView):
|
class DetailView(tables.MultiTableView):
|
||||||
table_classes = (subnet_tables.SubnetsTable, port_tables.PortsTable)
|
table_classes = (subnet_tables.SubnetsTable, port_tables.PortsTable)
|
||||||
template_name = 'project/networks/detail.html'
|
template_name = 'project/networks/detail.html'
|
||||||
failure_url = reverse_lazy('horizon:project:networks:index')
|
|
||||||
|
|
||||||
def get_subnets_data(self):
|
def get_subnets_data(self):
|
||||||
try:
|
try:
|
||||||
|
@ -132,10 +131,19 @@ class DetailView(tables.MultiTableView):
|
||||||
except Exception:
|
except Exception:
|
||||||
msg = _('Unable to retrieve details for network "%s".') \
|
msg = _('Unable to retrieve details for network "%s".') \
|
||||||
% (network_id)
|
% (network_id)
|
||||||
exceptions.handle(self.request, msg, redirect=self.failure_url)
|
exceptions.handle(self.request, msg,
|
||||||
|
redirect=self.get_redirect_url())
|
||||||
return network
|
return network
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
context["network"] = self._get_data()
|
network = self._get_data()
|
||||||
|
context["network"] = network
|
||||||
|
table = project_tables.NetworksTable(self.request)
|
||||||
|
context["url"] = self.get_redirect_url()
|
||||||
|
context["actions"] = table.render_row_actions(network)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
|
return reverse_lazy('horizon:project:networks:index')
|
||||||
|
|
|
@ -125,11 +125,17 @@ class DetailView(tabs.TabbedTableView):
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
context["router"] = self._get_data()
|
router = self._get_data()
|
||||||
|
table = rtables.RoutersTable(self.request)
|
||||||
|
|
||||||
|
context["router"] = router
|
||||||
|
context["url"] = self.failure_url
|
||||||
|
context["actions"] = table.render_row_actions(router)
|
||||||
context['dvr_supported'] = api.neutron.get_feature_permission(
|
context['dvr_supported'] = api.neutron.get_feature_permission(
|
||||||
self.request, "dvr", "get")
|
self.request, "dvr", "get")
|
||||||
context['ha_supported'] = api.neutron.get_feature_permission(
|
context['ha_supported'] = api.neutron.get_feature_permission(
|
||||||
self.request, "l3-ha", "get")
|
self.request, "l3-ha", "get")
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
|
|
|
@ -197,7 +197,11 @@ class DetailView(tabs.TabView):
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
context["stack"] = self.get_data(self.request, **kwargs)
|
stack = self.get_data(self.request, **kwargs)
|
||||||
|
table = project_tables.StacksTable(self.request)
|
||||||
|
context["stack"] = stack
|
||||||
|
context["url"] = self.get_redirect_url()
|
||||||
|
context["actions"] = table.render_row_actions(stack)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@memoized.memoized_method
|
@memoized.memoized_method
|
||||||
|
@ -210,13 +214,16 @@ class DetailView(tabs.TabView):
|
||||||
return stack
|
return stack
|
||||||
except Exception:
|
except Exception:
|
||||||
msg = _("Unable to retrieve stack.")
|
msg = _("Unable to retrieve stack.")
|
||||||
redirect = reverse('horizon:project:stacks:index')
|
exceptions.handle(request, msg, redirect=self.get_redirect_url())
|
||||||
exceptions.handle(request, msg, redirect=redirect)
|
|
||||||
|
|
||||||
def get_tabs(self, request, **kwargs):
|
def get_tabs(self, request, **kwargs):
|
||||||
stack = self.get_data(request, **kwargs)
|
stack = self.get_data(request, **kwargs)
|
||||||
return self.tab_group_class(request, stack=stack, **kwargs)
|
return self.tab_group_class(request, stack=stack, **kwargs)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
|
return reverse('horizon:project:stacks:index')
|
||||||
|
|
||||||
|
|
||||||
class ResourceView(tabs.TabView):
|
class ResourceView(tabs.TabView):
|
||||||
tab_group_class = project_tabs.ResourceDetailTabs
|
tab_group_class = project_tabs.ResourceDetailTabs
|
||||||
|
|
|
@ -22,6 +22,8 @@ from horizon.utils import memoized
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
from openstack_dashboard.dashboards.project.volumes.backups \
|
from openstack_dashboard.dashboards.project.volumes.backups \
|
||||||
import forms as backup_forms
|
import forms as backup_forms
|
||||||
|
from openstack_dashboard.dashboards.project.volumes.backups \
|
||||||
|
import tables as backup_tables
|
||||||
from openstack_dashboard.dashboards.project.volumes.backups \
|
from openstack_dashboard.dashboards.project.volumes.backups \
|
||||||
import tabs as backup_tabs
|
import tabs as backup_tabs
|
||||||
|
|
||||||
|
@ -46,7 +48,12 @@ class BackupDetailView(tabs.TabView):
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(BackupDetailView, self).get_context_data(**kwargs)
|
context = super(BackupDetailView, self).get_context_data(**kwargs)
|
||||||
context["backup"] = self.get_data()
|
backup = self.get_data()
|
||||||
|
table = backup_tables.BackupsTable(self.request)
|
||||||
|
context["backup"] = backup
|
||||||
|
context["url"] = self.get_redirect_url()
|
||||||
|
context["actions"] = table.render_row_actions(backup)
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@memoized.memoized_method
|
@memoized.memoized_method
|
||||||
|
@ -56,16 +63,19 @@ class BackupDetailView(tabs.TabView):
|
||||||
backup = api.cinder.volume_backup_get(self.request,
|
backup = api.cinder.volume_backup_get(self.request,
|
||||||
backup_id)
|
backup_id)
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse('horizon:project:volumes:index')
|
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_('Unable to retrieve backup details.'),
|
_('Unable to retrieve backup details.'),
|
||||||
redirect=redirect)
|
redirect=self.get_redirect_url())
|
||||||
return backup
|
return backup
|
||||||
|
|
||||||
def get_tabs(self, request, *args, **kwargs):
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
backup = self.get_data()
|
backup = self.get_data()
|
||||||
return self.tab_group_class(request, backup=backup, **kwargs)
|
return self.tab_group_class(request, backup=backup, **kwargs)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
|
return reverse('horizon:project:volumes:index')
|
||||||
|
|
||||||
|
|
||||||
class RestoreBackupView(forms.ModalFormView):
|
class RestoreBackupView(forms.ModalFormView):
|
||||||
form_class = backup_forms.RestoreBackupForm
|
form_class = backup_forms.RestoreBackupForm
|
||||||
|
|
|
@ -23,6 +23,8 @@ from openstack_dashboard import api
|
||||||
|
|
||||||
from openstack_dashboard.dashboards.project.volumes \
|
from openstack_dashboard.dashboards.project.volumes \
|
||||||
.snapshots import forms as vol_snapshot_forms
|
.snapshots import forms as vol_snapshot_forms
|
||||||
|
from openstack_dashboard.dashboards.project.volumes \
|
||||||
|
.snapshots import tables as vol_snapshot_tables
|
||||||
from openstack_dashboard.dashboards.project.volumes \
|
from openstack_dashboard.dashboards.project.volumes \
|
||||||
.snapshots import tabs as vol_snapshot_tabs
|
.snapshots import tabs as vol_snapshot_tabs
|
||||||
|
|
||||||
|
@ -62,7 +64,11 @@ class DetailView(tabs.TabView):
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
context["snapshot"] = self.get_data()
|
snapshot = self.get_data()
|
||||||
|
table = vol_snapshot_tables.VolumeSnapshotsTable(self.request)
|
||||||
|
context["snapshot"] = snapshot
|
||||||
|
context["url"] = self.get_redirect_url()
|
||||||
|
context["actions"] = table.render_row_actions(snapshot)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@memoized.memoized_method
|
@memoized.memoized_method
|
||||||
|
@ -78,7 +84,8 @@ class DetailView(tabs.TabView):
|
||||||
redirect=redirect)
|
redirect=redirect)
|
||||||
return snapshot
|
return snapshot
|
||||||
|
|
||||||
def get_redirect_url(self):
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
return reverse('horizon:project:volumes:index')
|
return reverse('horizon:project:volumes:index')
|
||||||
|
|
||||||
def get_tabs(self, request, *args, **kwargs):
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
|
|
|
@ -44,12 +44,12 @@ class DetailView(tabs.TabView):
|
||||||
template_name = 'project/volumes/volumes/detail.html'
|
template_name = 'project/volumes/volumes/detail.html'
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
datum = self.get_data()
|
|
||||||
table = project_tables.VolumesTable(self.request)
|
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
context["volume"] = datum
|
volume = self.get_data()
|
||||||
|
table = project_tables.VolumesTable(self.request)
|
||||||
|
context["volume"] = volume
|
||||||
context["url"] = self.get_redirect_url()
|
context["url"] = self.get_redirect_url()
|
||||||
context["actions"] = table.render_row_actions(datum)
|
context["actions"] = table.render_row_actions(volume)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@memoized.memoized_method
|
@memoized.memoized_method
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
# @author: Tatiana Mazur
|
# @author: Tatiana Mazur
|
||||||
|
|
||||||
|
|
||||||
from django.core.urlresolvers import reverse_lazy
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
|
@ -117,15 +116,9 @@ class IKEPolicyDetailsTab(tabs.Tab):
|
||||||
name = _("IKE Policy Details")
|
name = _("IKE Policy Details")
|
||||||
slug = "ikepolicydetails"
|
slug = "ikepolicydetails"
|
||||||
template_name = "project/vpn/_ikepolicy_details.html"
|
template_name = "project/vpn/_ikepolicy_details.html"
|
||||||
failure_url = reverse_lazy('horizon:project:vpn:index')
|
|
||||||
|
|
||||||
def get_context_data(self, request):
|
def get_context_data(self, request):
|
||||||
pid = self.tab_group.kwargs['ikepolicy_id']
|
ikepolicy = self.tab_group.kwargs['ikepolicy']
|
||||||
try:
|
|
||||||
ikepolicy = api.vpn.ikepolicy_get(request, pid)
|
|
||||||
except Exception:
|
|
||||||
msg = _('Unable to retrieve IKE Policy details.')
|
|
||||||
exceptions.handle(request, msg, redirect=self.failure_url)
|
|
||||||
return {'ikepolicy': ikepolicy}
|
return {'ikepolicy': ikepolicy}
|
||||||
|
|
||||||
|
|
||||||
|
@ -138,15 +131,9 @@ class IPSecPolicyDetailsTab(tabs.Tab):
|
||||||
name = _("IPSec Policy Details")
|
name = _("IPSec Policy Details")
|
||||||
slug = "ipsecpolicydetails"
|
slug = "ipsecpolicydetails"
|
||||||
template_name = "project/vpn/_ipsecpolicy_details.html"
|
template_name = "project/vpn/_ipsecpolicy_details.html"
|
||||||
failure_url = reverse_lazy('horizon:project:vpn:index')
|
|
||||||
|
|
||||||
def get_context_data(self, request):
|
def get_context_data(self, request):
|
||||||
pid = self.tab_group.kwargs['ipsecpolicy_id']
|
ipsecpolicy = self.tab_group.kwargs['ipsecpolicy']
|
||||||
try:
|
|
||||||
ipsecpolicy = api.vpn.ipsecpolicy_get(request, pid)
|
|
||||||
except Exception:
|
|
||||||
msg = _('Unable to retrieve IPSec Policy details.')
|
|
||||||
exceptions.handle(request, msg, redirect=self.failure_url)
|
|
||||||
return {'ipsecpolicy': ipsecpolicy}
|
return {'ipsecpolicy': ipsecpolicy}
|
||||||
|
|
||||||
|
|
||||||
|
@ -159,21 +146,9 @@ class VPNServiceDetailsTab(tabs.Tab):
|
||||||
name = _("VPN Service Details")
|
name = _("VPN Service Details")
|
||||||
slug = "vpnservicedetails"
|
slug = "vpnservicedetails"
|
||||||
template_name = "project/vpn/_vpnservice_details.html"
|
template_name = "project/vpn/_vpnservice_details.html"
|
||||||
failure_url = reverse_lazy('horizon:project:vpn:index')
|
|
||||||
|
|
||||||
def get_context_data(self, request):
|
def get_context_data(self, request):
|
||||||
sid = self.tab_group.kwargs['vpnservice_id']
|
vpnservice = self.tab_group.kwargs['vpnservice']
|
||||||
try:
|
|
||||||
vpnservice = api.vpn.vpnservice_get(request, sid)
|
|
||||||
except Exception:
|
|
||||||
msg = _('Unable to retrieve VPN Service details.')
|
|
||||||
exceptions.handle(request, msg, redirect=self.failure_url)
|
|
||||||
try:
|
|
||||||
connections = api.vpn.ipsecsiteconnection_list(
|
|
||||||
request, vpnservice_id=sid)
|
|
||||||
vpnservice.vpnconnections = connections
|
|
||||||
except Exception:
|
|
||||||
vpnservice.vpnconnections = []
|
|
||||||
return {'vpnservice': vpnservice}
|
return {'vpnservice': vpnservice}
|
||||||
|
|
||||||
|
|
||||||
|
@ -186,16 +161,10 @@ class IPSecSiteConnectionDetailsTab(tabs.Tab):
|
||||||
name = _("IPSec Site Connection Details")
|
name = _("IPSec Site Connection Details")
|
||||||
slug = "ipsecsiteconnectiondetails"
|
slug = "ipsecsiteconnectiondetails"
|
||||||
template_name = "project/vpn/_ipsecsiteconnection_details.html"
|
template_name = "project/vpn/_ipsecsiteconnection_details.html"
|
||||||
failure_url = reverse_lazy('horizon:project:vpn:index')
|
|
||||||
|
|
||||||
def get_context_data(self, request):
|
def get_context_data(self, request):
|
||||||
cid = self.tab_group.kwargs['ipsecsiteconnection_id']
|
ipsecsiteconnection = self.tab_group.kwargs['ipsecsiteconnection']
|
||||||
try:
|
return {'ipsecsiteconnection': ipsecsiteconnection}
|
||||||
ipsecsiteconn = api.vpn.ipsecsiteconnection_get(request, cid)
|
|
||||||
except Exception:
|
|
||||||
msg = _('Unable to retrieve IPSec Site Connection details.')
|
|
||||||
exceptions.handle(request, msg, redirect=self.failure_url)
|
|
||||||
return {'ipsecsiteconnection': ipsecsiteconn}
|
|
||||||
|
|
||||||
|
|
||||||
class IPSecSiteConnectionDetailsTabs(tabs.TabGroup):
|
class IPSecSiteConnectionDetailsTabs(tabs.TabGroup):
|
||||||
|
|
|
@ -29,6 +29,7 @@ from openstack_dashboard import api
|
||||||
|
|
||||||
from openstack_dashboard.dashboards.project.vpn \
|
from openstack_dashboard.dashboards.project.vpn \
|
||||||
import forms as vpn_forms
|
import forms as vpn_forms
|
||||||
|
from openstack_dashboard.dashboards.project.vpn import tables as vpn_tables
|
||||||
from openstack_dashboard.dashboards.project.vpn import tabs as vpn_tabs
|
from openstack_dashboard.dashboards.project.vpn import tabs as vpn_tabs
|
||||||
from openstack_dashboard.dashboards.project.vpn \
|
from openstack_dashboard.dashboards.project.vpn \
|
||||||
import workflows as vpn_workflows
|
import workflows as vpn_workflows
|
||||||
|
@ -122,24 +123,146 @@ class AddIPSecPolicyView(workflows.WorkflowView):
|
||||||
|
|
||||||
|
|
||||||
class IKEPolicyDetailsView(tabs.TabView):
|
class IKEPolicyDetailsView(tabs.TabView):
|
||||||
tab_group_class = (vpn_tabs.IKEPolicyDetailsTabs)
|
tab_group_class = vpn_tabs.IKEPolicyDetailsTabs
|
||||||
template_name = 'project/vpn/details_tabs.html'
|
template_name = 'project/vpn/details_tabs.html'
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
|
def get_data(self):
|
||||||
|
pid = self.kwargs['ikepolicy_id']
|
||||||
|
try:
|
||||||
|
return api.vpn.ikepolicy_get(self.request, pid)
|
||||||
|
except Exception:
|
||||||
|
msg = _('Unable to retrieve IKE Policy details.')
|
||||||
|
exceptions.handle(self.request, msg,
|
||||||
|
redirect=self.get_redirect_url())
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(IKEPolicyDetailsView, self).get_context_data(**kwargs)
|
||||||
|
ikepolicy = self.get_data()
|
||||||
|
table = vpn_tables.IKEPoliciesTable(self.request)
|
||||||
|
context["ikepolicy"] = ikepolicy
|
||||||
|
context["url"] = self.get_redirect_url()
|
||||||
|
context["actions"] = table.render_row_actions(ikepolicy)
|
||||||
|
return context
|
||||||
|
|
||||||
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
|
ikepolicy = self.get_data()
|
||||||
|
return self.tab_group_class(request, ikepolicy=ikepolicy, **kwargs)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
|
return reverse_lazy('horizon:project:vpn:index')
|
||||||
|
|
||||||
|
|
||||||
class IPSecPolicyDetailsView(tabs.TabView):
|
class IPSecPolicyDetailsView(tabs.TabView):
|
||||||
tab_group_class = (vpn_tabs.IPSecPolicyDetailsTabs)
|
tab_group_class = vpn_tabs.IPSecPolicyDetailsTabs
|
||||||
template_name = 'project/vpn/details_tabs.html'
|
template_name = 'project/vpn/details_tabs.html'
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
|
def get_data(self):
|
||||||
|
pid = self.kwargs['ipsecpolicy_id']
|
||||||
|
try:
|
||||||
|
return api.vpn.ipsecpolicy_get(self.request, pid)
|
||||||
|
except Exception:
|
||||||
|
msg = _('Unable to retrieve IPSec Policy details.')
|
||||||
|
exceptions.handle(self.request, msg,
|
||||||
|
redirect=self.get_redirect_url())
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(IPSecPolicyDetailsView, self).get_context_data(
|
||||||
|
**kwargs)
|
||||||
|
ipsecpolicy = self.get_data()
|
||||||
|
table = vpn_tables.IPSecPoliciesTable(self.request)
|
||||||
|
context["ipsecpolicy"] = ipsecpolicy
|
||||||
|
context["url"] = self.get_redirect_url()
|
||||||
|
context["actions"] = table.render_row_actions(ipsecpolicy)
|
||||||
|
return context
|
||||||
|
|
||||||
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
|
ipsecpolicy = self.get_data()
|
||||||
|
return self.tab_group_class(request, ipsecpolicy=ipsecpolicy, **kwargs)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
|
return reverse_lazy('horizon:project:vpn:index')
|
||||||
|
|
||||||
|
|
||||||
class VPNServiceDetailsView(tabs.TabView):
|
class VPNServiceDetailsView(tabs.TabView):
|
||||||
tab_group_class = (vpn_tabs.VPNServiceDetailsTabs)
|
tab_group_class = vpn_tabs.VPNServiceDetailsTabs
|
||||||
template_name = 'project/vpn/details_tabs.html'
|
template_name = 'project/vpn/details_tabs.html'
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
|
def get_data(self):
|
||||||
|
sid = self.kwargs['vpnservice_id']
|
||||||
|
|
||||||
|
try:
|
||||||
|
vpnservice = api.vpn.vpnservice_get(self.request, sid)
|
||||||
|
except Exception:
|
||||||
|
vpnservice = []
|
||||||
|
msg = _('Unable to retrieve VPN Service details.')
|
||||||
|
exceptions.handle(self.request, msg,
|
||||||
|
redirect=self.get_redirect_url())
|
||||||
|
try:
|
||||||
|
connections = api.vpn.ipsecsiteconnection_list(
|
||||||
|
self.request, vpnservice_id=sid)
|
||||||
|
vpnservice.vpnconnections = connections
|
||||||
|
except Exception:
|
||||||
|
vpnservice.vpnconnections = []
|
||||||
|
|
||||||
|
return vpnservice
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(VPNServiceDetailsView, self).get_context_data(**kwargs)
|
||||||
|
vpnservice = self.get_data()
|
||||||
|
table = vpn_tables.VPNServicesTable(self.request)
|
||||||
|
context["vpnservice"] = vpnservice
|
||||||
|
context["url"] = self.get_redirect_url()
|
||||||
|
context["actions"] = table.render_row_actions(vpnservice)
|
||||||
|
return context
|
||||||
|
|
||||||
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
|
vpnservice = self.get_data()
|
||||||
|
return self.tab_group_class(request, vpnservice=vpnservice, **kwargs)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
|
return reverse_lazy('horizon:project:vpn:index')
|
||||||
|
|
||||||
|
|
||||||
class IPSecSiteConnectionDetailsView(tabs.TabView):
|
class IPSecSiteConnectionDetailsView(tabs.TabView):
|
||||||
tab_group_class = (vpn_tabs.IPSecSiteConnectionDetailsTabs)
|
tab_group_class = vpn_tabs.IPSecSiteConnectionDetailsTabs
|
||||||
template_name = 'project/vpn/details_tabs.html'
|
template_name = 'project/vpn/details_tabs.html'
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
|
def get_data(self):
|
||||||
|
cid = self.kwargs['ipsecsiteconnection_id']
|
||||||
|
try:
|
||||||
|
return api.vpn.ipsecsiteconnection_get(self.request, cid)
|
||||||
|
except Exception:
|
||||||
|
msg = _('Unable to retrieve IPSec Site Connection details.')
|
||||||
|
exceptions.handle(self.request, msg,
|
||||||
|
redirect=self.get_redirect_url())
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(IPSecSiteConnectionDetailsView, self).get_context_data(
|
||||||
|
**kwargs)
|
||||||
|
ipsecsiteconnection = self.get_data()
|
||||||
|
table = vpn_tables.IPSecSiteConnectionsTable(self.request)
|
||||||
|
context["ipsecsiteconnection"] = ipsecsiteconnection
|
||||||
|
context["url"] = self.get_redirect_url()
|
||||||
|
context["actions"] = table.render_row_actions(ipsecsiteconnection)
|
||||||
|
return context
|
||||||
|
|
||||||
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
|
ipsecsiteconnection = self.get_data()
|
||||||
|
return self.tab_group_class(request,
|
||||||
|
ipsecsiteconnection=ipsecsiteconnection,
|
||||||
|
**kwargs)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_redirect_url():
|
||||||
|
return reverse_lazy('horizon:project:vpn:index')
|
||||||
|
|
||||||
|
|
||||||
class UpdateVPNServiceView(forms.ModalFormView):
|
class UpdateVPNServiceView(forms.ModalFormView):
|
||||||
form_class = vpn_forms.UpdateVPNService
|
form_class = vpn_forms.UpdateVPNService
|
||||||
|
|
Loading…
Reference in New Issue