diff --git a/gbpui/column_filters.py b/gbpui/column_filters.py
index b02c8f8..83f9421 100644
--- a/gbpui/column_filters.py
+++ b/gbpui/column_filters.py
@@ -90,12 +90,17 @@ def update_policy_target_attributes(request, pt):
setattr(pt, 'l2_policy_id', atag)
if hasattr(pt, 'external_segments'):
exturl = "horizon:project:network_policy:external_connectivity_details"
- ext_policy = client.get_externalconnectivity(request,
- pt.external_segments[0])
- u = reverse(exturl, kwargs={'external_connectivity_id': ext_policy.id})
- exttag = mark_safe(
- "" + ext_policy.name + "")
- setattr(pt, 'external_segments', exttag)
+ value = ["
"]
+ li = lambda x: "- " + x.name + "
"
+ for external_segment in pt.external_segments:
+ ext_policy = client.get_externalconnectivity(request,
+ external_segment)
+ value.append(li(ext_policy))
+ value.append("
")
+ value = "".join(value)
+ setattr(pt, 'external_segments', mark_safe(value))
return pt
diff --git a/gbpui/panels/network_policy/forms.py b/gbpui/panels/network_policy/forms.py
index e950d63..1694f85 100644
--- a/gbpui/panels/network_policy/forms.py
+++ b/gbpui/panels/network_policy/forms.py
@@ -412,8 +412,9 @@ class UpdateExternalConnectivityForm(forms.SelfHandlingForm):
msg = _("External Connectivity updated successfully!")
LOG.debug(msg)
return http.HttpResponseRedirect(url)
- except Exception:
- msg = _("Failed to update External Connectivity")
+ except Exception as e:
+ msg = _("Failed to update External Connectivity.%s") % \
+ (str(e))
LOG.error(msg)
exceptions.handle(request, msg, redirect=shortcuts.redirect)
@@ -453,15 +454,17 @@ class CreateExternalConnectivityForm(forms.SelfHandlingForm):
net_list = api.neutron.network_list(request, **dic)
subnet_list = api.neutron.subnet_list(request)
net_id_list = [net.id for net in net_list]
- self.fields['subnet_id'].choices = [(subnet.id, subnet.name)
- for subnet in subnet_list if subnet.network_id in net_id_list]
+ self.fields['subnet_id'].choices = [('', 'Select')] + \
+ [(subnet.id, subnet.name) for subnet in subnet_list
+ if subnet.network_id in net_id_list]
except Exception:
msg = _("Failed to get Subnet ID list.")
exceptions.handle(request, msg)
def handle(self, request, context):
- url = reverse("horizon:project:network_policy:index")
try:
+ if context['subnet_id'] == '':
+ del context['subnet_id']
if context['cidr'] == '':
del context['cidr']
routes = context['external_routes']
@@ -473,11 +476,12 @@ class CreateExternalConnectivityForm(forms.SelfHandlingForm):
'nexthop': values[1]}
p.append(values)
context['external_routes'] = p
- client.create_externalconnectivity(
+ external_segment = client.create_externalconnectivity(
request, **context)
- msg = _("External Connectivity updatedsuccessfully!")
+ msg = _('External Connectivity successfully created.')
LOG.debug(msg)
- return http.HttpResponseRedirect(url)
+ messages.success(request, msg)
+ return external_segment
except Exception as e:
msg = str(e)
LOG.error(msg)
diff --git a/gbpui/panels/network_policy/views.py b/gbpui/panels/network_policy/views.py
index d230f31..e6d9361 100644
--- a/gbpui/panels/network_policy/views.py
+++ b/gbpui/panels/network_policy/views.py
@@ -12,6 +12,7 @@
import re
+from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
@@ -230,6 +231,12 @@ class CreateExternalConnectivityView(forms.ModalFormView):
CreateExternalConnectivityView, self).get_context_data(**kwargs)
return context
+ def get_success_url(self):
+ return reverse('horizon:project:network_policy:index')
+
+ def get_object_id(self, external_segment):
+ return [external_segment.id]
+
class ExternalConnectivityDetailsView(tabs.TabView):
tab_group_class = (np_tabs.ExternalConnectivityDetailsTabs)
diff --git a/gbpui/panels/policytargets/forms.py b/gbpui/panels/policytargets/forms.py
index c781830..c4a3ced 100644
--- a/gbpui/panels/policytargets/forms.py
+++ b/gbpui/panels/policytargets/forms.py
@@ -145,9 +145,9 @@ class UpdateExternalPolicyTargetForm(forms.SelfHandlingForm):
label=_("Provided Policy Rule Set"), required=False)
consumed_policy_rule_sets = forms.MultipleChoiceField(
label=_("Consumed Policy Rule Set"), required=False)
- external_segments = forms.ChoiceField(
- label=_("External Connectivity"),
- help_text=_("Select external segment for Group."))
+ external_segments = forms.MultipleChoiceField(
+ label=_("External Connectivity"), required=True,
+ help_text=_("Select external segment(s) for Group."))
shared = forms.BooleanField(label=_("Shared"), required=False)
failure_url = 'horizon:project:policytargets:index'
@@ -183,10 +183,8 @@ class UpdateExternalPolicyTargetForm(forms.SelfHandlingForm):
consumed_init.append(item[0])
self.fields['provided_policy_rule_sets'].initial = provided_init
self.fields['consumed_policy_rule_sets'].initial = consumed_init
- for attr in ['name', 'description', 'shared']:
+ for attr in ['name', 'description', 'shared', 'external_segments']:
self.fields[attr].initial = getattr(ext_policy_target, attr)
- self.fields['external_segments'].initial = \
- ext_policy_target.external_segments[0]
except Exception as e:
msg = _('Unable to retrieve policy_rule_set details. %s') % (
str(e))
@@ -202,7 +200,6 @@ class UpdateExternalPolicyTargetForm(forms.SelfHandlingForm):
def handle(self, request, context):
ext_policy_target_id = self.initial['ext_policy_target_id']
name_or_id = context.get('name') or ext_policy_target_id
- external_segment_list = []
try:
if 'provided_policy_rule_sets' in context:
if context.get('provided_policy_rule_sets'):
@@ -218,9 +215,6 @@ class UpdateExternalPolicyTargetForm(forms.SelfHandlingForm):
for i in context['consumed_policy_rule_sets']])
else:
context['consumed_policy_rule_sets'] = None
- if 'external_segments' in context:
- external_segment_list.append(context['external_segments'])
- context['external_segments'] = external_segment_list
if context.get('name'):
context['name'] = html.escape(context['name'])
if context.get('description'):
diff --git a/gbpui/panels/policytargets/workflows.py b/gbpui/panels/policytargets/workflows.py
index 855f61a..09911fd 100644
--- a/gbpui/panels/policytargets/workflows.py
+++ b/gbpui/panels/policytargets/workflows.py
@@ -34,6 +34,8 @@ from gbpui import fields
LOG = logging.getLogger(__name__)
POLICY_RULE_SET_URL = "horizon:project:application_policy:addpolicy_rule_set"
+ADD_EXTERNAL_CONNECTIVITY = \
+ "horizon:project:network_policy:create_external_connectivity"
class SelectPolicyRuleSetAction(workflows.Action):
@@ -228,9 +230,11 @@ class AddPTG(workflows.Workflow):
class ExternalConnectivityAction(workflows.Action):
- external_segments = forms.ChoiceField(
+ external_segments = fields.DynamicMultiChoiceField(
label=_("External Connectivity"),
- help_text=_("Select external segment for Group."))
+ required=True,
+ add_item_link=ADD_EXTERNAL_CONNECTIVITY,
+ help_text=_("Select external segment(s) for Group."))
class Meta(object):
name = _("External Connectivity")
@@ -261,9 +265,7 @@ class ExternalConnectivityStep(workflows.Step):
contributes = ("external_segments",)
def contribute(self, data, context):
- ext_seg_list = []
- ext_seg_list.append(data['external_segments'])
- context['external_segments'] = ext_seg_list
+ context['external_segments'] = data.get('external_segments', [])
return context