mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-10 04:06:47 +00:00
feat(nwfilters): the network filter pages on Bootstrap's cards, tables and dialogs
As the network and interface pages; plan reviewed with Codex. - The list is one table with a search: each filter's chain, priority, number of rules, the filters it references, and how many VMs and filters use it directly; a row's menu clones it (one shared dialog, the copy's name filled in) or deletes it, Delete disabled and saying so while it is in use. Without the VMs (a host that fails to list them) the list is not shown: it would offer to delete filters in use. - New filter is one dialog with the filter as XML in the Ace editor, from a starter filter, with what in, out and priority mean and a link to libvirt's format. - A filter's page: a Filter card (UUID, chain, priority, the VMs that use it directly, linked, and the filters that reference it, linked); its references with their parameters (one to a filter gone from the host marked as missing, not linked), removed per row, added from a select of the filters it can reference; its rules with the action as a badge, the direction as to or from the VM, the priority (500 where none is given), every protocol element with its attributes, a rule of no protocol as any traffic of the chain, and when it does not track connections; Add rule as an XML dialog; the XML, collapsed, saved in place. - The editors size themselves when shown and keep their label for screen readers; tables keep their hidden header text inside them, so a phone does not scroll the page sideways. add_nwf_rule.html goes (the dialog is on the page).
This commit is contained in:
parent
bc2b70544a
commit
0014b5f240
7 changed files with 367 additions and 263 deletions
|
|
@ -34,10 +34,12 @@ def filter_info(nwfilter, tree):
|
|||
|
||||
class wvmNWFilters(wvmConnect):
|
||||
def get_nwfilters_info(self):
|
||||
"""Every filter of the host (filter_info) by name: one listing, one XML
|
||||
read per filter."""
|
||||
"""Every filter of the host (filter_info), with the filters that
|
||||
reference it, by name: one listing, one XML read per filter."""
|
||||
filters = [filter_info(nwfilter, etree.fromstring(nwfilter.XMLDesc(0)))
|
||||
for nwfilter in self.wvm.listAllNWFilters(0)]
|
||||
for nwfilter in filters:
|
||||
nwfilter["referenced_by"] = [other["name"] for other in filters if nwfilter["name"] in other["refs"]]
|
||||
return sorted(filters, key=lambda nwfilter: nwfilter["name"])
|
||||
|
||||
def get_users(self):
|
||||
|
|
@ -101,14 +103,14 @@ class wvmNWFilters(wvmConnect):
|
|||
self.get_nwfilter(name).undefine()
|
||||
|
||||
|
||||
class wvmNWFilter(wvmConnect):
|
||||
class wvmNWFilter(wvmNWFilters):
|
||||
"""A filter of the host. A page reads its XML once (tree); a change is
|
||||
the filter defined again with its UUID, which libvirt does in place, also
|
||||
while a VM uses it, and refuses for XML it cannot parse or apply to the
|
||||
running VMs' interfaces."""
|
||||
|
||||
def __init__(self, host, login, passwd, conn, nwfiltername):
|
||||
wvmConnect.__init__(self, host, login, passwd, conn)
|
||||
wvmNWFilters.__init__(self, host, login, passwd, conn)
|
||||
self.nwfilter = self.get_nwfilter(nwfiltername)
|
||||
|
||||
@cached_property
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue