can't associate multiple ext-seg to an ext-group
Added support to associate multiple ext-segments
to external group while creation and also made
subnetID as optional field in ext-segment
creation.
Change-Id: I3cd591caede3a513e95c670235db47ed72249353
Closes-Bug: #1505416
(cherry picked from commit faa77b0218
)
This commit is contained in:
parent
f49fbeb021
commit
9dbadd9ab6
@ -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"
|
||||
value = ["<ul>"]
|
||||
li = lambda x: "<li><a href='" + \
|
||||
reverse(exturl, kwargs={'external_connectivity_id': x.id}) + \
|
||||
"'>" + x.name + "</a></li>"
|
||||
for external_segment in pt.external_segments:
|
||||
ext_policy = client.get_externalconnectivity(request,
|
||||
pt.external_segments[0])
|
||||
u = reverse(exturl, kwargs={'external_connectivity_id': ext_policy.id})
|
||||
exttag = mark_safe(
|
||||
"<a href='" + u + "'>" + ext_policy.name + "</a>")
|
||||
setattr(pt, 'external_segments', exttag)
|
||||
external_segment)
|
||||
value.append(li(ext_policy))
|
||||
value.append("</ul>")
|
||||
value = "".join(value)
|
||||
setattr(pt, 'external_segments', mark_safe(value))
|
||||
return pt
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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'):
|
||||
|
@ -36,6 +36,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):
|
||||
@ -230,9 +232,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")
|
||||
@ -263,9 +267,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
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user