Server-side filtering vpn

Implements server-side filtering for vpns:
   - Project->Network->VPN

Implements blueprint: server-side-filtering

Change-Id: Ie752199a38a91969f9501037708372df3a154b53
This commit is contained in:
jlopezgu 2016-08-05 11:43:52 -05:00 committed by David Lyle
parent 662b4118d3
commit d0877ccd42
3 changed files with 123 additions and 15 deletions

View File

@ -341,18 +341,18 @@ def _ipsecsiteconnection_list(request, expand_ikepolicies=False,
ipsecsiteconnections = neutronclient(request).list_ipsec_site_connections(
**kwargs).get('ipsec_site_connections')
if expand_ikepolicies:
ikepolicies = _ikepolicy_list(request, **kwargs)
ikepolicies = _ikepolicy_list(request)
policy_dict = OrderedDict((p.id, p) for p in ikepolicies)
for c in ipsecsiteconnections:
c['ikepolicy_name'] = policy_dict.get(c['ikepolicy_id']).name_or_id
if expand_ipsecpolicies:
ipsecpolicies = _ipsecpolicy_list(request, **kwargs)
ipsecpolicies = _ipsecpolicy_list(request)
policy_dict = OrderedDict((p.id, p) for p in ipsecpolicies)
for c in ipsecsiteconnections:
c['ipsecpolicy_name'] = policy_dict.get(c['ipsecpolicy_id']
).name_or_id
if expand_vpnservices:
vpnservices = _vpnservice_list(request, **kwargs)
vpnservices = _vpnservice_list(request)
service_dict = OrderedDict((s.id, s) for s in vpnservices)
for c in ipsecsiteconnections:
c['vpnservice_name'] = service_dict.get(c['vpnservice_id']

View File

@ -300,6 +300,21 @@ class UpdateIPSecSiteConnectionRow(tables.Row):
return conn
class IPSSCFilterAction(tables.FilterAction):
name = 'IPSSC_project_IKEPolicies'
filter_type = 'server'
filter_choices = (
('name', _("Name ="), True),
('vpnservice', _("VPN Service ="), True),
('vpnservice_id', _("VPN Service id ="), True),
('ikepolicy', _("IKE Policy ="), True),
('ikepolicy_id', _("IKE Policy id ="), True),
('ipsecpolicy', _("IPSec Policy ="), True),
('ipsecpolicy_id', _("IPSec Policy id ="), True),
('status', _("Status ="), True)
)
class IPSecSiteConnectionsTable(tables.DataTable):
id = tables.Column('id', hidden=True)
name = tables.Column('name_or_id', verbose_name=_('Name'),
@ -324,7 +339,7 @@ class IPSecSiteConnectionsTable(tables.DataTable):
row_class = UpdateIPSecSiteConnectionRow
table_actions = (AddIPSecSiteConnectionLink,
DeleteIPSecSiteConnectionLink,
tables.NameFilterAction)
IPSSCFilterAction)
row_actions = (UpdateIPSecSiteConnectionLink,
DeleteIPSecSiteConnectionLink)
@ -346,6 +361,18 @@ class UpdateVPNServiceRow(tables.Row):
return vpn
class VPNServicesFilterAction(tables.FilterAction):
name = 'vpnservices_project_IKEPolicies'
filter_type = 'server'
filter_choices = (
('name', _("Name ="), True),
('subnet_id', _("Subnet id ="), True),
('subnet_name', _("Subnet ="), True),
('router_id', _("Router id="), True),
('router_name', _("Router ="), True),
)
class VPNServicesTable(tables.DataTable):
id = tables.Column('id', hidden=True)
name = tables.Column("name_or_id", verbose_name=_('Name'),
@ -368,10 +395,21 @@ class VPNServicesTable(tables.DataTable):
row_class = UpdateVPNServiceRow
table_actions = (AddVPNServiceLink,
DeleteVPNServiceLink,
tables.NameFilterAction)
VPNServicesFilterAction)
row_actions = (UpdateVPNServiceLink, DeleteVPNServiceLink)
class PoliciesFilterAction(tables.FilterAction):
name = 'filter_project_IKEPolicies'
filter_type = 'server'
filter_choices = (
('name', _("Name ="), True),
('auth_algorithm', _("Authorization algorithm ="), True),
('encryption_algorithm', _("Encryption algorithm ="), True),
('pfs', _("PFS ="), True),
)
class IKEPoliciesTable(tables.DataTable):
id = tables.Column('id', hidden=True)
name = tables.Column("name_or_id", verbose_name=_('Name'),
@ -389,7 +427,7 @@ class IKEPoliciesTable(tables.DataTable):
verbose_name = _("IKE Policies")
table_actions = (AddIKEPolicyLink,
DeleteIKEPolicyLink,
tables.NameFilterAction)
PoliciesFilterAction)
row_actions = (UpdateIKEPolicyLink, DeleteIKEPolicyLink)
@ -410,5 +448,5 @@ class IPSecPoliciesTable(tables.DataTable):
verbose_name = _("IPSec Policies")
table_actions = (AddIPSecPolicyLink,
DeleteIPSecPolicyLink,
tables.NameFilterAction)
PoliciesFilterAction)
row_actions = (UpdateIPSecPolicyLink, DeleteIPSecPolicyLink)

View File

@ -15,6 +15,7 @@
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
from horizon import tables as htables
from horizon import tabs
from openstack_dashboard import api
@ -22,17 +23,37 @@ from openstack_dashboard import api
from openstack_dashboard.dashboards.project.vpn import tables
class IPSecSiteConnectionsTab(tabs.TableTab):
class IPSecSiteConnectionsTab(tabs.TableTab, htables.DataTableView):
table_classes = (tables.IPSecSiteConnectionsTable,)
name = _("IPSec Site Connections")
slug = "ipsecsiteconnections"
template_name = ("horizon/common/_detail_table.html")
FILTERS_MAPPING = {'admin_state_up': {_("up"): True, _("down"): False}}
def get_ipsecsiteconnectionstable_data(self):
try:
filters = self.get_filters()
tenant_id = self.request.user.tenant_id
if 'vpnservice' in filters:
filters['vpnservice_id'] = \
[v.id for v in api.vpn.vpnservice_list(
self.tab_group.request, tenant_id=tenant_id,
name=filters['vpnservice'])]
del filters['vpnservice']
if 'ikepolicy' in filters:
filters['ikepolicy_id'] = \
[i.id for i in api.vpn.ikepolicy_list(
self.tab_group.request, tenant_id=tenant_id,
name=filters['ikepolicy'])]
del filters['ikepolicy']
if 'ipsecpolicy' in filters:
filters['ipsecpolicy_id'] = \
[i.id for i in api.vpn.ipsecpolicy_list(
self.tab_group.request, tenant_id=tenant_id,
name=filters['ipsecpolicy'])]
del filters['ipsecpolicy']
ipsecsiteconnections = api.vpn.ipsecsiteconnection_list(
self.tab_group.request, tenant_id=tenant_id)
self.tab_group.request, tenant_id=tenant_id, **filters)
except Exception:
ipsecsiteconnections = []
exceptions.handle(
@ -40,8 +61,16 @@ class IPSecSiteConnectionsTab(tabs.TableTab):
_('Unable to retrieve IPSec Site Connections list.'))
return ipsecsiteconnections
def get_filters(self):
self.table = self._tables['ipsecsiteconnectionstable']
self.handle_server_filter(self.request, table=self.table)
self.update_server_filter_action(self.request, table=self.table)
class VPNServicesTab(tabs.TableTab):
return super(IPSecSiteConnectionsTab,
self).get_filters(filters_map=self.FILTERS_MAPPING)
class VPNServicesTab(tabs.TableTab, htables.DataTableView):
table_classes = (tables.VPNServicesTable,)
name = _("VPN Services")
slug = "vpnservices"
@ -49,17 +78,42 @@ class VPNServicesTab(tabs.TableTab):
def get_vpnservicestable_data(self):
try:
filters = self.get_filters()
tenant_id = self.request.user.tenant_id
if 'subnet_name' in filters:
subnets = api.neutron.subnet_list(self.tab_group.request,
tenant_id=tenant_id,
cidr=filters['subnet_name'])
subnets_ids = [n.id for n in subnets]
del filters['subnet_name']
if not subnets_ids:
return []
filters['subnet_id'] = subnets_ids
if 'router_name' in filters:
routers = api.neutron.router_list(self.tab_group.request,
tenant_id=tenant_id,
name=filters['router_name'])
routers_ids = [r.id for r in routers]
if not routers:
return []
filters['router_id'] = routers_ids
vpnservices = api.vpn.vpnservice_list(
self.tab_group.request, tenant_id=tenant_id)
self.tab_group.request, tenant_id=tenant_id, **filters)
except Exception:
vpnservices = []
exceptions.handle(self.tab_group.request,
_('Unable to retrieve VPN Services list.'))
return vpnservices
def get_filters(self):
self.table = self._tables['vpnservicestable']
self.handle_server_filter(self.request, table=self.table)
self.update_server_filter_action(self.request, table=self.table)
class IKEPoliciesTab(tabs.TableTab):
return super(VPNServicesTab, self).get_filters()
class IKEPoliciesTab(tabs.TableTab, htables.DataTableView):
table_classes = (tables.IKEPoliciesTable,)
name = _("IKE Policies")
slug = "ikepolicies"
@ -67,17 +121,25 @@ class IKEPoliciesTab(tabs.TableTab):
def get_ikepoliciestable_data(self):
try:
filters = self.get_filters()
tenant_id = self.request.user.tenant_id
ikepolicies = api.vpn.ikepolicy_list(
self.tab_group.request, tenant_id=tenant_id)
self.tab_group.request, tenant_id=tenant_id, **filters)
except Exception:
ikepolicies = []
exceptions.handle(self.tab_group.request,
_('Unable to retrieve IKE Policies list.'))
return ikepolicies
def get_filters(self):
self.table = self._tables['ikepoliciestable']
self.handle_server_filter(self.request, table=self.table)
self.update_server_filter_action(self.request, table=self.table)
class IPSecPoliciesTab(tabs.TableTab):
return super(IKEPoliciesTab, self).get_filters()
class IPSecPoliciesTab(tabs.TableTab, htables.DataTableView):
table_classes = (tables.IPSecPoliciesTable,)
name = _("IPSec Policies")
slug = "ipsecpolicies"
@ -85,15 +147,23 @@ class IPSecPoliciesTab(tabs.TableTab):
def get_ipsecpoliciestable_data(self):
try:
filters = self.get_filters()
tenant_id = self.request.user.tenant_id
ipsecpolicies = api.vpn.ipsecpolicy_list(
self.tab_group.request, tenant_id=tenant_id)
self.tab_group.request, tenant_id=tenant_id, **filters)
except Exception:
ipsecpolicies = []
exceptions.handle(self.tab_group.request,
_('Unable to retrieve IPSec Policies list.'))
return ipsecpolicies
def get_filters(self):
self.table = self._tables['ipsecpoliciestable']
self.handle_server_filter(self.request, table=self.table)
self.update_server_filter_action(self.request, table=self.table)
return super(IPSecPoliciesTab, self).get_filters()
class VPNTabs(tabs.TabGroup):
slug = "vpntabs"