浏览代码

CRUD zones #111 - crud remove

Roberto Berto 5 年之前
父节点
当前提交
9b292298eb

+ 3 - 0
vycontrol/firewall/templates/firewall/zones.html

@@ -31,11 +31,14 @@
     <tr>
         <th>zone</th>
         <th>description</th>
+        <th>action</th>
+    </tr>
     </tr>    
     {% for zone in allzones %}
         <tr>
         <td><a href="{% url 'firewall:firewall-zones-edit' zone.name %}">{{ zone.name }}</a></td>
         <td>{{ zone.description }}</td>
+        <td><a href="{% url 'firewall:firewall-zones-remove' zone.name %}">remove</a></td>
         </tr>
     {% endfor %}
 

+ 1 - 0
vycontrol/firewall/urls.py

@@ -33,6 +33,7 @@ urlpatterns = [
     path('zones', views.firewall_zones, name='firewall-zones'),
     path('zones/add', views.firewall_zones_add, name='firewall-zones-add'),
     path('zones/edit/<str:zonename>', views.firewall_zones_edit, name='firewall-zones-edit'),
+    path('zones/remove/<str:zonename>', views.firewall_zones_remove, name='firewall-zones-remove'),
 
 
     path('addrule/<str:firewall_name>', views.addrule, name='addrule'),

+ 43 - 0
vycontrol/firewall/views.py

@@ -1944,3 +1944,46 @@ def firewall_zones_edit(request, zonename):
     return HttpResponse(template.render(context, request))
 
 
+
+@is_authenticated
+def firewall_zones_remove(request, zonename):
+    # validation
+    zonename = zonename.strip()
+    
+    msg = vmsg.msg()
+    
+    # basic methods all views should call
+    all_instances       = vyos.instance_getall()
+    hostname_default    = vyos.get_hostname_prefered(request)
+    is_superuser        = perms.get_is_superuser(request.user)
+
+    # local methods to prepare env
+    interfaces              = vyos.get_interfaces(hostname_default)
+    interfaces_all_names    = vyos.get_interfaces_all_names(hostname_default)
+    get_firewall_zone       = vapi.get_firewall_zone(hostname_default, zonename)
+    zoneinfo                = get_firewall_zone.data
+
+    if zoneinfo == None:
+        msg.add_error("Zone not exists")
+    else:
+        v = vapi.delete_firewall_zone(hostname_default, zonename)
+        if v.success:   
+            msg.add_success("Zone {zone} removed".format(zone=zonename))
+        else:
+            msg.add_error("Zone {zone} not removed: {error}".format(zone=zonename, error=v.reason))
+
+    template = loader.get_template('firewall/zones-remove.html')
+    context = { 
+        #'interfaces': interfaces,
+        'instances':                    all_instances,
+        'hostname_default':             hostname_default,
+        'username':                     request.user,
+        'is_superuser':                 is_superuser,
+        'interfaces':                   interfaces,
+        'interfaces_all_names_pretty':  pprint.pformat(interfaces_all_names, indent=4, width=120),
+        'interfaces_all_names':         interfaces_all_names,
+        'msg' :                         msg.get_all(),
+        "zoneinfo":                     zoneinfo,
+        "zonename":                     zonename,
+    }   
+    return HttpResponse(template.render(context, request))

+ 10 - 0
vycontrol/vycontrol_vyos_api.py

@@ -425,6 +425,16 @@ def delete_firewall_zone_interface(hostname, zonename, interface):
     )
     return v   
 
+def delete_firewall_zone(hostname, zonename):
+    v = vapilib.api (
+        hostname=   hostname,
+        api =       "post",
+        op =        "delete",
+        cmd =       ["zone-policy", "zone", zonename],
+        description = "delete_firewall_zone",
+    )
+    return v       
+
 
 def get_firewall_zones(hostname):
     v = vapilib.api (