wei.ying fa3528933c Delete instance,volume,etc confirmation is missing name or ID
If click the name link and go into the details page for the instance, volume, etc.
And attempt to delete. It will pop up a message, but omit the name/id.
Need to add the property of 'data-display' in detail page.

Change-Id: I9c1966dc7942a27903237e2786edbcd2fbd936ea
Closes-Bug: #1680329
2017-04-07 22:58:50 +00:00

465 lines
16 KiB
Python

# Copyright 2013, Mirantis Inc
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from django.core.urlresolvers import reverse
from django import template
from django.utils.translation import pgettext_lazy
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ungettext_lazy
from horizon import exceptions
from horizon import tables
from openstack_dashboard import api
from openstack_dashboard import policy
forbid_updates = set(["PENDING_CREATE", "PENDING_UPDATE", "PENDING_DELETE"])
class AddIKEPolicyLink(tables.LinkAction):
name = "addikepolicy"
verbose_name = _("Add IKE Policy")
url = "horizon:project:vpn:addikepolicy"
classes = ("ajax-modal",)
icon = "plus"
policy_rules = (("network", "create_ikepolicy"),)
class AddIPSecPolicyLink(tables.LinkAction):
name = "addipsecpolicy"
verbose_name = _("Add IPSec Policy")
url = "horizon:project:vpn:addipsecpolicy"
classes = ("ajax-modal",)
icon = "plus"
policy_rules = (("network", "create_ipsecpolicy"),)
class AddVPNServiceLink(tables.LinkAction):
name = "addvpnservice"
verbose_name = _("Add VPN Service")
url = "horizon:project:vpn:addvpnservice"
classes = ("ajax-modal",)
icon = "plus"
policy_rules = (("network", "create_vpnservice"),)
class AddIPSecSiteConnectionLink(tables.LinkAction):
name = "addipsecsiteconnection"
verbose_name = _("Add IPSec Site Connection")
url = "horizon:project:vpn:addipsecsiteconnection"
classes = ("ajax-modal",)
icon = "plus"
policy_rules = (("network", "create_ipsec_site_connection"),)
class DeleteVPNServiceLink(policy.PolicyTargetMixin, tables.DeleteAction):
name = "deletevpnservice"
policy_rules = (("network", "delete_vpnservice"),)
@staticmethod
def action_present(count):
return ungettext_lazy(
u"Delete VPN Service",
u"Delete VPN Services",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
u"Scheduled deletion of VPN Service",
u"Scheduled deletion of VPN Services",
count
)
def allowed(self, request, datum=None):
if datum and datum.ipsecsiteconns:
return False
return True
def delete(self, request, obj_id):
try:
api.vpn.vpnservice_delete(request, obj_id)
except Exception as e:
exceptions.handle(
request, _('Unable to delete VPN Service. %s') % e)
class DeleteIKEPolicyLink(policy.PolicyTargetMixin, tables.DeleteAction):
name = "deleteikepolicy"
policy_rules = (("network", "delete_ikepolicy"),)
@staticmethod
def action_present(count):
return ungettext_lazy(
u"Delete IKE Policy",
u"Delete IKE Policies",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
u"Scheduled deletion of IKE Policy",
u"Scheduled deletion of IKE Policies",
count
)
def allowed(self, request, datum=None):
if datum and datum.ipsecsiteconns:
return False
return True
def delete(self, request, obj_id):
try:
api.vpn.ikepolicy_delete(request, obj_id)
except Exception as e:
exceptions.handle(
request, _('Unable to delete IKE Policy. %s') % e)
class DeleteIPSecPolicyLink(policy.PolicyTargetMixin, tables.DeleteAction):
name = "deleteipsecpolicy"
policy_rules = (("network", "delete_ipsecpolicy"),)
@staticmethod
def action_present(count):
return ungettext_lazy(
u"Delete IPSec Policy",
u"Delete IPSec Policies",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
u"Scheduled deletion of IPSec Policy",
u"Scheduled deletion of IPSec Policies",
count
)
def allowed(self, request, datum=None):
if datum and datum.ipsecsiteconns:
return False
return True
def delete(self, request, obj_id):
try:
api.vpn.ipsecpolicy_delete(request, obj_id)
except Exception as e:
exceptions.handle(
request, _('Unable to delete IPSec Policy. %s') % e)
class DeleteIPSecSiteConnectionLink(policy.PolicyTargetMixin,
tables.DeleteAction):
name = "deleteipsecsiteconnection"
policy_rules = (("network", "delete_ipsec_site_connection"),)
@staticmethod
def action_present(count):
return ungettext_lazy(
u"Delete IPSec Site Connection",
u"Delete IPSec Site Connections",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
u"Scheduled deletion of IPSec Site Connection",
u"Scheduled deletion of IPSec Site Connections",
count
)
def delete(self, request, obj_id):
try:
api.vpn.ipsecsiteconnection_delete(request, obj_id)
except Exception as e:
exceptions.handle(
request, _('Unable to delete IPSec Site Connection. %s') % e)
class UpdateVPNServiceLink(tables.LinkAction):
name = "update_vpnservice"
verbose_name = _("Edit VPN Service")
classes = ("ajax-modal", "btn-update",)
policy_rules = (("network", "update_vpnservice"),)
def get_link_url(self, vpnservice):
return reverse("horizon:project:vpn:update_vpnservice",
kwargs={'vpnservice_id': vpnservice.id})
def allowed(self, request, datum=None):
if datum and datum.status not in forbid_updates:
return True
return False
class UpdateIKEPolicyLink(tables.LinkAction):
name = "updateikepolicy"
verbose_name = _("Edit IKE Policy")
classes = ("ajax-modal", "btn-update",)
policy_rules = (("network", "update_ikepolicy"),)
def get_link_url(self, ikepolicy):
return reverse("horizon:project:vpn:update_ikepolicy",
kwargs={'ikepolicy_id': ikepolicy.id})
def allowed(self, request, datum=None):
return not datum['ipsecsiteconns']
class UpdateIPSecPolicyLink(tables.LinkAction):
name = "updateipsecpolicy"
verbose_name = _("Edit IPSec Policy")
classes = ("ajax-modal", "btn-update",)
policy_rules = (("network", "update_ipsecpolicy"),)
def get_link_url(self, ipsecpolicy):
return reverse("horizon:project:vpn:update_ipsecpolicy",
kwargs={'ipsecpolicy_id': ipsecpolicy.id})
def allowed(self, request, datum=None):
return not datum['ipsecsiteconns']
class UpdateIPSecSiteConnectionLink(tables.LinkAction):
name = "updateipsecsiteconnection"
verbose_name = _("Edit Connection")
classes = ("ajax-modal", "btn-update",)
policy_rules = (("network", "update_ipsec_site_connection"),)
def get_link_url(self, ipsecsiteconnection):
return reverse("horizon:project:vpn:update_ipsecsiteconnection",
kwargs={'ipsecsiteconnection_id':
ipsecsiteconnection.id})
def allowed(self, request, datum=None):
if datum and datum.status not in forbid_updates:
return True
return False
STATUS_CHOICES = (
("active", True),
("down", True),
("created", True),
("error", False),
("inactive", False),
)
STATUS_DISPLAY_CHOICES = (
("active", pgettext_lazy("Current status of an IPSec Site Connection"
" and VPN Service", u"Active")),
("down", pgettext_lazy("Current status of an IPSec Site Connection"
" and VPN Service", u"Down")),
("error", pgettext_lazy("Current status of an IPSec Site Connection"
" and VPN Service", u"Error")),
("created", pgettext_lazy("Current status of an IPSec Site Connection"
" and VPN Service", u"Created")),
("pending_create", pgettext_lazy("Current status of an"
" IPSec Site Connection and VPN Service",
u"Pending Create")),
("pending_update", pgettext_lazy("Current status of an"
" IPSec Site Connection and VPN Service",
u"Pending Update")),
("pending_delete", pgettext_lazy("Current status of an"
" IPSec Site Connection and VPN Service",
u"Pending Delete")),
("inactive", pgettext_lazy("Current status of an IPSec Site Connection"
" and VPN Service", u"Inactive")),
)
class UpdateIPSecSiteConnectionRow(tables.Row):
ajax = True
def get_data(self, request, conn_id):
conn = api.vpn.ipsecsiteconnection_get(request, conn_id)
conn.ikepolicy_name = conn['ikepolicy'].get('name',
conn['ikepolicy_id'])
conn.ipsecpolicy_name = conn['ipsecpolicy'].get('name',
conn['ipsecpolicy_id'])
conn.vpnservice_name = conn['vpnservice'].get('name',
conn['vpnservice_id'])
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'),
link="horizon:project:vpn:ipsecsiteconnectiondetails")
description = tables.Column('description', verbose_name=_('Description'))
vpnservice_name = tables.Column('vpnservice_name',
verbose_name=_('VPN Service'))
ikepolicy_name = tables.Column('ikepolicy_name',
verbose_name=_('IKE Policy'))
ipsecpolicy_name = tables.Column('ipsecpolicy_name',
verbose_name=_('IPSec Policy'))
status = tables.Column("status",
verbose_name=_("Status"),
status=True,
status_choices=STATUS_CHOICES,
display_choices=STATUS_DISPLAY_CHOICES)
def get_object_display(self, ipsecsiteconnection):
return ipsecsiteconnection.name_or_id
class Meta(object):
name = "ipsecsiteconnectionstable"
verbose_name = _("IPSec Site Connections")
status_columns = ['status']
row_class = UpdateIPSecSiteConnectionRow
table_actions = (AddIPSecSiteConnectionLink,
DeleteIPSecSiteConnectionLink,
IPSSCFilterAction)
row_actions = (UpdateIPSecSiteConnectionLink,
DeleteIPSecSiteConnectionLink)
def get_local_ips(vpn):
template_name = 'project/vpn/_vpn_ips.html'
context = {"external_v4_ip": vpn.get('external_v4_ip'),
"external_v6_ip": vpn.get('external_v6_ip')}
return template.loader.render_to_string(template_name, context)
class UpdateVPNServiceRow(tables.Row):
ajax = True
def get_data(self, request, vpn_id):
vpn = api.vpn.vpnservice_get(request, vpn_id)
vpn.router_name = vpn['router'].get('name', vpn['router_id'])
vpn.subnet_name = vpn['subnet'].get('cidr', vpn['subnet_id'])
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'),
link="horizon:project:vpn:vpnservicedetails")
description = tables.Column('description', verbose_name=_('Description'))
local_ips = tables.Column(get_local_ips,
verbose_name=_("Local Side Public IPs"))
subnet_name = tables.Column('subnet_name', verbose_name=_('Subnet'))
router_name = tables.Column('router_name', verbose_name=_('Router'))
status = tables.Column("status",
verbose_name=_("Status"),
status=True,
status_choices=STATUS_CHOICES,
display_choices=STATUS_DISPLAY_CHOICES)
def get_object_display(self, vpnservice):
return vpnservice.name_or_id
class Meta(object):
name = "vpnservicestable"
verbose_name = _("VPN Services")
status_columns = ['status']
row_class = UpdateVPNServiceRow
table_actions = (AddVPNServiceLink,
DeleteVPNServiceLink,
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'),
link="horizon:project:vpn:ikepolicydetails")
description = tables.Column('description', verbose_name=_('Description'))
auth_algorithm = tables.Column('auth_algorithm',
verbose_name=_('Authorization algorithm'))
encryption_algorithm = tables.Column(
'encryption_algorithm',
verbose_name=_('Encryption algorithm'))
pfs = tables.Column("pfs", verbose_name=_('PFS'))
def get_object_display(self, ikepolicy):
return ikepolicy.name_or_id
class Meta(object):
name = "ikepoliciestable"
verbose_name = _("IKE Policies")
table_actions = (AddIKEPolicyLink,
DeleteIKEPolicyLink,
PoliciesFilterAction)
row_actions = (UpdateIKEPolicyLink, DeleteIKEPolicyLink)
class IPSecPoliciesTable(tables.DataTable):
id = tables.Column('id', hidden=True)
name = tables.Column("name_or_id", verbose_name=_('Name'),
link="horizon:project:vpn:ipsecpolicydetails")
description = tables.Column('description', verbose_name=_('Description'))
auth_algorithm = tables.Column('auth_algorithm',
verbose_name=_('Authorization algorithm'))
encryption_algorithm = tables.Column(
'encryption_algorithm',
verbose_name=_('Encryption algorithm'))
pfs = tables.Column("pfs", verbose_name=_('PFS'))
def get_object_display(self, ipsecpolicy):
return ipsecpolicy.name_or_id
class Meta(object):
name = "ipsecpoliciestable"
verbose_name = _("IPSec Policies")
table_actions = (AddIPSecPolicyLink,
DeleteIPSecPolicyLink,
PoliciesFilterAction)
row_actions = (UpdateIPSecPolicyLink, DeleteIPSecPolicyLink)