Merge "Can't associated multiple ext-seg to L3policy"
This commit is contained in:
@@ -252,17 +252,18 @@ def update_classifier_attributes(classifiers):
|
|||||||
def update_l3_policy_attributes(request, l3_policy):
|
def update_l3_policy_attributes(request, l3_policy):
|
||||||
url = "horizon:project:network_policy:external_connectivity_details"
|
url = "horizon:project:network_policy:external_connectivity_details"
|
||||||
if bool(l3_policy.external_segments):
|
if bool(l3_policy.external_segments):
|
||||||
external_connectivity_id = l3_policy.external_segments.keys()[0]
|
value = ["<ul>"]
|
||||||
try:
|
li = \
|
||||||
|
lambda x: "<li><a href='" + \
|
||||||
|
reverse(url, kwargs={'external_connectivity_id': x.id}) + \
|
||||||
|
"'>" + x.name + "</a>" + " : " + \
|
||||||
|
l3_policy.external_segments[x.id][0] + "</li>"
|
||||||
|
for ec in l3_policy.external_segments.keys():
|
||||||
external_connectivity = client.get_externalconnectivity(request,
|
external_connectivity = client.get_externalconnectivity(request,
|
||||||
external_connectivity_id)
|
ec)
|
||||||
segment_name = external_connectivity.name
|
value.append(li(external_connectivity))
|
||||||
except Exception:
|
value.append("</ul>")
|
||||||
segment_name = external_connectivity_id
|
tag = mark_safe("".join(value))
|
||||||
u = reverse(url,
|
|
||||||
kwargs={'external_connectivity_id': external_connectivity_id})
|
|
||||||
tag = mark_safe("<a href='" + u + "'>" + segment_name + "</a>"
|
|
||||||
+ " : " + l3_policy.external_segments.values()[0][0])
|
|
||||||
else:
|
else:
|
||||||
tag = '-'
|
tag = '-'
|
||||||
setattr(l3_policy, 'external_segments', tag)
|
setattr(l3_policy, 'external_segments', tag)
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ from gbpui import fields
|
|||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
EXT_SEG_PARAM_URL = "horizon:project:network_policy:add_external_segment_param"
|
||||||
NETWORK_PARAM_URL = "horizon:project:network_policy:add_network_service_param"
|
NETWORK_PARAM_URL = "horizon:project:network_policy:add_network_service_param"
|
||||||
ROUTE_URL = "horizon:project:network_policy:add_external_route_param"
|
ROUTE_URL = "horizon:project:network_policy:add_external_route_param"
|
||||||
|
|
||||||
@@ -62,21 +63,16 @@ class AddL3PolicyForm(forms.SelfHandlingForm):
|
|||||||
label=_("Subnet Prefix Length"),
|
label=_("Subnet Prefix Length"),
|
||||||
help_text=_("Between 2 - 30 for IP4"
|
help_text=_("Between 2 - 30 for IP4"
|
||||||
"and 2-127 for IP6."),)
|
"and 2-127 for IP6."),)
|
||||||
external_segments = forms.ChoiceField(label=_("External Segment"),
|
external_segments = \
|
||||||
required=False)
|
fields.CustomMultiChoiceField(label=_("External Segments"),
|
||||||
segment_ip = forms.IPField(label=_("External Segment IP"), initial="",
|
add_item_link=EXT_SEG_PARAM_URL,
|
||||||
required=False)
|
required=False)
|
||||||
shared = forms.BooleanField(label=_("Shared"),
|
shared = forms.BooleanField(label=_("Shared"),
|
||||||
initial=False,
|
initial=False,
|
||||||
required=False)
|
required=False)
|
||||||
|
|
||||||
def __init__(self, request, *args, **kwargs):
|
def __init__(self, request, *args, **kwargs):
|
||||||
super(AddL3PolicyForm, self).__init__(request, *args, **kwargs)
|
super(AddL3PolicyForm, self).__init__(request, *args, **kwargs)
|
||||||
ec_list = client.externalconnectivity_list(request,
|
|
||||||
tenant_id=request.user.tenant_id)
|
|
||||||
external_segments_options = [(ec.id, ec.name) for ec in ec_list]
|
|
||||||
external_segments_options.insert(0, (None, "Select"))
|
|
||||||
self.fields['external_segments'].choices = external_segments_options
|
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
cleaned_data = super(AddL3PolicyForm, self).clean()
|
cleaned_data = super(AddL3PolicyForm, self).clean()
|
||||||
@@ -88,23 +84,22 @@ class AddL3PolicyForm(forms.SelfHandlingForm):
|
|||||||
raise forms.ValidationError(msg)
|
raise forms.ValidationError(msg)
|
||||||
if ipversion == 6 and subnet_prefix_length not in range(2, 128):
|
if ipversion == 6 and subnet_prefix_length not in range(2, 128):
|
||||||
raise forms.ValidationError(msg)
|
raise forms.ValidationError(msg)
|
||||||
if cleaned_data['external_segments'] != '':
|
|
||||||
if cleaned_data['segment_ip'] == '':
|
|
||||||
self.add_error('segment_ip', 'This field is required')
|
|
||||||
return cleaned_data
|
return cleaned_data
|
||||||
|
|
||||||
def handle(self, request, context):
|
def handle(self, request, context):
|
||||||
url = reverse("horizon:project:network_policy:index")
|
url = reverse("horizon:project:network_policy:index")
|
||||||
external_segment_dic = {}
|
external_segment_dic = {}
|
||||||
l = []
|
|
||||||
try:
|
try:
|
||||||
if context['external_segments'] != '':
|
if context['external_segments']:
|
||||||
l.append(context['segment_ip'])
|
dic = {}
|
||||||
external_segment_dic[context['external_segments']] = l
|
for external_segment in context['external_segments']:
|
||||||
|
values = [i.split(":")[1]
|
||||||
|
for i in external_segment.split(",")]
|
||||||
|
dic[values[0]] = [values[1]]
|
||||||
|
external_segment_dic.update(dic)
|
||||||
context['external_segments'] = external_segment_dic
|
context['external_segments'] = external_segment_dic
|
||||||
else:
|
else:
|
||||||
del context['external_segments']
|
context['external_segments'] = {}
|
||||||
del context['segment_ip']
|
|
||||||
if context.get('name'):
|
if context.get('name'):
|
||||||
context['name'] = html.escape(context['name'])
|
context['name'] = html.escape(context['name'])
|
||||||
if context.get('description'):
|
if context.get('description'):
|
||||||
@@ -117,16 +112,39 @@ class AddL3PolicyForm(forms.SelfHandlingForm):
|
|||||||
exceptions.handle(request, str(e), redirect=url)
|
exceptions.handle(request, str(e), redirect=url)
|
||||||
|
|
||||||
|
|
||||||
|
class ExternalSegmentParam(object):
|
||||||
|
|
||||||
|
def __init__(self, context):
|
||||||
|
self.external_segment = context['external_segment']
|
||||||
|
self.segment_ip = context['segment_ip']
|
||||||
|
self.name = "ES:%s,IP:%s" % (
|
||||||
|
self.external_segment, self.segment_ip)
|
||||||
|
self.id = self.name
|
||||||
|
|
||||||
|
|
||||||
|
class CreateExternalSegmentParamForm(forms.SelfHandlingForm):
|
||||||
|
external_segment = forms.ChoiceField(label=_("External Segment"),
|
||||||
|
required=False)
|
||||||
|
segment_ip = forms.IPField(label=_("External Segment IP"), initial="",
|
||||||
|
required=False)
|
||||||
|
|
||||||
|
def __init__(self, request, *args, **kwargs):
|
||||||
|
super(CreateExternalSegmentParamForm, self).__init__(request,
|
||||||
|
*args,
|
||||||
|
**kwargs)
|
||||||
|
ec_list = client.externalconnectivity_list(request,
|
||||||
|
tenant_id=request.user.tenant_id)
|
||||||
|
external_segments_options = [(ec.id, ec.name) for ec in ec_list]
|
||||||
|
self.fields['external_segment'].choices = external_segments_options
|
||||||
|
|
||||||
|
def handle(self, request, context):
|
||||||
|
return ExternalSegmentParam(context)
|
||||||
|
|
||||||
|
|
||||||
class UpdateL3PolicyForm(AddL3PolicyForm):
|
class UpdateL3PolicyForm(AddL3PolicyForm):
|
||||||
def __init__(self, request, *args, **kwargs):
|
def __init__(self, request, *args, **kwargs):
|
||||||
super(UpdateL3PolicyForm, self).__init__(request, *args, **kwargs)
|
super(UpdateL3PolicyForm, self).__init__(request, *args, **kwargs)
|
||||||
try:
|
try:
|
||||||
ec_list = client.externalconnectivity_list(request,
|
|
||||||
tenant_id=request.user.tenant_id)
|
|
||||||
external_segments_options = [(ec.id, ec.name) for ec in ec_list]
|
|
||||||
external_segments_options.insert(0, (None, "Select"))
|
|
||||||
self.fields['external_segments'].choices = \
|
|
||||||
external_segments_options
|
|
||||||
l3policy_id = self.initial['l3policy_id']
|
l3policy_id = self.initial['l3policy_id']
|
||||||
l3 = client.l3policy_get(request, l3policy_id)
|
l3 = client.l3policy_get(request, l3policy_id)
|
||||||
for item in ['name', 'description', 'ip_version',
|
for item in ['name', 'description', 'ip_version',
|
||||||
@@ -134,13 +152,14 @@ class UpdateL3PolicyForm(AddL3PolicyForm):
|
|||||||
self.fields[item].initial = str(l3[item])
|
self.fields[item].initial = str(l3[item])
|
||||||
self.fields['shared'].initial = l3['shared']
|
self.fields['shared'].initial = l3['shared']
|
||||||
if bool(l3['external_segments']):
|
if bool(l3['external_segments']):
|
||||||
self.fields['external_segments'].initial = \
|
es_choices = []
|
||||||
l3['external_segments'].keys()[0]
|
es_initial = []
|
||||||
self.fields['segment_ip'].initial = \
|
for key, value in l3['external_segments'].items():
|
||||||
l3['external_segments'].values()[0][0]
|
val = 'ES:' + key + ',IP:' + value[0]
|
||||||
else:
|
es_choices.append((val, val))
|
||||||
self.fields['external_segments'].initial = None
|
es_initial.append(val)
|
||||||
self.fields['segment_ip'].initial = ''
|
self.fields['external_segments'].choices = es_choices
|
||||||
|
self.fields['external_segments'].initial = es_initial
|
||||||
except Exception:
|
except Exception:
|
||||||
msg = _("Failed to get L3 policy")
|
msg = _("Failed to get L3 policy")
|
||||||
LOG.error(msg)
|
LOG.error(msg)
|
||||||
@@ -148,7 +167,6 @@ class UpdateL3PolicyForm(AddL3PolicyForm):
|
|||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
external_segment_dict = {}
|
external_segment_dict = {}
|
||||||
l = []
|
|
||||||
cleaned_data = super(UpdateL3PolicyForm, self).clean()
|
cleaned_data = super(UpdateL3PolicyForm, self).clean()
|
||||||
if self.is_valid():
|
if self.is_valid():
|
||||||
ipversion = int(cleaned_data['ip_version'])
|
ipversion = int(cleaned_data['ip_version'])
|
||||||
@@ -158,20 +176,16 @@ class UpdateL3PolicyForm(AddL3PolicyForm):
|
|||||||
raise forms.ValidationError(msg)
|
raise forms.ValidationError(msg)
|
||||||
if ipversion == 6 and subnet_prefix_length not in range(2, 128):
|
if ipversion == 6 and subnet_prefix_length not in range(2, 128):
|
||||||
raise forms.ValidationError(msg)
|
raise forms.ValidationError(msg)
|
||||||
if cleaned_data['external_segments'] != '':
|
if cleaned_data['external_segments']:
|
||||||
if cleaned_data['segment_ip'] == '':
|
dic = {}
|
||||||
self.add_error('segment_ip', 'This field is required')
|
for external_segment in cleaned_data['external_segments']:
|
||||||
if 'external_segments' in self.changed_data or \
|
values = [i.split(":")[1]
|
||||||
'segment_ip' in self.changed_data:
|
for i in external_segment.split(",")]
|
||||||
if cleaned_data['external_segments'] != '':
|
dic[values[0]] = [values[1]]
|
||||||
l.append(cleaned_data['segment_ip'])
|
external_segment_dict.update(dic)
|
||||||
external_segment_dict[cleaned_data['external_segments']] = \
|
cleaned_data['external_segments'] = external_segment_dict
|
||||||
l
|
else:
|
||||||
cleaned_data['external_segments'] = external_segment_dict
|
cleaned_data['external_segments'] = {}
|
||||||
else:
|
|
||||||
cleaned_data['external_segments'] = {}
|
|
||||||
del cleaned_data['segment_ip']
|
|
||||||
self.changed_data.append('external_segments')
|
|
||||||
updated_data = {d: cleaned_data[d] for d in cleaned_data
|
updated_data = {d: cleaned_data[d] for d in cleaned_data
|
||||||
if d in self.changed_data}
|
if d in self.changed_data}
|
||||||
cleaned_data = updated_data
|
cleaned_data = updated_data
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class CreateL2PolicyLink(tables.LinkAction):
|
|||||||
|
|
||||||
class EditL2PolicyLink(tables.LinkAction):
|
class EditL2PolicyLink(tables.LinkAction):
|
||||||
name = "update_l2policy"
|
name = "update_l2policy"
|
||||||
verbose_name = _("Edit L2Policy")
|
verbose_name = _("Edit")
|
||||||
classes = ("ajax-modal", "btn-update",)
|
classes = ("ajax-modal", "btn-update",)
|
||||||
|
|
||||||
def get_link_url(self, l2policy):
|
def get_link_url(self, l2policy):
|
||||||
@@ -67,7 +67,7 @@ class CreateL3PolicyLink(tables.LinkAction):
|
|||||||
|
|
||||||
class EditL3PolicyLink(tables.LinkAction):
|
class EditL3PolicyLink(tables.LinkAction):
|
||||||
name = "update_l3policy"
|
name = "update_l3policy"
|
||||||
verbose_name = _("Edit L3Policy")
|
verbose_name = _("Edit")
|
||||||
classes = ("ajax-modal", "btn-update",)
|
classes = ("ajax-modal", "btn-update",)
|
||||||
|
|
||||||
def get_link_url(self, l3policy):
|
def get_link_url(self, l3policy):
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{% extends "horizon/common/_modal_form.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% load url from future %}
|
||||||
|
|
||||||
|
{% block form_id %}add_external_segment_param_form{% endblock %}
|
||||||
|
{% block form_action %}{% url 'horizon:project:network_policy:add_external_segment_param' %}{% endblock %}
|
||||||
|
|
||||||
|
{% block modal-header %}{% trans "Add External Segment Parameter" %}{% endblock %}
|
||||||
|
|
||||||
|
{% block modal-body %}
|
||||||
|
<div class="left">
|
||||||
|
<fieldset>
|
||||||
|
{% include "horizon/common/_form_fields.html" %}
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<h3>{% trans "Description:" %}</h3>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block modal-footer %}
|
||||||
|
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create" %}" />
|
||||||
|
<a href="{% url 'horizon:project:network_policy:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a>
|
||||||
|
{% endblock %}
|
||||||
@@ -24,6 +24,9 @@ urlpatterns = patterns('',
|
|||||||
url(r'^addservicepolicy$',
|
url(r'^addservicepolicy$',
|
||||||
views.CreateServicePolicyView.as_view(),
|
views.CreateServicePolicyView.as_view(),
|
||||||
name='create_servicepolicy'),
|
name='create_servicepolicy'),
|
||||||
|
url(r'^addexternalsegmentparam$',
|
||||||
|
views.AddExternalSegmentParamView.as_view(),
|
||||||
|
name='add_external_segment_param'),
|
||||||
url(r'^addnetworkserviceparam$',
|
url(r'^addnetworkserviceparam$',
|
||||||
views.AddNetworkServiceParamView.as_view(),
|
views.AddNetworkServiceParamView.as_view(),
|
||||||
name='add_network_service_param'),
|
name='add_network_service_param'),
|
||||||
|
|||||||
@@ -172,6 +172,14 @@ class CreateServicePolicyView(forms.ModalFormView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class AddExternalSegmentParamView(forms.ModalFormView):
|
||||||
|
form_class = np_forms.CreateExternalSegmentParamForm
|
||||||
|
template_name = "project/network_policy/create_external_segment_param.html"
|
||||||
|
|
||||||
|
def get_object_id(self, params):
|
||||||
|
return params.name
|
||||||
|
|
||||||
|
|
||||||
class AddNetworkServiceParamView(forms.ModalFormView):
|
class AddNetworkServiceParamView(forms.ModalFormView):
|
||||||
form_class = np_forms.CreateNetworkServiceParamForm
|
form_class = np_forms.CreateNetworkServiceParamForm
|
||||||
template_name = "project/network_policy/create_network_service_param.html"
|
template_name = "project/network_policy/create_network_service_param.html"
|
||||||
|
|||||||
Reference in New Issue
Block a user