Browse Source

improved firewall and interfaces screens

Roberto Berto 5 years ago
parent
commit
ddbbd0593a

+ 2 - 12
vycenter/config/views.py

@@ -16,18 +16,8 @@ from django.contrib.auth.models import Group
 
 from django.template.defaultfilters import register
 
-@register.filter(name='dict_key')
-def dict_key(d, k):
-    '''Returns the given key from a dictionary.'''
-    return d[k]
-
-@register.filter('get_value_from_dict')
-def get_value_from_dict(dict_data, key):
-    """
-    usage example {{ your_dict|get_value_from_dict:your_key }}
-    """
-    if key:
-        return dict_data.get(key)
+
+
 
 @register.filter
 def get_item(dictionary, key):

+ 2 - 1
vycenter/firewall/views.py

@@ -104,6 +104,7 @@ def addrule(request, firewall_name):
 
     firewall = vyos.get_firewall(hostname_default, firewall_name)
     
+    changed = False
     if 'action' in request.POST:
         cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", request.POST['rulenumber'], "action", request.POST['action']]}
         result1 = vyos.set_config(hostname_default, cmd)
@@ -129,7 +130,7 @@ def addrule(request, firewall_name):
         changed = True
 
     if changed == True:
-        return redirect('firewall:firewall-list')
+        return redirect('firewall:show', firewall_name)
 
 
     template = loader.get_template('firewall/show.html')

+ 30 - 15
vycenter/interface/templates/interface/index.html

@@ -6,6 +6,8 @@
 {% block debug %}
     {{ interfaces }}
     {{ firewall_all }}
+    {{ interface_firewall_in }}
+    {{ interface_firewall_out }}
 {% endblock %}
 
 
@@ -21,27 +23,40 @@
 
         {% for key, value in interfaces.items %}
             <tr>
-                <td>{{ key }}</td>
+                
+                <td>{{ key }} </td>
             {% for ifkey, ifvalue in value.items %}
             <td>{% url 'interface:interface-show' key ifkey as url_interface %}<a href="{{ url_interface }}">{{ ifkey }}</a></td><td>{{ ifvalue.address }}</td>
-            <td><select id="firewall-ipv4-in" name="firewall-ipv4-in.{{ key }}.{{ ifkey }}"><option value="">None</option>
-                {% if firewall_all != False %}
-                    {% for fkey, fvalue in firewall_all.items %}    
-                        {% for fitemkey, fitemvalue in fvalue.items %}
-                        <option value="{{ fitemkey }}">{{ fitemkey }}</option>
+            <td>
+                {% if key == "loopback" %}
+                    -
+                {% else %}
+                    <select id="firewall-ipv4-in" name="firewall-ipv4-in.{{ key }}.{{ ifkey }}"><option value="">None</option>
+                    {% if firewall_all != False %}
+                        {% for fkey, fvalue in firewall_all.items %}    
+                            {% for fitemkey, fitemvalue in fvalue.items %}
+                            <option value="{{ fitemkey }}" {% if interface_firewall_in|get_item:ifkey == fitemkey %}selected="selected"{% endif %} >{{ fitemkey }}</option>
+                            {% endfor %}
                         {% endfor %}
-                    {% endfor %}
+                    {% endif %}
+                    </select>
                 {% endif %}
-            </select></td>
-            <td><select id="firewall-ipv4-out" name="firewall-ipv4-out.{{ key }}.{{ ifkey }}"><option value="">None</option>
-                {% if firewall_all != False %}
-                    {% for fkey, fvalue in firewall_all.items %}    
-                        {% for fitemkey, fitemvalue in fvalue.items %}
-                        <option value="{{ fitemkey }}">{{ fitemkey }}</option>
+            </td>
+            <td>
+                {% if key == "loopback" %}
+                    -
+                {% else %}
+                    <select id="firewall-ipv4-out" name="firewall-ipv4-out.{{ key }}.{{ ifkey }}"><option value="">None</option>
+                    {% if firewall_all != False %}
+                        {% for fkey, fvalue in firewall_all.items %}    
+                            {% for fitemkey, fitemvalue in fvalue.items %}
+                            <option value="{{ fitemkey }}" {% if interface_firewall_out|get_item:ifkey == fitemkey %}selected="selected"{% endif %} >{{ fitemkey }}</option>
+                            {% endfor %}
                         {% endfor %}
-                    {% endfor %}
+                    {% endif %}
+                    </select>
                 {% endif %}
-            </select></td>
+            </td>
 
             {% endfor %}
             </tr>

+ 43 - 5
vycenter/interface/views.py

@@ -4,6 +4,7 @@ from django.template import loader
 from django.conf import settings
 from django.shortcuts import redirect
 from django.urls import reverse
+from django.template.defaultfilters import register
 
 
 import vyos
@@ -12,6 +13,12 @@ from config.models import Instance
 
 import pprint
 
+
+@register.filter
+def get_item(dictionary, key):
+    return dictionary.get(key)
+
+    
 def index(request):
     if not request.user.is_authenticated:
         return redirect('%s?next=%s' % (reverse('registration-login'), request.path))
@@ -21,18 +28,46 @@ def index(request):
     firewall_all = vyos.get_firewall_all(hostname_default)
     interfaces = vyos.get_interfaces(hostname_default)
 
+    interface_firewall_in = {}
+    interface_firewall_out = {}
+
+    for interface_type in interfaces:
+        for interface_name in interfaces[interface_type]:
+            pprint.pprint(interface_name)
+            try:
+                interface_firewall_in[interface_name] = interfaces[interface_type][interface_name]['firewall']['in']['name']
+            except:
+                pass
+            try:
+                interface_firewall_out[interface_name] = interfaces[interface_type][interface_name]['firewall']['out']['name']
+            except:
+                pass
+
+    fw_changed = False
     for el in request.POST:
+        pprint.pprint(request.POST)
+ 
         if el.startswith('firewall-ipv4-in') and request.POST[el]:
             pos = el.split(".")
             
             interface_type = pos[1]
             interface_name = pos[2]
             firewall_name = request.POST[el]
-            pprint.pprint(request.POST)
-
-            result1 = vyos.set_interface_firewall_ipv4(hostname_default, interface_type, interface_name, "in", firewall_name)
-            print(result1)
-
+            result1 = vyos.set_interface_firewall_ipv4(hostname_default, interface_type, interface_name, "in", firewall_name)         
+            pprint.pprint(result1)  
+            fw_changed = True
+        elif el.startswith('firewall-ipv4-out') and request.POST[el]:
+            pos = el.split(".")
+            
+            interface_type = pos[1]
+            interface_name = pos[2]
+            firewall_name = request.POST[el]
+            result1 = vyos.set_interface_firewall_ipv4(hostname_default, interface_type, interface_name, "out", firewall_name)
+            pprint.pprint(result1)              
+            fw_changed = True
+            
+    if fw_changed == True:
+        return redirect('interface:interface-list')
 
     """
    if 'name' in request.POST:
@@ -60,6 +95,8 @@ def index(request):
         'instances': all_instances,
         'hostname_default': hostname_default,
         'firewall_all' : firewall_all,
+        'interface_firewall_in' : interface_firewall_in,
+        'interface_firewall_out' : interface_firewall_out,
     }
     return HttpResponse(template.render(context, request))
 
@@ -80,6 +117,7 @@ def interfaceshow(request, interface_type, interface_name):
         'interface_name' : interface_name,
         'hostname_default': hostname_default,
         'firewall_all' : firewall_all,
+                
     }   
     return HttpResponse(template.render(context, request))
 

+ 1 - 1
vycenter/vyos.py

@@ -133,7 +133,7 @@ def get_firewall_all(hostname):
     return firewall_list
 
 def set_interface_firewall_ipv4(hostname, interface_type, interface_name, direction, firewall_name):
-    cmd = {"op": "set", "path": ["interface", interface_type, interface_name, "firewall", direction, "name", firewall_name]}
+    cmd = {"op": "set", "path": ["interfaces", interface_type, interface_name, "firewall", direction, "name", firewall_name]}
     post = {'key': get_key(hostname), 'data': json.dumps(cmd)}
 
     success = api_set(hostname, cmd)