Fix delete buttons

This commit fixes the delete buttons in all of the GBPUI panels where checked items were deleted even when using individual (row) delete actions.

Change-Id: I4ac44bda1baf28b5056d07adf1236b9a43fbad4c
Closes-Bug: 1707896
This commit is contained in:
Marek Lycka 2017-07-31 18:58:08 +02:00
parent 739852105a
commit f4deab2aae
8 changed files with 251 additions and 282 deletions

View File

@ -15,6 +15,8 @@ from django.utils.translation import ugettext_lazy as _
from horizon import tables from horizon import tables
from gbpui import client
class AddAppPolicyLink(tables.LinkAction): class AddAppPolicyLink(tables.LinkAction):
name = "addpolicy_rule_set" name = "addpolicy_rule_set"
@ -35,13 +37,16 @@ class UpdateAppPolicyLink(tables.LinkAction):
return base_url return base_url
class DeleteAppPolicyLink(tables.DeleteAction): class DeletePolicyRuleSetLink(tables.DeleteAction):
name = "deletepolicyruleset" name = "deletepolicyruleset"
action_present = _("Delete") action_present = _("Delete")
action_past = _("Scheduled deletion of %(data_type)s") action_past = _("Scheduled deletion of %(data_type)s")
data_type_singular = _("Policy Rule Set") data_type_singular = _("Policy Rule Set")
data_type_plural = _("Policy Rule Sets") data_type_plural = _("Policy Rule Sets")
def action(self, request, object_id):
client.policy_rule_set_delete(request, object_id)
class AddPolicyRuleLink(tables.LinkAction): class AddPolicyRuleLink(tables.LinkAction):
name = "addpolicyrules" name = "addpolicyrules"
@ -69,6 +74,9 @@ class DeletePolicyRuleLink(tables.DeleteAction):
data_type_singular = _("Policy Rule") data_type_singular = _("Policy Rule")
data_type_plural = _("Policy Rules") data_type_plural = _("Policy Rules")
def action(self, request, object_id):
client.policyrule_delete(request, object_id)
class AddPolicyClassifierLink(tables.LinkAction): class AddPolicyClassifierLink(tables.LinkAction):
name = "addpolicyclassifiers" name = "addpolicyclassifiers"
@ -96,6 +104,9 @@ class DeletePolicyClassifierLink(tables.DeleteAction):
data_type_singular = _("Policy Classifier") data_type_singular = _("Policy Classifier")
data_type_plural = _("Policy Classifiers") data_type_plural = _("Policy Classifiers")
def action(self, request, object_id):
client.policyclassifier_delete(request, object_id)
class AddPolicyActionLink(tables.LinkAction): class AddPolicyActionLink(tables.LinkAction):
name = "addpolicyactions" name = "addpolicyactions"
@ -123,6 +134,9 @@ class DeletePolicyActionLink(tables.DeleteAction):
data_type_singular = _("Policy Action") data_type_singular = _("Policy Action")
data_type_plural = _("Policy Actions") data_type_plural = _("Policy Actions")
def action(self, request, object_id):
client.policyaction_delete(request, object_id)
class ApplicationPoliciesTable(tables.DataTable): class ApplicationPoliciesTable(tables.DataTable):
name = tables.Column("name", name = tables.Column("name",
@ -137,8 +151,8 @@ class ApplicationPoliciesTable(tables.DataTable):
class Meta(object): class Meta(object):
name = "application_policies_table" name = "application_policies_table"
verbose_name = _("Policy Rule Set") verbose_name = _("Policy Rule Set")
table_actions = (AddAppPolicyLink, DeleteAppPolicyLink) table_actions = (AddAppPolicyLink, DeletePolicyRuleSetLink)
row_actions = (UpdateAppPolicyLink, DeleteAppPolicyLink) row_actions = (UpdateAppPolicyLink, DeletePolicyRuleSetLink)
class PolicyRulesTable(tables.DataTable): class PolicyRulesTable(tables.DataTable):

View File

@ -9,20 +9,12 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
import re
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
from horizon import forms from horizon import forms
from horizon import messages
from horizon import tabs from horizon import tabs
from horizon import workflows from horizon import workflows
from gbpui import client
import forms as policy_rule_set_forms import forms as policy_rule_set_forms
import tabs as policy_rule_set_tabs import tabs as policy_rule_set_tabs
import workflows as policy_rule_set_workflows import workflows as policy_rule_set_workflows
@ -37,54 +29,10 @@ AddPolicyRule = policy_rule_set_workflows.AddPolicyRule
AddPolicyClassifier = policy_rule_set_workflows.AddPolicyClassifier AddPolicyClassifier = policy_rule_set_workflows.AddPolicyClassifier
class IndexView(tabs.TabView): class IndexView(tabs.TabbedTableView):
tab_group_class = (PolicyRuleSetTabs) tab_group_class = (PolicyRuleSetTabs)
template_name = 'project/application_policy/details_tabs.html' template_name = 'project/application_policy/details_tabs.html'
def post(self, request, *args, **kwargs):
obj_ids = request.POST.getlist('object_ids')
action = request.POST['action']
obj_type = re.search('delete([a-z]+)', action).group(1)
if not obj_ids:
obj_ids.append(re.search('([0-9a-z-]+)$', action).group(1))
if obj_type == 'policyaction':
for obj_id in obj_ids:
try:
client.policyaction_delete(request, obj_id)
messages.success(request, _('Deleted action %s') % obj_id)
except Exception as e:
msg = _('Unable to delete action. %s') % (str(e))
exceptions.handle(request, msg)
if obj_type == 'policyclassifier':
for obj_id in obj_ids:
try:
client.policyclassifier_delete(request, obj_id)
messages.success(
request, _('Deleted classifer %s') % obj_id)
except Exception as e:
msg = _('Unable to delete action. %s') % (str(e))
exceptions.handle(request, msg)
if obj_type == 'policyrule':
for obj_id in obj_ids:
try:
client.policyrule_delete(request, obj_id)
messages.success(request,
_('Deleted rule %s') % obj_id)
except Exception as e:
msg = _('Unable to delete action. %s') % (str(e))
exceptions.handle(request, msg)
if obj_type == 'policyruleset':
for obj_id in obj_ids:
try:
client.policy_rule_set_delete(request, obj_id)
messages.success(request,
_('Deleted rule %s') % obj_id)
except Exception as e:
msg = _('Unable to delete action. %s') % (str(e))
exceptions.handle(request, msg)
return self.get(request, *args, **kwargs)
class AddPolicyRuleSetView(workflows.WorkflowView): class AddPolicyRuleSetView(workflows.WorkflowView):
workflow_class = AddPolicyRuleSet workflow_class = AddPolicyRuleSet

View File

@ -15,6 +15,8 @@ from django.utils.translation import ugettext_lazy as _
from horizon import tables from horizon import tables
from gbpui import client
class CreateL2PolicyLink(tables.LinkAction): class CreateL2PolicyLink(tables.LinkAction):
name = "create_l2policy" name = "create_l2policy"
@ -30,7 +32,7 @@ class EditL2PolicyLink(tables.LinkAction):
def get_link_url(self, l2policy): def get_link_url(self, l2policy):
base_url = reverse("horizon:project:network_policy:update_l2policy", base_url = reverse("horizon:project:network_policy:update_l2policy",
kwargs={'l2policy_id': l2policy.id}) kwargs={'l2policy_id': l2policy.id})
return base_url return base_url
@ -41,11 +43,16 @@ class DeleteL2PolicyLink(tables.DeleteAction):
data_type_singular = _("L2Policy") data_type_singular = _("L2Policy")
data_type_plural = _("L2Policies") data_type_plural = _("L2Policies")
def action(self, request, object_id):
client.l2policy_delete(request, object_id)
class L2PolicyTable(tables.DataTable): class L2PolicyTable(tables.DataTable):
name = tables.Column("name", name = tables.Column(
verbose_name=_("Name"), "name",
link="horizon:project:network_policy:l2policy_details") verbose_name=_("Name"),
link="horizon:project:network_policy:l2policy_details"
)
description = tables.Column("description", verbose_name=_("Description")) description = tables.Column("description", verbose_name=_("Description"))
id = tables.Column("id", verbose_name=_("ID")) id = tables.Column("id", verbose_name=_("ID"))
l3_policy_id = tables.Column( l3_policy_id = tables.Column(
@ -74,7 +81,7 @@ class EditL3PolicyLink(tables.LinkAction):
def get_link_url(self, l3policy): def get_link_url(self, l3policy):
base_url = reverse("horizon:project:network_policy:update_l3policy", base_url = reverse("horizon:project:network_policy:update_l3policy",
kwargs={'l3policy_id': l3policy.id}) kwargs={'l3policy_id': l3policy.id})
return base_url return base_url
@ -85,11 +92,16 @@ class DeleteL3PolicyLink(tables.DeleteAction):
data_type_singular = _("L3 Policy") data_type_singular = _("L3 Policy")
data_type_plural = _("L3 Policies") data_type_plural = _("L3 Policies")
def action(self, request, object_id):
client.l3policy_delete(request, object_id)
class L3PolicyTable(tables.DataTable): class L3PolicyTable(tables.DataTable):
name = tables.Column("name", name = tables.Column(
verbose_name=_("Name"), "name",
link="horizon:project:network_policy:l3policy_details") verbose_name=_("Name"),
link="horizon:project:network_policy:l3policy_details"
)
description = tables.Column("description", verbose_name=_("Description")) description = tables.Column("description", verbose_name=_("Description"))
id = tables.Column("id", verbose_name=_("ID")) id = tables.Column("id", verbose_name=_("ID"))
ip_version = tables.Column("ip_version", verbose_name=_("IP Version")) ip_version = tables.Column("ip_version", verbose_name=_("IP Version"))
@ -97,7 +109,7 @@ class L3PolicyTable(tables.DataTable):
subnet_prefix_length = tables.Column( subnet_prefix_length = tables.Column(
"subnet_prefix_length", verbose_name=_("Subnet Prefix Length")) "subnet_prefix_length", verbose_name=_("Subnet Prefix Length"))
external_segments = tables.Column("external_segments", external_segments = tables.Column("external_segments",
verbose_name=_("External Segment")) verbose_name=_("External Segment"))
class Meta(object): class Meta(object):
name = "l3policy_table" name = "l3policy_table"
@ -131,13 +143,20 @@ class DeleteServicePolicyLink(tables.DeleteAction):
data_type_singular = _("ServicePolicy") data_type_singular = _("ServicePolicy")
data_type_plural = _("ServicePolicies") data_type_plural = _("ServicePolicies")
def action(self, request, object_id):
client.delete_networkservice_policy(request, object_id)
class ServicePolicyTable(tables.DataTable): class ServicePolicyTable(tables.DataTable):
name = tables.Column("name", verbose_name=_("Name"), name = tables.Column(
link="horizon:project:network_policy:service_policy_details") "name",
verbose_name=_("Name"),
link="horizon:project:network_policy:service_policy_details"
)
description = tables.Column("description", verbose_name=_("Description")) description = tables.Column("description", verbose_name=_("Description"))
network_service_params = tables.Column('network_service_params', network_service_params = tables.Column('network_service_params',
verbose_name=_("Network Service Params")) verbose_name=_(
"Network Service Params"))
class Meta(object): class Meta(object):
name = "service_policy_table" name = "service_policy_table"
@ -161,8 +180,12 @@ class EditExternalConnectivityLink(tables.LinkAction):
def get_link_url(self, external_connectivity): def get_link_url(self, external_connectivity):
urlstring = \ urlstring = \
"horizon:project:network_policy:update_externalconnectivity" "horizon:project:network_policy:update_externalconnectivity"
base_url = reverse(urlstring, base_url = reverse(
kwargs={'external_connectivity_id': external_connectivity.id}) urlstring,
kwargs={
'external_connectivity_id': external_connectivity.id
}
)
return base_url return base_url
@ -173,10 +196,16 @@ class DeleteExternalConnectivityLink(tables.DeleteAction):
data_type_singular = _("ExternalConnectivity") data_type_singular = _("ExternalConnectivity")
data_type_plural = _("ExternalConnectivities") data_type_plural = _("ExternalConnectivities")
def action(self, request, object_id):
client.delete_externalconnectivity(request, object_id)
class ExternalConnectivityTable(tables.DataTable): class ExternalConnectivityTable(tables.DataTable):
name = tables.Column("name", verbose_name=_("Name"), name = tables.Column(
link="horizon:project:network_policy:external_connectivity_details") "name",
verbose_name=_("Name"),
link="horizon:project:network_policy:external_connectivity_details"
)
description = tables.Column("description", verbose_name=_("Description")) description = tables.Column("description", verbose_name=_("Description"))
ip_version = tables.Column("ip_version", verbose_name=_("IP Version")) ip_version = tables.Column("ip_version", verbose_name=_("IP Version"))
cidr = tables.Column("cidr", verbose_name=_("CIDR")) cidr = tables.Column("cidr", verbose_name=_("CIDR"))
@ -185,9 +214,9 @@ class ExternalConnectivityTable(tables.DataTable):
name = "external_connectivity_table" name = "external_connectivity_table"
verbose_name = _("External Connectivity") verbose_name = _("External Connectivity")
table_actions = (CreateExternalConnectivityLink, table_actions = (CreateExternalConnectivityLink,
DeleteExternalConnectivityLink,) DeleteExternalConnectivityLink,)
row_actions = (EditExternalConnectivityLink, row_actions = (EditExternalConnectivityLink,
DeleteExternalConnectivityLink,) DeleteExternalConnectivityLink,)
class CreateNATPoolLink(tables.LinkAction): class CreateNATPoolLink(tables.LinkAction):
@ -204,6 +233,9 @@ class DeleteNATPoolLink(tables.DeleteAction):
data_type_singular = _("NAT Pool") data_type_singular = _("NAT Pool")
data_type_plural = _("NAT Pools") data_type_plural = _("NAT Pools")
def action(self, request, object_id):
client.delete_natpool(request, object_id)
class EditNATPoolLink(tables.LinkAction): class EditNATPoolLink(tables.LinkAction):
name = "update_nat_pool" name = "update_nat_pool"
@ -214,13 +246,16 @@ class EditNATPoolLink(tables.LinkAction):
urlstring = \ urlstring = \
"horizon:project:network_policy:update_natpool" "horizon:project:network_policy:update_natpool"
base_url = reverse(urlstring, base_url = reverse(urlstring,
kwargs={'nat_pool_id': nat_pool.id}) kwargs={'nat_pool_id': nat_pool.id})
return base_url return base_url
class NATPoolTable(tables.DataTable): class NATPoolTable(tables.DataTable):
name = tables.Column("name", verbose_name=_("Name"), name = tables.Column(
link="horizon:project:network_policy:nat_pool_details") "name",
verbose_name=_("Name"),
link="horizon:project:network_policy:nat_pool_details"
)
description = tables.Column("description", verbose_name=_("Description")) description = tables.Column("description", verbose_name=_("Description"))
ip_version = tables.Column("ip_version", verbose_name=_("IP Version")) ip_version = tables.Column("ip_version", verbose_name=_("IP Version"))
cidr = tables.Column("ip_pool", verbose_name=_("IP Pool")) cidr = tables.Column("ip_pool", verbose_name=_("IP Pool"))

View File

@ -9,15 +9,11 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
import re
from django.core.urlresolvers import reverse 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 exceptions
from horizon import forms from horizon import forms
from horizon import messages
from horizon import tables from horizon import tables
from horizon import tabs from horizon import tabs
@ -28,54 +24,10 @@ import tables as np_tables
import tabs as np_tabs import tabs as np_tabs
class IndexView(tabs.TabView): class IndexView(tabs.TabbedTableView):
tab_group_class = (np_tabs.L3PolicyTabs) tab_group_class = (np_tabs.L3PolicyTabs)
template_name = 'project/network_policy/details_tabs.html' template_name = 'project/network_policy/details_tabs.html'
def post(self, request, *args, **kwargs):
obj_ids = request.POST.getlist('object_ids')
action = request.POST['action']
obj_type = re.search('delete([0-9a-z]+)', action).group(1)
if not obj_ids:
obj_ids.append(re.search('([0-9a-z-]+)$', action).group(1))
if obj_type == 'spolicy':
for obj_id in obj_ids:
try:
client.delete_networkservice_policy(request, obj_id)
messages.success(request,
_('Deleted service policy %s') % obj_id)
except Exception as e:
msg = _('Unable to delete action. %s') % (str(e))
exceptions.handle(request, msg)
if obj_type == 'l3policy':
for obj_id in obj_ids:
try:
client.l3policy_delete(request, obj_id)
messages.success(request,
_('Deleted L3 policy %s') % obj_id)
except Exception as e:
msg = _('Unable to delete action. %s') % (str(e))
exceptions.handle(request, msg)
if obj_type == 'externalconnectivity':
for obj_id in obj_ids:
try:
client.delete_externalconnectivity(request, obj_id)
messages.success(request,
_('Deleted External Connectivity %s') % obj_id)
except Exception as e:
msg = _('Unable to delete action. %s') % (str(e))
exceptions.handle(request, msg)
if obj_type == 'natpool':
for obj_id in obj_ids:
try:
client.delete_natpool(request, obj_id)
messages.success(request,
_('Deleted NAT Pool %s') % obj_id)
except Exception as e:
msg = _('Unable to delete action. %s') % (str(e))
exceptions.handle(request, msg)
return self.get(request, *args, **kwargs)
class AddL3policyView(forms.ModalFormView): class AddL3policyView(forms.ModalFormView):
form_class = np_forms.AddL3PolicyForm form_class = np_forms.AddL3PolicyForm
@ -106,23 +58,6 @@ class L3PolicyDetailsView(tables.MultiTableView):
table_classes = (np_tables.L2PolicyTable,) table_classes = (np_tables.L2PolicyTable,)
template_name = 'project/network_policy/l3policy_details.html' template_name = 'project/network_policy/l3policy_details.html'
def post(self, request, *args, **kwargs):
obj_ids = request.POST.getlist('object_ids')
action = request.POST['action']
obj_type = re.search('delete([0-9a-z]+)', action).group(1)
if not obj_ids:
obj_ids.append(re.search('([0-9a-z-]+)$', action).group(1))
if obj_type == 'l2policy':
for obj_id in obj_ids:
try:
client.l2policy_delete(request, obj_id)
messages.success(request,
_('Deleted L2 policy %s') % obj_id)
except Exception as e:
msg = _('Unable to delete action. %s') % (str(e))
exceptions.handle(request, msg)
return self.get(request, *args, **kwargs)
def get_l2policy_table_data(self): def get_l2policy_table_data(self):
l2_policies = [] l2_policies = []
try: try:

View File

@ -13,6 +13,7 @@
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from gbpui import client
from horizon import tables from horizon import tables
@ -30,7 +31,7 @@ class EditServiceChainSpecLink(tables.LinkAction):
def get_link_url(self, scspec): def get_link_url(self, scspec):
base_url = reverse("horizon:project:network_services:update_sc_spec", base_url = reverse("horizon:project:network_services:update_sc_spec",
kwargs={'scspec_id': scspec.id}) kwargs={'scspec_id': scspec.id})
return base_url return base_url
@ -41,23 +42,27 @@ class DeleteServiceChainSpecLink(tables.DeleteAction):
data_type_singular = _("Service Chain Spec") data_type_singular = _("Service Chain Spec")
data_type_plural = _("Service Chain Specs") data_type_plural = _("Service Chain Specs")
def action(self, request, object_id):
client.delete_servicechain_spec(request, object_id)
class ServiceChainSpecTable(tables.DataTable): class ServiceChainSpecTable(tables.DataTable):
name = tables.Column("name", name = tables.Column(
verbose_name=_("Name"), "name",
link="horizon:project:network_services:sc_spec_details") verbose_name=_("Name"),
link="horizon:project:network_services:sc_spec_details"
)
description = tables.Column("description", description = tables.Column("description",
verbose_name=_("Description")) verbose_name=_("Description"))
nodes = tables.Column("nodes", verbose_name=_("Nodes")) nodes = tables.Column("nodes", verbose_name=_("Nodes"))
status = tables.Column("status", verbose_name=_("Status"))
class Meta(object): class Meta(object):
name = "service_chain_spec_table" name = "service_chain_spec_table"
verbose_name = _("Service Chain Specs") verbose_name = _("Service Chain Specs")
table_actions = (CreateServiceChainSpecLink, table_actions = (CreateServiceChainSpecLink,
DeleteServiceChainSpecLink,) DeleteServiceChainSpecLink,)
row_actions = (EditServiceChainSpecLink, row_actions = (EditServiceChainSpecLink,
DeleteServiceChainSpecLink,) DeleteServiceChainSpecLink,)
class CreateServiceChainNodeLink(tables.LinkAction): class CreateServiceChainNodeLink(tables.LinkAction):
@ -74,7 +79,7 @@ class EditServiceChainNodeLink(tables.LinkAction):
def get_link_url(self, scnode): def get_link_url(self, scnode):
base_url = reverse("horizon:project:network_services:update_sc_node", base_url = reverse("horizon:project:network_services:update_sc_node",
kwargs={'scnode_id': scnode.id}) kwargs={'scnode_id': scnode.id})
return base_url return base_url
@ -85,24 +90,28 @@ class DeleteServiceChainNodeLink(tables.DeleteAction):
data_type_singular = _("Service Chain Node") data_type_singular = _("Service Chain Node")
data_type_plural = _("Service Chain Nodes") data_type_plural = _("Service Chain Nodes")
def action(self, request, object_id):
client.delete_servicechain_node(request, object_id)
class ServiceChainNodeTable(tables.DataTable): class ServiceChainNodeTable(tables.DataTable):
name = tables.Column("name", name = tables.Column(
verbose_name=_("Name"), "name",
link="horizon:project:network_services:sc_node_details") verbose_name=_("Name"),
link="horizon:project:network_services:sc_node_details"
)
description = tables.Column("description", description = tables.Column("description",
verbose_name=_("Description")) verbose_name=_("Description"))
service_profile = tables.Column("service_profile", service_profile = tables.Column("service_profile",
verbose_name=_("Service Profile")) verbose_name=_("Service Profile"))
status = tables.Column("status", verbose_name=_("Status"))
class Meta(object): class Meta(object):
name = "service_chain_node_table" name = "service_chain_node_table"
verbose_name = _("Service Chain Node") verbose_name = _("Service Chain Node")
table_actions = (CreateServiceChainNodeLink, table_actions = (CreateServiceChainNodeLink,
DeleteServiceChainNodeLink,) DeleteServiceChainNodeLink,)
row_actions = (EditServiceChainNodeLink, row_actions = (EditServiceChainNodeLink,
DeleteServiceChainNodeLink,) DeleteServiceChainNodeLink,)
class CreateServiceChainInstanceLink(tables.LinkAction): class CreateServiceChainInstanceLink(tables.LinkAction):
@ -130,11 +139,16 @@ class DeleteServiceChainInstanceLink(tables.DeleteAction):
data_type_singular = _("ServiceChainInstance") data_type_singular = _("ServiceChainInstance")
data_type_plural = _("ServiceChainInstances") data_type_plural = _("ServiceChainInstances")
def action(self, request, object_id):
client.delete_servicechain_instance(request, object_id)
class ServiceChainInstanceTable(tables.DataTable): class ServiceChainInstanceTable(tables.DataTable):
name = tables.Column("name", name = tables.Column(
verbose_name=_("Name"), "name",
link="horizon:project:network_services:sc_instance_details") verbose_name=_("Name"),
link="horizon:project:network_services:sc_instance_details"
)
description = tables.Column("description", description = tables.Column("description",
verbose_name=_("Description")) verbose_name=_("Description"))
provider_ptg = tables.Column( provider_ptg = tables.Column(
@ -146,7 +160,6 @@ class ServiceChainInstanceTable(tables.DataTable):
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"))
status = tables.Column("status", verbose_name=_("Status"))
class Meta(object): class Meta(object):
name = "service_chain_instance_table" name = "service_chain_instance_table"
@ -167,21 +180,27 @@ class DeleteServiceProfileLink(tables.DeleteAction):
data_type_singular = _("ServiceProfile") data_type_singular = _("ServiceProfile")
data_type_plural = _("ServiceProfiles") data_type_plural = _("ServiceProfiles")
def action(self, request, object_id):
client.delete_service_profile(request, object_id)
class ServiceProfileTable(tables.DataTable): class ServiceProfileTable(tables.DataTable):
name = tables.Column("name", verbose_name=_("Name"), name = tables.Column(
link="horizon:project:network_services:service_profile_details") "name",
verbose_name=_("Name"),
link="horizon:project:network_services:service_profile_details"
)
description = tables.Column("description", description = tables.Column("description",
verbose_name=_("Description")) verbose_name=_("Description"))
service_type = tables.Column("service_type", service_type = tables.Column("service_type",
verbose_name=_("Service Type")) verbose_name=_("Service Type"))
insertion_mode = tables.Column("insertion_mode", insertion_mode = tables.Column("insertion_mode",
verbose_name=_("Insertion Mode")) verbose_name=_("Insertion Mode"))
vendor = tables.Column("vendor", verbose_name=_("Vendor")) vendor = tables.Column("vendor", verbose_name=_("Vendor"))
class Meta(object): class Meta(object):
name = "service_profile_table" name = "service_profile_table"
verbose_name = _("Service Profile") verbose_name = _("Service Profile")
table_actions = (CreateServiceProfileLink, table_actions = (CreateServiceProfileLink,
DeleteServiceProfileLink,) DeleteServiceProfileLink,)
row_actions = (DeleteServiceProfileLink,) row_actions = (DeleteServiceProfileLink,)

View File

@ -9,68 +9,17 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
import re
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
from horizon import forms from horizon import forms
from horizon import messages
from horizon import tabs from horizon import tabs
import forms as ns_forms import forms as ns_forms
import tabs as ns_tabs import tabs as ns_tabs
from gbpui import client
class IndexView(tabs.TabbedTableView):
class IndexView(tabs.TabView):
tab_group_class = (ns_tabs.ServiceChainTabs) tab_group_class = (ns_tabs.ServiceChainTabs)
template_name = 'project/network_services/details_tabs.html' template_name = 'project/network_services/details_tabs.html'
def post(self, request, *args, **kwargs):
obj_ids = request.POST.getlist('object_ids')
action = request.POST['action']
obj_type = re.search('delete([a-z]+)', action).group(1)
if not obj_ids:
obj_ids.append(re.search('([0-9a-z-]+)$', action).group(1))
if obj_type == 'scnode':
for obj_id in obj_ids:
try:
client.delete_servicechain_node(request, obj_id)
messages.success(request, _('Deleted %s') % obj_id)
except Exception as e:
exceptions.handle(request,
_('Unable to delete . %s') % e)
if obj_type == 'scinstance':
for obj_id in obj_ids:
try:
client.delete_servicechain_instance(request, obj_id)
messages.success(
request, _('Deleted %s') % obj_id)
except Exception as e:
exceptions.handle(request,
_('Unable to delete . %s') % e)
if obj_type == 'scspec':
for obj_id in obj_ids:
try:
client.delete_servicechain_spec(request, obj_id)
messages.success(request,
_('Deleted %s') % obj_id)
except Exception as e:
exceptions.handle(request,
_('Unable to delete . %s') % e)
if obj_type == 'serviceprofile':
for obj_id in obj_ids:
try:
client.delete_service_profile(request, obj_id)
messages.success(request,
_('Deleted %s') % obj_id)
except Exception as e:
exceptions.handle(request,
_('Unable to delete . %s') % e)
return self.get(request, *args, **kwargs)
class ServiceProfileDetailsView(tabs.TabView): class ServiceProfileDetailsView(tabs.TabView):
tab_group_class = (ns_tabs.ServiceProfileDetailsTabGroup) tab_group_class = (ns_tabs.ServiceProfileDetailsTabGroup)
@ -147,8 +96,8 @@ class ServiceChainSpecDetailsView(tabs.TabView):
class CreateServiceChainInstanceView(forms.ModalFormView): class CreateServiceChainInstanceView(forms.ModalFormView):
form_class = ns_forms.CreateServiceChainInstanceForm form_class = ns_forms.CreateServiceChainInstanceForm
template_name = "project/network_services/"\ template_name = "project/network_services/" \
"create_service_chain_instance.html" "create_service_chain_instance.html"
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super( context = super(
@ -158,8 +107,8 @@ class CreateServiceChainInstanceView(forms.ModalFormView):
class UpdateServiceChainInstanceView(forms.ModalFormView): class UpdateServiceChainInstanceView(forms.ModalFormView):
form_class = ns_forms.UpdateServiceChainInstanceForm form_class = ns_forms.UpdateServiceChainInstanceForm
template_name = "project/network_services/"\ template_name = "project/network_services/" \
"update_service_chain_instance.html" "update_service_chain_instance.html"
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super( context = super(

View File

@ -46,6 +46,9 @@ class DeletePTGLink(tables.DeleteAction):
data_type_singular = _("Group") data_type_singular = _("Group")
data_type_plural = _("Groups") data_type_plural = _("Groups")
def action(self, request, object_id):
client.policy_target_delete(request, object_id)
class AddPTGLink(tables.LinkAction): class AddPTGLink(tables.LinkAction):
name = "addpolicy_target" name = "addpolicy_target"
@ -55,12 +58,14 @@ class AddPTGLink(tables.LinkAction):
class PTGsTable(tables.DataTable): class PTGsTable(tables.DataTable):
name = tables.Column("name", name = tables.Column(
verbose_name=_("Name"), "name",
link="horizon:project:policytargets:policy_targetdetails") verbose_name=_("Name"),
link="horizon:project:policytargets:policy_targetdetails"
)
description = tables.Column("description", verbose_name=_("Description")) description = tables.Column("description", verbose_name=_("Description"))
provided_policy_rule_sets = tables.Column("provided_policy_rule_sets", provided_policy_rule_sets = tables.Column("provided_policy_rule_sets",
sortable=False, sortable=False,
verbose_name=_("Provided Rule Sets")) verbose_name=_("Provided Rule Sets"))
consumed_policy_rule_sets = tables.Column("consumed_policy_rule_sets", consumed_policy_rule_sets = tables.Column("consumed_policy_rule_sets",
sortable=False, sortable=False,
@ -102,14 +107,19 @@ class DeleteExternalPTGLink(tables.DeleteAction):
data_type_singular = _("Group") data_type_singular = _("Group")
data_type_plural = _("Groups") data_type_plural = _("Groups")
def action(self, request, object_id):
client.ext_policy_target_delete(request, object_id)
class ExternalPTGsTable(tables.DataTable): class ExternalPTGsTable(tables.DataTable):
name = tables.Column("name", name = tables.Column(
verbose_name=_("Name"), "name",
link="horizon:project:policytargets:ext_policy_targetdetails") verbose_name=_("Name"),
link="horizon:project:policytargets:ext_policy_targetdetails"
)
description = tables.Column("description", verbose_name=_("Description")) description = tables.Column("description", verbose_name=_("Description"))
provided_policy_rule_sets = tables.Column("provided_policy_rule_sets", provided_policy_rule_sets = tables.Column("provided_policy_rule_sets",
sortable=False, sortable=False,
verbose_name=_("Provided Rule Sets")) verbose_name=_("Provided Rule Sets"))
consumed_policy_rule_sets = tables.Column("consumed_policy_rule_sets", consumed_policy_rule_sets = tables.Column("consumed_policy_rule_sets",
sortable=False, sortable=False,
@ -231,9 +241,11 @@ class RemoveProvidedLink(tables.LinkAction):
class ProvidedContractsTable(tables.DataTable): class ProvidedContractsTable(tables.DataTable):
name = tables.Column("name", name = tables.Column(
link="horizon:project:application_policy:policy_rule_set_details", "name",
verbose_name=_("Name")) link="horizon:project:application_policy:policy_rule_set_details",
verbose_name=_("Name")
)
description = tables.Column("description", verbose_name=_("Description")) description = tables.Column("description", verbose_name=_("Description"))
policy_rules = tables.Column("policy_rules", policy_rules = tables.Column("policy_rules",
sortable=False, sortable=False,
@ -290,9 +302,11 @@ class RemoveConsumedLink(tables.LinkAction):
class ConsumedContractsTable(tables.DataTable): class ConsumedContractsTable(tables.DataTable):
name = tables.Column("name", name = tables.Column(
link="horizon:project:application_policy:policy_rule_set_details", "name",
verbose_name=_("Name")) link="horizon:project:application_policy:policy_rule_set_details",
verbose_name=_("Name")
)
description = tables.Column("description", description = tables.Column("description",
verbose_name=_("Description")) verbose_name=_("Description"))
policy_rules = tables.Column("policy_rules", policy_rules = tables.Column("policy_rules",

View File

@ -11,15 +11,14 @@
# under the License. # under the License.
import json import json
import re
from django.core.urlresolvers import reverse
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.http import HttpResponse # noqa from django.http import HttpResponse # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from horizon import exceptions from horizon import exceptions
from horizon import forms from horizon import forms
from horizon import messages
from horizon import tabs from horizon import tabs
from horizon.utils import memoized from horizon.utils import memoized
from horizon import workflows from horizon import workflows
@ -42,40 +41,14 @@ AddPTG = policy_target_workflows.AddPTG
AddExternalPTG = policy_target_workflows.AddExternalPTG AddExternalPTG = policy_target_workflows.AddExternalPTG
class IndexView(tabs.TabView): class IndexView(tabs.TabbedTableView):
tab_group_class = (PTGTabs) tab_group_class = (PTGTabs)
template_name = 'project/policytargets/details_tabs.html' template_name = 'project/policytargets/details_tabs.html'
page_title = _("Groups")
def post(self, request, *args, **kwargs):
obj_ids = request.POST.getlist('object_ids')
action = request.POST['action']
obj_type = re.search('delete([a-z]+)', action).group(1)
if not obj_ids:
obj_ids.append(re.search('([0-9a-z-]+)$', action).group(1))
if obj_type == 'policytarget':
for obj_id in obj_ids:
try:
client.policy_target_delete(request, obj_id)
messages.success(request,
_('Deleted Group %s') % obj_id)
except Exception as e:
exceptions.handle(request,
_('Unable to delete Group. %s') % e)
if obj_type == 'externalpolicytarget':
for obj_id in obj_ids:
try:
client.ext_policy_target_delete(request, obj_id)
messages.success(request,
_('Deleted External Group %s') % obj_id)
except Exception as e:
exceptions.handle(request,
_('Unable to delete External Group. %s') % e)
return self.get(request, *args, **kwargs)
class AddPTGView(workflows.WorkflowView): class AddPTGView(workflows.WorkflowView):
workflow_class = AddPTG workflow_class = AddPTG
template_name = "project/policytargets/addpolicy_target.html"
class AddExternalPTGView(workflows.WorkflowView): class AddExternalPTGView(workflows.WorkflowView):
@ -85,6 +58,7 @@ class AddExternalPTGView(workflows.WorkflowView):
class PTGDetailsView(tabs.TabbedTableView): class PTGDetailsView(tabs.TabbedTableView):
tab_group_class = (policy_target_tabs.PTGMemberTabs) tab_group_class = (policy_target_tabs.PTGMemberTabs)
template_name = 'project/policytargets/group_details.html' template_name = 'project/policytargets/group_details.html'
page_title = _("Group: {{ policy_target.name }}")
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(PTGDetailsView, self).get_context_data(**kwargs) context = super(PTGDetailsView, self).get_context_data(**kwargs)
@ -100,6 +74,7 @@ class PTGDetailsView(tabs.TabbedTableView):
class ExternalPTGDetailsView(tabs.TabbedTableView): class ExternalPTGDetailsView(tabs.TabbedTableView):
tab_group_class = (policy_target_tabs.ExternalPTGMemberTabs) tab_group_class = (policy_target_tabs.ExternalPTGMemberTabs)
template_name = 'project/policytargets/group_details.html' template_name = 'project/policytargets/group_details.html'
page_title = _("Group: {{ policy_target.name }}")
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(ExternalPTGDetailsView, self).get_context_data( context = super(ExternalPTGDetailsView, self).get_context_data(
@ -126,16 +101,25 @@ class LaunchVMView(workflows.WorkflowView):
class UpdatePTGView(forms.ModalFormView): class UpdatePTGView(forms.ModalFormView):
form_class = policy_target_forms.UpdatePolicyTargetForm form_class = policy_target_forms.UpdatePolicyTargetForm
template_name = "project/policytargets/update_policy_target.html" form_id = "update_policy_target_form"
modal_header = _("Edit Group")
template_name = "gbpui/form_with_description.html"
context_object_name = 'policy_target' context_object_name = 'policy_target'
submit_label = _("Save Changes")
submit_url = "horizon:project:policytargets:updatepolicy_target"
success_url = reverse_lazy("horizon:project:policytargets:index") success_url = reverse_lazy("horizon:project:policytargets:index")
page_title = _("Edit Group")
help_text = _("You may update policy details here.")
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(UpdatePTGView, self).get_context_data(**kwargs) context = super(UpdatePTGView, self).get_context_data(**kwargs)
context["policy_target_id"] = self.kwargs['policy_target_id'] obj_id = self.kwargs['policy_target_id']
context["policy_target_id"] = obj_id
obj = self._get_object() obj = self._get_object()
if obj: if obj:
context['name'] = obj.name context['name'] = obj.name
context["submit_url"] = reverse(self.submit_url, args=(obj_id,))
context["help_text"] = self.help_text
return context return context
@memoized.memoized_method @memoized.memoized_method
@ -157,16 +141,25 @@ class UpdatePTGView(forms.ModalFormView):
class UpdateExternalPTGView(forms.ModalFormView): class UpdateExternalPTGView(forms.ModalFormView):
form_class = policy_target_forms.UpdateExternalPolicyTargetForm form_class = policy_target_forms.UpdateExternalPolicyTargetForm
template_name = "project/policytargets/update_external_policy_target.html" form_id = "update_policy_target_form"
modal_header = _("Edit Group")
template_name = "gbpui/form_with_description.html"
context_object_name = 'external_policy_target' context_object_name = 'external_policy_target'
submit_label = _("Save Changes")
submit_url = "horizon:project:policytargets:update_ext_policy_target"
success_url = reverse_lazy("horizon:project:policytargets:index") success_url = reverse_lazy("horizon:project:policytargets:index")
page_title = _("Edit Group")
help_text = _("You may update external policy details here.")
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(UpdateExternalPTGView, self).get_context_data(**kwargs) context = super(UpdateExternalPTGView, self).get_context_data(**kwargs)
context["ext_policy_target_id"] = self.kwargs['ext_policy_target_id'] obj_id = self.kwargs['ext_policy_target_id']
context["ext_policy_target_id"] = obj_id
obj = self._get_object() obj = self._get_object()
if obj: if obj:
context['name'] = obj.name context['name'] = obj.name
context["submit_url"] = reverse(self.submit_url, args=(obj_id,))
context["help_text"] = self.help_text
return context return context
@memoized.memoized_method @memoized.memoized_method
@ -188,7 +181,15 @@ class UpdateExternalPTGView(forms.ModalFormView):
class ExtAddProvidedPRSView(forms.ModalFormView): class ExtAddProvidedPRSView(forms.ModalFormView):
form_class = policy_target_forms.ExtAddProvidedPRSForm form_class = policy_target_forms.ExtAddProvidedPRSForm
template_name = "project/policytargets/ext_add_provided_prs.html" form_id = "ext_add_provided_form"
modal_header = _("Add Provided PRS")
template_name = "gbpui/form_with_description.html"
submit_label = _("Save Changes")
submit_url = "horizon:project:policytargets:ext_add_provided_prs"
page_title = _("Add Provided PRS")
help_text = _(
"Add provided policy rule set. Press Ctrl to select multiple items."
)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(ExtAddProvidedPRSView, self).get_context_data(**kwargs) context = super(ExtAddProvidedPRSView, self).get_context_data(**kwargs)
@ -201,8 +202,15 @@ class ExtAddProvidedPRSView(forms.ModalFormView):
class ExtRemoveProvidedPRSView(forms.ModalFormView): class ExtRemoveProvidedPRSView(forms.ModalFormView):
form_class = policy_target_forms.ExtRemoveProvidedPRSForm form_class = policy_target_forms.ExtRemoveProvidedPRSForm
template_name = \ form_id = "ext_remove_provided_form"
"project/policytargets/ext_remove_provided_prs.html" modal_header = _("Remove Provided PRS")
template_name = "gbpui/form_with_description.html"
submit_label = _("Save Changes")
submit_url = "horizon:project:policytargets:ext_remove_provided_prs"
page_title = _("Remove Provided PRS")
help_text = _(
"Remove provided policy rule set. Press Ctrl to select multiple items."
)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(ExtRemoveProvidedPRSView, self).get_context_data( context = super(ExtRemoveProvidedPRSView, self).get_context_data(
@ -216,7 +224,15 @@ class ExtRemoveProvidedPRSView(forms.ModalFormView):
class AddProvidedPRSView(forms.ModalFormView): class AddProvidedPRSView(forms.ModalFormView):
form_class = policy_target_forms.AddProvidedPRSForm form_class = policy_target_forms.AddProvidedPRSForm
template_name = "project/policytargets/add_provided_prs.html" form_id = "add_provided_form"
modal_header = _("Add Provided PRS")
template_name = "gbpui/form_with_description.html"
submit_label = _("Save Changes")
submit_url = "horizon:project:policytargets:add_provided_prs"
page_title = _("Add Provided PRS")
help_text = _(
"Add provided policy rule set. Press Ctrl to select multiple items."
)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(AddProvidedPRSView, self).get_context_data(**kwargs) context = super(AddProvidedPRSView, self).get_context_data(**kwargs)
@ -229,7 +245,15 @@ class AddProvidedPRSView(forms.ModalFormView):
class RemoveProvidedPRSView(forms.ModalFormView): class RemoveProvidedPRSView(forms.ModalFormView):
form_class = policy_target_forms.RemoveProvidedPRSForm form_class = policy_target_forms.RemoveProvidedPRSForm
template_name = "project/policytargets/remove_provided_prs.html" form_id = "remove_provided_form"
modal_header = _("Remove Provided PRS")
template_name = "gbpui/form_with_description.html"
submit_label = _("Save Changes")
submit_url = "horizon:project:policytargets:remove_provided_prs"
page_title = _("Remove Provided PRS")
help_text = _(
"Remove provided policy rule set. Press Ctrl to select multiple items."
)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(RemoveProvidedPRSView, self).get_context_data(**kwargs) context = super(RemoveProvidedPRSView, self).get_context_data(**kwargs)
@ -242,7 +266,15 @@ class RemoveProvidedPRSView(forms.ModalFormView):
class ExtAddConsumedPRSView(forms.ModalFormView): class ExtAddConsumedPRSView(forms.ModalFormView):
form_class = policy_target_forms.ExtAddConsumedPRSForm form_class = policy_target_forms.ExtAddConsumedPRSForm
template_name = "project/policytargets/ext_add_consumed_prs.html" form_id = "ext_add_consumed_form"
modal_header = _("Add Policy Rule Set")
template_name = "gbpui/form_with_description.html"
submit_label = _("Save Changes")
submit_url = "horizon:project:policytargets:ext_add_consumed_prs"
page_title = _("Add Policy Rule Set")
help_text = _(
"Add consumed policy rule set. Press Ctrl to select multiple items."
)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(ExtAddConsumedPRSView, self).get_context_data(**kwargs) context = super(ExtAddConsumedPRSView, self).get_context_data(**kwargs)
@ -255,8 +287,15 @@ class ExtAddConsumedPRSView(forms.ModalFormView):
class ExtRemoveConsumedPRSView(forms.ModalFormView): class ExtRemoveConsumedPRSView(forms.ModalFormView):
form_class = policy_target_forms.ExtRemoveConsumedPRSForm form_class = policy_target_forms.ExtRemoveConsumedPRSForm
template_name = \ form_id = "remove_contract_form"
"project/policytargets/ext_remove_consumed_prs.html" modal_header = _("Remove Policy Rule Set")
template_name = "gbpui/form_with_description.html"
submit_label = _("Save Changes")
submit_url = "horizon:project:policytargets:ext_remove_consumed_prs"
page_title = _("Remove Policy Rule Set")
help_text = _(
"Remove consumed policy rule set. Press Ctrl to select multiple items."
)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(ExtRemoveConsumedPRSView, self).get_context_data( context = super(ExtRemoveConsumedPRSView, self).get_context_data(
@ -270,7 +309,15 @@ class ExtRemoveConsumedPRSView(forms.ModalFormView):
class AddConsumedPRSView(forms.ModalFormView): class AddConsumedPRSView(forms.ModalFormView):
form_class = policy_target_forms.AddConsumedPRSForm form_class = policy_target_forms.AddConsumedPRSForm
template_name = "project/policytargets/add_consumed_prs.html" form_id = "add_consumed_form"
modal_header = _("Add ")
template_name = "gbpui/form_with_description.html"
submit_label = _("Save Changes")
submit_url = "horizon:project:policytargets:add_consumed_prs"
page_title = _("Add ")
help_text = _(
"Add consumed policy rule set. Press Ctrl to select multiple items."
)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(AddConsumedPRSView, self).get_context_data(**kwargs) context = super(AddConsumedPRSView, self).get_context_data(**kwargs)
@ -283,7 +330,15 @@ class AddConsumedPRSView(forms.ModalFormView):
class RemoveConsumedPRSView(forms.ModalFormView): class RemoveConsumedPRSView(forms.ModalFormView):
form_class = policy_target_forms.RemoveConsumedPRSForm form_class = policy_target_forms.RemoveConsumedPRSForm
template_name = "project/policytargets/remove_consumed_prs.html" form_id = "remove_contract_form"
modal_header = _("Remove Policy Rule Set")
template_name = "gbpui/form_with_description.html"
submit_label = _("Save Changes")
submit_url = "horizon:project:policytargets:remove_consumed_prs"
page_title = _("Remove Policy Rule Set")
help_text = _(
"Remove consumed policy rule set. Press Ctrl to select multiple items."
)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(RemoveConsumedPRSView, self).get_context_data(**kwargs) context = super(RemoveConsumedPRSView, self).get_context_data(**kwargs)