Fixing policy classifier creation failure with http, https, ftp, smtp & dns
Change-Id: I43ee0a01edfeb519e7c3750a18ade2bf324281f9 Closes-Bug:1479446
This commit is contained in:
parent
2aaacff27d
commit
d93078787d
|
@ -194,3 +194,19 @@ def update_sc_instance_attributes(request, scinstance):
|
||||||
atag = "<a href='%s'>%s</a>" % (u, sc.name)
|
atag = "<a href='%s'>%s</a>" % (u, sc.name)
|
||||||
setattr(scinstance, 'servicechain_spec', mark_safe(atag))
|
setattr(scinstance, 'servicechain_spec', mark_safe(atag))
|
||||||
return scinstance
|
return scinstance
|
||||||
|
|
||||||
|
|
||||||
|
def update_classifier_attributes(classifiers):
|
||||||
|
port_protocol_map = {'21': 'ftp', '25': 'smtp', '53': 'dns',
|
||||||
|
'80': 'http', '443': 'https'}
|
||||||
|
if type(classifiers) == list:
|
||||||
|
for classifier in classifiers:
|
||||||
|
classifier.set_id_as_name_if_empty()
|
||||||
|
if classifier.protocol in ['tcp', 'udp'] and classifier.port_range \
|
||||||
|
in port_protocol_map:
|
||||||
|
classifier.protocol = port_protocol_map[classifier.port_range]
|
||||||
|
else:
|
||||||
|
if classifiers.protocol in ['tcp', 'udp'] and classifiers.port_range \
|
||||||
|
in port_protocol_map:
|
||||||
|
classifiers.protocol = port_protocol_map[classifiers.port_range]
|
||||||
|
return classifiers
|
||||||
|
|
|
@ -22,6 +22,7 @@ from horizon import forms
|
||||||
from horizon import messages
|
from horizon import messages
|
||||||
|
|
||||||
from gbpui import client
|
from gbpui import client
|
||||||
|
from gbpui import column_filters as gfilters
|
||||||
|
|
||||||
PROTOCOLS = [('tcp', _('TCP')),
|
PROTOCOLS = [('tcp', _('TCP')),
|
||||||
('udp', _('UDP')),
|
('udp', _('UDP')),
|
||||||
|
@ -41,6 +42,12 @@ POLICY_ACTION_TYPES = [('allow', _('ALLOW')),
|
||||||
('copy', _('COPY')),
|
('copy', _('COPY')),
|
||||||
('log', _('LOG')),
|
('log', _('LOG')),
|
||||||
('qos', _('QoS'))]
|
('qos', _('QoS'))]
|
||||||
|
PROTOCOL_MAP = {'http': 'tcp',
|
||||||
|
'https': 'tcp',
|
||||||
|
'smtp': 'tcp',
|
||||||
|
'ftp': 'tcp',
|
||||||
|
'dns': 'udp'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class BaseUpdateForm(forms.SelfHandlingForm):
|
class BaseUpdateForm(forms.SelfHandlingForm):
|
||||||
|
@ -216,6 +223,8 @@ class AddPolicyClassifierForm(forms.SelfHandlingForm):
|
||||||
def handle(self, request, context):
|
def handle(self, request, context):
|
||||||
url = reverse('horizon:project:application_policy:index')
|
url = reverse('horizon:project:application_policy:index')
|
||||||
try:
|
try:
|
||||||
|
if context.get('protocol') in PROTOCOL_MAP:
|
||||||
|
context['protocol'] = PROTOCOL_MAP[context['protocol']]
|
||||||
if not context.get('port_range'):
|
if not context.get('port_range'):
|
||||||
context['port_range'] = None
|
context['port_range'] = None
|
||||||
if context.get('name'):
|
if context.get('name'):
|
||||||
|
@ -246,6 +255,7 @@ class UpdatePolicyClassifierForm(BaseUpdateForm):
|
||||||
policyclassifier_id = self.initial['policyclassifier_id']
|
policyclassifier_id = self.initial['policyclassifier_id']
|
||||||
classifier = client.policyclassifier_get(
|
classifier = client.policyclassifier_get(
|
||||||
request, policyclassifier_id)
|
request, policyclassifier_id)
|
||||||
|
classifier = gfilters.update_classifier_attributes(classifier)
|
||||||
for item in ['name', 'description',
|
for item in ['name', 'description',
|
||||||
'protocol', 'port_range', 'direction', 'shared']:
|
'protocol', 'port_range', 'direction', 'shared']:
|
||||||
self.fields[item].initial = getattr(classifier, item)
|
self.fields[item].initial = getattr(classifier, item)
|
||||||
|
@ -257,7 +267,9 @@ class UpdatePolicyClassifierForm(BaseUpdateForm):
|
||||||
url = reverse('horizon:project:application_policy:index')
|
url = reverse('horizon:project:application_policy:index')
|
||||||
try:
|
try:
|
||||||
policyclassifier_id = self.initial['policyclassifier_id']
|
policyclassifier_id = self.initial['policyclassifier_id']
|
||||||
if not context.get('port_range'):
|
if context.get('protocol') in PROTOCOL_MAP:
|
||||||
|
context['protocol'] = PROTOCOL_MAP[context['protocol']]
|
||||||
|
if 'port_range' in context and context['port_range'] == '':
|
||||||
context['port_range'] = None
|
context['port_range'] = None
|
||||||
if context.get('name'):
|
if context.get('name'):
|
||||||
context['name'] = html.escape(context['name'])
|
context['name'] = html.escape(context['name'])
|
||||||
|
|
|
@ -59,10 +59,8 @@ class PolicyClassifiersTab(tabs.TableTab):
|
||||||
classifiers = []
|
classifiers = []
|
||||||
exceptions.handle(self.tab_group.request,
|
exceptions.handle(self.tab_group.request,
|
||||||
_('Unable to retrieve classifier list.'))
|
_('Unable to retrieve classifier list.'))
|
||||||
|
else:
|
||||||
for classifier in classifiers:
|
classifiers = gfilters.update_classifier_attributes(classifiers)
|
||||||
classifier.set_id_as_name_if_empty()
|
|
||||||
|
|
||||||
return classifiers
|
return classifiers
|
||||||
|
|
||||||
|
|
||||||
|
@ -223,6 +221,8 @@ class PolicyClassifierDetailsTab(tabs.Tab):
|
||||||
pcid = self.tab_group.kwargs['policyclassifier_id']
|
pcid = self.tab_group.kwargs['policyclassifier_id']
|
||||||
try:
|
try:
|
||||||
policyclassifier = client.policyclassifier_get(request, pcid)
|
policyclassifier = client.policyclassifier_get(request, pcid)
|
||||||
|
policyclassifier = gfilters.update_classifier_attributes(
|
||||||
|
policyclassifier)
|
||||||
except Exception:
|
except Exception:
|
||||||
exceptions.handle(request,
|
exceptions.handle(request,
|
||||||
_('Unable to retrieve policy_rule_set details.'),
|
_('Unable to retrieve policy_rule_set details.'),
|
||||||
|
|
|
@ -23,3 +23,8 @@
|
||||||
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Policy Classifier" %}" />
|
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Policy Classifier" %}" />
|
||||||
<a href="{% url "horizon:project:application_policy:index" %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
|
<a href="{% url "horizon:project:application_policy:index" %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block modal-js %}
|
||||||
|
<script src='/static/dashboard/js/horizon.protocolmap.js' type="text/javascript"></script>
|
||||||
|
{% endblock %}
|
||||||
|
|
|
@ -23,3 +23,7 @@
|
||||||
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Update Policy Classifier" %}" />
|
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Update Policy Classifier" %}" />
|
||||||
<a href="{% url "horizon:project:application_policy:index" %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
|
<a href="{% url "horizon:project:application_policy:index" %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block modal-js %}
|
||||||
|
<script src='/static/dashboard/js/horizon.protocolmap.js' type="text/javascript"></script>
|
||||||
|
{% endblock %}
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
$(function(){
|
||||||
|
protocol_port_map = {'HTTP':80,'HTTPS':443,'SMTP':25,'DNS':53,'FTP':21 };
|
||||||
|
$('#id_protocol').on('change',function(){
|
||||||
|
if(protocol_port_map[$('#id_protocol>option:selected').text()] != undefined){
|
||||||
|
port = protocol_port_map[$('#id_protocol>option:selected').text()]
|
||||||
|
$('#id_port_range').val(port).attr('readonly', true)
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$('#id_port_range').val('').attr('readonly', false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue