Browse Source

fixed bug when there are no firewall

Roberto Berto 5 years ago
parent
commit
b849a490c6

+ 2 - 2
vycenter/config/views.py

@@ -121,8 +121,8 @@ def instance_remove(request, hostname):
     
     hostname_default = vyos.get_hostname_prefered(request)
 
-    if hostname_default != hostname:
-        instance.delete()
+    #if hostname_default != hostname:
+    instance.delete()
 
     return redirect('config:instances')
 

+ 45 - 0
vycenter/firewall/templates/firewall/create.html

@@ -0,0 +1,45 @@
+{% extends "base.html" %}
+
+{% block header_title %}Firewall Dashboard{% endblock %}
+{% block section_title %}Firewall Dashboard{% endblock %}
+
+{% block debug %}
+{{ firewall_all }}
+{% endblock %}
+
+{% block content %}
+
+<h2>Create new firewall</h2>
+
+<form action="{% url 'firewall:firewall-create' %}" method="post">
+    {% csrf_token %}
+    
+    <p>
+        <label for="alias">name</label><br>
+        <input type="text" name="name" id="name" value="{{ name }}" size="30">
+    </p>
+
+    <p>
+        <label for="alias">description</label><br>
+        <input type="text" name="description" id="description" value="{{ description }}" size="60">
+    </p>    
+    
+    <p>
+        <label for="hostname">default action</label><br>
+        <input type="radio" name="action" id="action" value="accept"> accept
+        <input type="radio" name="action" id="action" value="drop"> drop
+        <input type="radio" name="action" id="action" value="reject"> reject        
+    </p>
+
+    
+    
+    <input type="submit" value="Add Firewall">
+    </form>
+
+    
+
+
+{% endblock %}
+
+
+

+ 2 - 0
vycenter/firewall/urls.py

@@ -8,8 +8,10 @@ app_name = 'firewall'
 urlpatterns = [
     path('', views.index, name='firewall-list'),
     path('show/<str:firewall_name>', views.show, name='show'),
+    path('firewall-create', views.create, name='firewall-create'),
     path('addrule/<str:firewall_name>', views.addrule, name='addrule'),
     path('editrule/<str:firewall_name>/<str:firewall_rulenumber>', views.editrule, name='editrule'),
+    
 
 ]
 

+ 23 - 4
vycenter/firewall/views.py

@@ -14,13 +14,29 @@ def index(request):
     hostname_default = vyos.get_hostname_prefered(request)
 
     firewall_all = vyos.get_firewall_all(hostname_default)
+    if firewall_all == False:
+        return redirect('firewall:firewall-create')
+
     for xitem in firewall_all['name']:
         if 'default-action' in firewall_all['name'][xitem]:
             firewall_all['name'][xitem]['default_action'] = firewall_all['name'][xitem]['default-action']
             del firewall_all['name'][xitem]['default-action']
 
+    template = loader.get_template('firewall/list.html')
+    context = { 
+        #'interfaces': interfaces,
+        'instances': all_instances,
+        'hostname_default': hostname_default,
+        'firewall_all':  firewall_all
+    }   
+    return HttpResponse(template.render(context, request))
 
 
+def create(request):
+    #interfaces = vyos.get_interfaces()
+    all_instances = vyos.instance_getall()
+    hostname_default = vyos.get_hostname_prefered(request)
+
     if 'name' in request.POST:
         cmd = {"op": "set", "path": ["firewall", "name", request.POST['name']]}
         result1 = vyos.set_config(hostname_default, cmd)
@@ -37,19 +53,16 @@ def index(request):
             print(result3)
 
         return redirect('firewall:firewall-list')
-        
 
-    template = loader.get_template('firewall/list.html')
+    template = loader.get_template('firewall/create.html')
     context = { 
         #'interfaces': interfaces,
         'instances': all_instances,
         'hostname_default': hostname_default,
-        'firewall_all':  firewall_all
     }   
     return HttpResponse(template.render(context, request))
 
 
-
 def show(request, firewall_name):
     #interfaces = vyos.get_interfaces()
     all_instances = vyos.instance_getall()
@@ -81,22 +94,28 @@ def addrule(request, firewall_name):
         cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", request.POST['rulenumber'], "action", request.POST['action']]}
         result1 = vyos.set_config(hostname_default, cmd)
         print(result1)
+        changed = True
 
     if 'protocol' in request.POST:
         cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", request.POST['rulenumber'], "protocol", request.POST['protocol']]}
         result2 = vyos.set_config(hostname_default, cmd)
         print(result2)
+        changed = True
 
     if 'destinationport' in request.POST:
         cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", request.POST['rulenumber'], "destination", "port", request.POST['destinationport']]}
         result3 = vyos.set_config(hostname_default, cmd)
         print(result3)
+        changed = True
 
     if 'sourceport' in request.POST:
         cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", request.POST['rulenumber'], "source", "port", request.POST['sourceport']]}
         result3 = vyos.set_config(hostname_default, cmd)
         print(result3)        
+        changed = True
 
+    if changed == True:
+        return redirect('firewall:firewall-list')
 
 
     template = loader.get_template('firewall/show.html')

+ 20 - 0
vycenter/interface/templates/interface/show.html

@@ -25,6 +25,26 @@
     <p>Invalid interface.</p>
 {% endif %}
 
+
+
+<form action="{% url 'interface:interface-firewall interface_type interface_name' %}" method="post">
+    {% csrf_token %}
+    
+    <p>
+        <label for="alias">inbound</label><br>
+        
+    </p>
+
+    <p>
+        <label for="alias">outbound/label><br>
+        
+    </p>    
+    
+    <input type="submit" value="Set Firewall">
+    </form>
+
+
+
 {% endblock %}
 
 

+ 2 - 0
vycenter/interface/urls.py

@@ -7,4 +7,6 @@ app_name = 'interface'
 urlpatterns = [
     path('', views.index, name='interface-list'),
     path('interface-show/<slug:interface_type>/<slug:interface_name>', views.interfaceshow, name='interface-show'),
+    path('interface-firewall/<slug:interface_type>/<slug:interface_name>', views.interfacefirewall, name='interface-firewall'),
+
 ]

+ 21 - 0
vycenter/interface/views.py

@@ -33,7 +33,28 @@ def interfaceshow(request, interface_type, interface_name):
     context = { 
         'interface': interface,
         'instances': all_instances,
+        'interface_type' : interface_type,
+        'interface_name' : interface_name,
         'hostname_default': hostname_default,
     }   
     return HttpResponse(template.render(context, request))
 
+
+def interfacefirewall(request, interface_type, interface_name):
+    all_instances = vyos.instance_getall()
+
+    hostname_default = vyos.get_hostname_prefered(request)
+    
+    interface = vyos.get_interface(interface_type, interface_name, hostname=hostname_default)
+    
+    template = loader.get_template('interface/show.html')
+    context = { 
+        'interface': interface,
+        'instances': all_instances,
+        'hostname_default': hostname_default,
+        'interface_type' : interface_type,
+        'interface_name' : interface_name,        
+    }   
+    return HttpResponse(template.render(context, request))
+
+

+ 52 - 37
vycenter/vyos.py

@@ -41,6 +41,44 @@ def get_key(hostname):
     instance = Instance.objects.get(hostname=hostname)
     return instance.key
 
+def api_get(type, hostname, cmd):
+    if type == "retrieve":
+        url = get_url_retrieve(hostname)
+    elif type == "manage":
+        url = get_url_manage(hostname)
+    elif type == "configure":
+        url = get_url_configure(hostname)
+    else:
+        return False
+
+    print(json.dumps(cmd))
+    post = {'key': get_key(hostname), 'data': json.dumps(cmd)}
+    print(post)   
+
+    try:
+        resp = requests.post(get_url_retrieve(hostname), verify=False, data=post, timeout=5)
+    except requests.exceptions.ConnectionError:
+        return False
+
+    print(resp.status_code)
+    pprint.pprint(resp)
+
+    pprint.pprint(resp.json())
+
+    if resp.status_code != 200:
+        # This means something went wrong.
+        #raise ApiError('POST /tasks/ {}'.format(resp.status_code))
+        return False
+    #for todo_item in resp.json():
+        #print('{} {}'.format(todo_item['id'], todo_item['summary']))
+
+    result1 = resp.json()
+    print(result1['data'])
+    #result2 = json.loads(result1['data'])
+    pprint.pprint(result1)
+
+    return result1['data']
+
 def get_hostname_prefered(request):
     hostname = None
 
@@ -58,11 +96,6 @@ def get_hostname_prefered(request):
 
     return hostname 
     
-def instance_getall():
-    instances = Instance.objects.all()
-    return instances
-
-
 def conntry(hostname): 
     cmd = {"op": "showConfig", "path": ["interfaces"]}
 
@@ -91,6 +124,20 @@ def conntry(hostname):
 
 
 
+def instance_getall():
+    instances = Instance.objects.all()
+    return instances
+
+
+
+def get_firewall_all(hostname):
+    cmd = {"op": "showConfig", "path": ["firewall"]}
+    firewall_list = api_get("retrieve", hostname, cmd)
+    return firewall_list
+
+
+
+
 def getall(hostname="179.127.12.142"):
     #cmd = {"op": "save", "file": "/config/config.boot"}
     cmd = {"op": "showConfig", "path": ["interfaces", "dummy"]}
@@ -187,38 +234,6 @@ def get_interface(interface_type, interface_name, hostname):
 
 
 
-def get_firewall_all(hostname):
-    cmd = {"op": "showConfig", "path": ["firewall"]}
-
-    print(json.dumps(cmd))
-    post = {'key': get_key(hostname), 'data': json.dumps(cmd)}
-    print(post)
-
-    try:
-        resp = requests.post(get_url_retrieve(hostname), verify=False, data=post, timeout=15)
-    except requests.exceptions.ConnectionError:
-        return False
-
-    print(resp.status_code)
-    pprint.pprint(resp)
-
-    pprint.pprint(resp.json())
-
-
-    if resp.status_code != 200:
-        # This means something went wrong.
-        #raise ApiError('POST /tasks/ {}'.format(resp.status_code))
-        return "erro"
-    #for todo_item in resp.json():
-        #print('{} {}'.format(todo_item['id'], todo_item['summary']))
-
-    result1 = resp.json()
-    print(result1['data'])
-    #result2 = json.loads(result1['data'])
-    pprint.pprint(result1)
-
-    return result1['data']
-
 
 
 def get_firewall(hostname, name):