1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2024-12-25 15:45:23 +00:00

Check usage of filter refs from domains.

This commit is contained in:
catborise 2018-09-21 18:46:33 +03:00
parent 3f1acf09ef
commit 1802ad0413
3 changed files with 49 additions and 8 deletions

View file

@ -65,7 +65,7 @@
<div class="form-group"> <div class="form-group">
<label>{% trans "Filter:" %}</label> <label>{% trans "Filter:" %}</label>
<select id="nwfilter_select" name="nwfilters_select" class="form-control"> <select id="nwfilter_select" name="nwfilters_select" class="form-control">
<option value="None" selected>None</option> <option value="" selected>None</option>
{% for nwf in nwfilters_all %} {% for nwf in nwfilters_all %}
<option value="{{ nwf.name }}">{{ nwf.name }}</option> <option value="{{ nwf.name }}">{{ nwf.name }}</option>
{% endfor %} {% endfor %}

View file

@ -10,7 +10,9 @@ from django.contrib.auth.decorators import login_required
from computes.models import Compute from computes.models import Compute
from vrtManager import util from vrtManager import util
from vrtManager.nwfilters import wvmNWFilters, wvmNWFilter from vrtManager.nwfilters import wvmNWFilters, wvmNWFilter
from vrtManager.instance import wvmInstances, wvmInstance
from libvirt import libvirtError from libvirt import libvirtError
from logs.views import addlogmsg
@login_required @login_required
@ -33,9 +35,6 @@ def nwfilters(request, compute_id):
compute.password, compute.password,
compute.type) compute.type)
for nwf in conn.get_nwfilters():
nwfilters_all.append(conn.get_nwfilter_info(nwf.name()))
if request.method == 'POST': if request.method == 'POST':
if 'create_nwfilter' in request.POST: if 'create_nwfilter' in request.POST:
xml = request.POST.get('nwfilter_xml', '') xml = request.POST.get('nwfilter_xml', '')
@ -56,29 +55,58 @@ def nwfilters(request, compute_id):
raise Exception(error_msg) raise Exception(error_msg)
else: else:
try: try:
msg = _("Creating NWFilter: %s" % name)
conn.create_nwfilter(xml) conn.create_nwfilter(xml)
return HttpResponseRedirect(request.get_full_path()) addlogmsg(request.user.username, compute.hostname, msg)
except libvirtError as lib_err: except libvirtError as lib_err:
error_messages.append(lib_err.message) error_messages.append(lib_err.message)
addlogmsg(request.user.username, compute.hostname, lib_err.message)
if 'del_nwfilter' in request.POST: if 'del_nwfilter' in request.POST:
name = request.POST.get('nwfiltername','') name = request.POST.get('nwfiltername','')
msg = _("Deleting NWFilter: %s" % name)
in_use = False
nwfilter = conn.get_nwfilter(name) nwfilter = conn.get_nwfilter(name)
if nwfilter:
is_conn = wvmInstances(compute.hostname, compute.login, compute.password, compute.type)
instances = is_conn.get_instances()
for inst in instances:
# if in_use: break
i_conn = wvmInstance(compute.hostname, compute.login, compute.password, compute.type, inst)
dom_filterrefs = i_conn.get_filterrefs()
if name in dom_filterrefs:
in_use = True
msg = _("NWFilter is in use by %s. Cannot be deleted." % inst)
error_messages.append(msg)
addlogmsg(request.user.username, compute.hostname, msg)
i_conn.close()
break
is_conn.close()
if nwfilter and not in_use:
nwfilter.undefine() nwfilter.undefine()
return HttpResponseRedirect(request.get_full_path()) addlogmsg(request.user.username, compute.hostname, msg)
if 'cln_nwfilter' in request.POST: if 'cln_nwfilter' in request.POST:
name = request.POST.get('nwfiltername','') name = request.POST.get('nwfiltername','')
cln_name = request.POST.get('cln_name', name + '-clone') cln_name = request.POST.get('cln_name', name + '-clone')
conn.clone_nwfilter(name,cln_name) conn.clone_nwfilter(name,cln_name)
return HttpResponseRedirect(request.get_full_path()) msg = _("Cloning NWFilter %s as %s" % (name, cln_name))
addlogmsg(request.user.username, compute.hostname, msg)
for nwf in conn.get_nwfilters():
nwfilters_all.append(conn.get_nwfilter_info(nwf.name()))
conn.close() conn.close()
except libvirtError as lib_err: except libvirtError as lib_err:
error_messages.append(lib_err) error_messages.append(lib_err)
addlogmsg(request.user.username, compute.hostname, lib_err)
except Exception as err: except Exception as err:
error_messages.append(err) error_messages.append(err)
addlogmsg(request.user.username, compute.hostname, err)
return render(request, 'nwfilters.html', {'error_messages': error_messages, return render(request, 'nwfilters.html', {'error_messages': error_messages,
'nwfilters': nwfilters_all, 'nwfilters': nwfilters_all,

View file

@ -187,6 +187,19 @@ class wvmInstance(wvmConnect):
title = util.get_xml_path(self._XMLDesc(0), "/domain/title") title = util.get_xml_path(self._XMLDesc(0), "/domain/title")
return title if title else '' return title if title else ''
def get_filterrefs(self):
def filterrefs(ctx):
result = []
for net in ctx.xpath('/domain/devices/interface'):
filterref = net.xpath('filterref/@filter')
if filterref:
result.append(filterref[0])
return result
return util.get_xml_path(self._XMLDesc(0), func=filterrefs)
def get_description(self): def get_description(self):
description = util.get_xml_path(self._XMLDesc(0), "/domain/description") description = util.get_xml_path(self._XMLDesc(0), "/domain/description")
return description if description else '' return description if description else ''