From e2fcc56ce011cd58272d58a3732626a32452dd28 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 11 Apr 2024 11:06:52 +0200 Subject: [PATCH] Adding Network info and edition --- app.py | 40 +++++-- functions/__pycache__/fbackup.cpython-311.pyc | Bin 4152 -> 0 bytes functions/__pycache__/fdisks.cpython-311.pyc | Bin 6656 -> 0 bytes functions/__pycache__/fedit.cpython-311.pyc | Bin 5598 -> 0 bytes functions/__pycache__/fhost.cpython-311.pyc | Bin 14503 -> 0 bytes functions/__pycache__/fiso.cpython-311.pyc | Bin 4733 -> 0 bytes functions/__pycache__/flxc.cpython-311.pyc | Bin 4629 -> 0 bytes functions/__pycache__/fnet.cpython-311.pyc | Bin 4294 -> 0 bytes functions/__pycache__/fpool.cpython-311.pyc | Bin 4924 -> 0 bytes functions/__pycache__/fscreen.cpython-311.pyc | Bin 1663 -> 0 bytes functions/__pycache__/fvm.cpython-311.pyc | Bin 3910 -> 0 bytes functions/__pycache__/fvnc.cpython-311.pyc | Bin 2037 -> 0 bytes functions/fedit.py | 25 ++++- functions/fedit.py.ori | 99 ------------------ functions/fnet.py | 95 ++++++++++++----- templates/edit.html | 25 +++++ templates/network.html | 28 ++++- templates/network.html.ori | 56 ---------- 18 files changed, 170 insertions(+), 198 deletions(-) delete mode 100644 functions/__pycache__/fbackup.cpython-311.pyc delete mode 100644 functions/__pycache__/fdisks.cpython-311.pyc delete mode 100644 functions/__pycache__/fedit.cpython-311.pyc delete mode 100644 functions/__pycache__/fhost.cpython-311.pyc delete mode 100644 functions/__pycache__/fiso.cpython-311.pyc delete mode 100644 functions/__pycache__/flxc.cpython-311.pyc delete mode 100644 functions/__pycache__/fnet.cpython-311.pyc delete mode 100644 functions/__pycache__/fpool.cpython-311.pyc delete mode 100644 functions/__pycache__/fscreen.cpython-311.pyc delete mode 100644 functions/__pycache__/fvm.cpython-311.pyc delete mode 100644 functions/__pycache__/fvnc.cpython-311.pyc delete mode 100644 functions/fedit.py.ori delete mode 100644 templates/network.html.ori diff --git a/app.py b/app.py index 6365409..3f25e35 100644 --- a/app.py +++ b/app.py @@ -190,8 +190,23 @@ def delvol(): @app.route('/network',methods=['GET']) @login_required def network(): - net_hard_int,net_tree,net_na = list_network_VM() - return render_template('network.html', net_hard_int =net_hard_int, net_tree=net_tree, net_na=net_na) + net_tree,net_na = get_virt_int() + return render_template('network.html', net_hard_int = conn.listInterfaces(), net_tree=net_tree, net_na=net_na) + +@app.route('/delnetvm',methods=['POST']) +@login_required +def delnetvm(): + vm_name = request.form['vm_name'] + net_name = request.form['del_net_vm'] + net_mac = request.form['del_mac_vm'] + net_int = request.form['del_net_int'] + try: + detach_net(vm_name, net_name, net_mac, net_int) + flash(net_name+' detached from '+vm_name, category='success') + except Exception as e: + flash('Error deleting '+net_name+' from '+vm_name+': '+str(e), category='danger') + return redirect(url_for('network')) + @app.route('/createnet',methods=['GET']) @login_required @@ -293,6 +308,7 @@ def detachdisk(): flash('Error Detaching '+disk_name+' on '+vm_name+':'+str(e), category='danger') return redirect(url_for('state')) + ############################ ## VNC ## ############################ @@ -405,7 +421,6 @@ def editlxc(): vcpu, mem, mem_max, swap_max = get_lxc_ressources(lxc_name) return render_template('edit_lxc.html', lxc_name=str(lxc_name), max_Mermory=str(' '.join(mem_max)),max_vCPU=str(' '.join(vcpu)), max_swap=str(' '.join(swap_max)), actual_ram=str(' '.join(mem))) -#TEST @app.route('/editressourceslxc',methods=['POST']) @login_required def editressourceslxc(): @@ -441,8 +456,6 @@ def editressourceslxc(): flash('Error editing CPU for '+lxc_name+': '+str(e), category='danger') return redirect(url_for('state')) -## - @app.route('/editvm',methods=['POST']) @login_required def edit(): @@ -451,10 +464,20 @@ def edit(): try: screen_64=get_screenshot(vm_name).decode('ASCII') except: - #Green screen screen_64="/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAMABAADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDLooor8XP4DCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9k=" - return render_template('edit.html', vm_name=vm_name, max_Mermory=conn.getInfo()[1],max_vCPU= conn.getMaxVcpus(None),actual_vCPU=cpus, actual_ram=int(mem/1024),screen_64=screen_64,actual_autostart=get_autostart(vm_name),disks=get_disks_info(vm_name)) + return render_template('edit.html', vm_name=vm_name, max_Mermory=conn.getInfo()[1],max_vCPU= conn.getMaxVcpus(None),actual_vCPU=cpus, actual_ram=int(mem/1024),screen_64=screen_64,actual_autostart=get_autostart(vm_name),disks=get_disks_info(vm_name),list_net=conn.listNetworks()) +@app.route('/addnetvm',methods=['POST']) +@login_required +def addnetvm(): + vm_name = request.form['vm_name'] + new_net_vm = request.form['new_net_vm'] + try: + attach_net(vm_name,new_net_vm) + flash(new_net_vm+' attached to '+vm_name, category='success') + except Exception as e: + flash('Error adding '+new_net_vm+' to '+vm_name+': '+str(e), category='danger') + return redirect(url_for('state')) @app.route('/editressources',methods=['POST']) @login_required @@ -474,7 +497,6 @@ def editressources(): set_memory(vm_name,int(new_ram*1024)) except Exception as e: flash('Error editing Memory for '+vm_name+': '+str(e), category='danger') -#Autostart if request.form.get('new_autostart')=='auto_check': try: set_autostart(vm_name) @@ -687,10 +709,8 @@ def create_VM(): return redirect(url_for('state')) opt = " --disk path="+virtuo_path+virtuo_file+",device=cdrom" ostype = 'windows' -# creationcmd='--name '+str(nom)+' --ram '+str(ram)+' --disk path='+str(disk_path)+str(nom)+'.qcow2,bus=virtio,format=qcow2 --vcpus '+str(cpu)+' --os-type '+str(ostype)+' --os-variant '+str(ose)+' --network network:bridged --graphics vnc,listen=0.0.0.0 --noautoconsole --console pty,target_type=serial '+opt+' --cdrom '+str(iso)+' --force --debug ' creationcmd='--name '+str(nom)+' --ram '+str(ram)+' --disk path='+str(disk_path)+str(nom)+'.qcow2,bus=virtio,format=qcow2 --vcpus '+str(cpu)+' --os-type '+str(ostype)+' --os-variant '+str(ose)+' --network network:'+str(net)+' --graphics vnc,listen=0.0.0.0 --noautoconsole --console pty,target_type=serial '+opt+' --cdrom '+str(iso)+' --force --debug ' else: -# creationcmd='--name '+str(nom)+' --ram '+str(ram)+' --disk path='+str(disk_path)+str(nom)+'.qcow2,size='+str(disk)+',bus=virtio --vcpus '+str(cpu)+' --os-type '+str(ostype)+' --os-variant '+str(ose)+' --network network:bridged --graphics vnc,listen=0.0.0.0 --noautoconsole --console pty,target_type=serial '+opt+' --cdrom '+str(iso)+' --force --debug ' creationcmd='--name '+str(nom)+' --ram '+str(ram)+' --disk path='+str(disk_path)+str(nom)+'.qcow2,size='+str(disk)+',bus=virtio --vcpus '+str(cpu)+' --os-type '+str(ostype)+' --os-variant '+str(ose)+' --network network:'+str(net)+' --graphics vnc,listen=0.0.0.0 --noautoconsole --console pty,target_type=serial '+opt+' --cdrom '+str(iso)+' --force --debug ' try: os.system('virt-install '+creationcmd+' ') diff --git a/functions/__pycache__/fbackup.cpython-311.pyc b/functions/__pycache__/fbackup.cpython-311.pyc deleted file mode 100644 index 42889b04a8b56bad07e97a9e3b5b0447dc22a65c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4152 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 diff --git a/functions/__pycache__/fedit.cpython-311.pyc b/functions/__pycache__/fedit.cpython-311.pyc deleted file mode 100644 index ab641833da04273454712e144fdb6cdfec9ff635..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5598 zcmeHL|7#n`6`!45NxPCIe@`4Iaa=pHqa?PQkcRYV({t>&4u_q)_{&{P8b#5r62)u<*WV>0uvjp(l!N*=mGp;jzqId-td(RrSKrYd zSLm$v?as{GH}l@S`Mfv!!s)aVC_`s0fxn1^{1q#uLU&$XPs7VoA`_Vlkx6{g5I4iI zC!L|}$|n?(lhdLs-BM#f1{DWdRv9RI{_Q^P8>#*{AykE)7l$j9!2L^4WpFe8jKA5ZXXM zk%M~w+_K>S@g<3BJ$#5dYd;5)AX`%18l&r# z5=)GvdIdP5+srO<&s;N^t6mijTrSSXz{O@6yLukvSFC(lMzwskeZTTSws7A`NSu#Q z*-|;ytNo7E0&~LEs43NR;t23nXkBKH)o2ZzuqkWHo}5xGA9y!3mOcJE+nd|5_l14h zo0qL%!9(BO>R|t!v0j~*$pnDR1bJZ_-$pl7(UZ1uxwp~#w$aGj=qnz(A^4+_h*1}c zMrY^eE-jDy!iphkcjt9Ex)?D8JqUG+7E+WsLkwzzu$>kZ!zL@RXQRtTou=qxzNIlG z995SM7uMM8NXU0bGpv49@#%_3fW02}Mo_dp%=*0%Wzpc}XxOm$LLgDY*}xX=R9*05 z*g=rD$f@=~1Naruj>FtxkBW7h;-L-kP`WoOcICvbM0cKA9-Ll1z0$wdpXlGB*0qz# z4_5lt`VxJ4QG&fHI#b*uDJkWpx+g~-9eLRCxT8P>Tho@^_4s7!gNJ>O`;vWmdwr_$ z;fbU>>Hc#=W71u45Xn{iu24s;(t{hTH&$-0-7FA}Z^=V_c6D|oycSM`Vfanjv_YFv z?__C5jv^$mww4XrlA6iV&K&K`&`zA@$<>o9r`Jv=PVax3&3T+o(*5&)X zZ2)Uk!4a-JgCpbra72DcIMQ(`cFH{yUaDHnV0j-P?K!N^OB43L4d|+5>@68WbFsWd za$Tvv^7+3EcWM)8;&G~N@K6sSX-9Gx$q^(+k#qntoB%M>{<(RL0hNj|!f2bma?Lw@ zb!_m;xOZ@5cm5K?2OVIMYvNA5l?I$a{0VBmB---)yOWYcxF+L{5EHP`q z0x_8z_wZ#GHH2U!5cSxYt1t(FXsbieG^}CY5`;j5MJsANu2hZbBp> zF+t{cNwd5yAC-mb>>AeCDqCjREY+XJEN{t9t<_&Kct?xYly8&&3gz#a(^hN9q?>`E za){l0yR2ZXw!+Uy+@`mdzrSbNEM{BZM+m9bIWEFs7q03tI1+JmlQRH|i*$*2GGP_c-UY=YRqS&sq|i8+6b$?BD3frIHH1Jgq!coBx%lW} z)^RxJIGpIoyBeQF9!1jA>w{TWPtMho@Z_Zf>E_SdK5P55{aJff>V~s%LrZEheJN2v^7UtGqg2N#Rq+>eJcZN1Brnxn8A%jANg$L)6r+6S%*94a3_WfJajW2M*fc6|3Ff1+w1Mk zn>Twke@%r4o>fnBxHu6w|0hmqm~Z^?T<>r%|5dLre9HD!KL^xbiI|893^8xQ%YQTG zOb~SdhNy}yl5bv*LNrnJ7qskn8YY;f*x^L4G1=4!==un5tsBVR(E|=qM;{%1cT#BC|f@tsaAIe*lr;!t~8s!rw-2Q(MTY8M;*d8mNH|y z#Qq^;M{t&!vh0E(3-c5e4X2{G7ezS?iM|nk5su39A?2d_8|cE_pnVAhHYCU8NlT{m z%M)jUU3ub2uq#jO33e3(fjb6=^b&C$gqXHftaL+a)%1U SBqHSwV0DM=s+t|lF8=~glop@> diff --git a/functions/__pycache__/fhost.cpython-311.pyc b/functions/__pycache__/fhost.cpython-311.pyc deleted file mode 100644 index 4267b91ffa55ff2886992e0a3db855849c5c2a72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14503 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 diff --git a/functions/__pycache__/fiso.cpython-311.pyc b/functions/__pycache__/fiso.cpython-311.pyc deleted file mode 100644 index caaf6608f3bad0bde193a922b230ec8efc4a9e1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4733 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 U&xMxgi#ibG(HnH^Ah50e3oYq_ zASr)=!VyLRyJ#MqG==1M%IozYD3@La(&G$5|G|w`aWt8Cp8#`!IK&ZI^bpsMEb*9tn#?-Z z$j2msIO-4RF~vE7Iyo0m7e@o7IR+@hxq-Sl#{(4g{D_T434{0`4wPQYH=^=pgG2ARo8QK!LxmkDkqRRAuzX>nwxaK!*J zYdCXH6PbdDXBEQb=kqZxDJ5e!7azp#{O2kDj(4i-&dB!S?>WONesB-IAoAvLLf4uYj&R@jx)fbzuHdS`4a$aR8l-qh& zw{rI#SV1X!RiS}*!rYCgz`$+*ZI#MVxmG7SwljoGRF3YiE%_R_w|1-KkTF7tI4mfY z%I9)M5FFgd3(xN6^UsQfn_KbZ8gF=>3K?#h$2oFWANQ}OMd{JJ>3E~cbx2w*k+R0utM zLl{nRh0kWA4#OiBpB99C3d4;`C2^lH08=o?)EXyZdo8B}DS=N)d}3YP$VjOb)Bg~R zW6+2ffG9|J4VI@=*Lh{)(82D;c4GSz<%dd4b&P9{@oMX_oVTY6nzr-52N0OfTSvoj z2In0oIWJ+0%~HWzcdQ%(7AcdJBUllx%vzIjv)U24AR?eBoS8 zJG5!Xc?LVq6YXF?Fl~U~_^b&CVHn)l9(b0?W<%i%siYK&3B_EDTiGh`sX}7gIaA1R z(e0qH7Mf0Xj8W#8OBewY!YC#|OnQMBG{=jQkcSXc%yE1=ljEZ1 zXT~cZsmupo1DRE>wJcvNOW1N)Bg0iPtTQ9!WtE9k(kgT5G$D|K=Q!jsgv?0T0H!@J z$sJh+&N4)Uzd@#y383UZoRFW69G{cpq1=&i2-K$Ye>xN#)t>j7amg9q9`TraJlEXT z1*;hf&EWvNusuH)Ga0)(ofkHe0vB4#bNu|26}P8i@71iH5LTL>+Fm?5w4M>9VlrFE z3sOh|NY78@3w*8_$816Ppp_vkn-2l1A=n!e&PI20Y{^9NqkDHPfV-@iXs{wLEf%G` zC?y3cO1;OpL2j;Ptt?U$c@YPgBgk$>)E2U*VHBSU@lQY?n^1lG8!9!XQDaqVtl^-$ znD71l4JXtMgb9NN#u{$BiTjjW|LsOjcbyunQG?|Pl^WHk(JD21=nK?+lQrLDWmENC z)_j+hPj#wmH@*{Bsa}ohtx~i7(@SWdc(R1=O(%!;c8z^PaKhZ2vh(Ed4pz<(&O1@uHgDGvCv5hY z*e$taSB17s9AVmhD$(E(BhyRh$+MDMc30rGeY|w&cqAN{n`PC!spE$1Y4@$vC3mgj zJB?XNtjt!}R_kcZbwnx7fiFW=DS2h)l-2gGdRtPfz82R$0|GtIp1NC1r>u-l`I56! za-VoU0=LH#ll(8)Edp@({1e$BBbi8(kX*^QLE-o#;NTqfTam+;&4|)xIf)n2Nw{Sh ze%xNnX5&_{5e+6IF2ap`oi|*`0>mXwh=IBlU)ZMbeF$BmK||bG;>DDJT`;-|NkQZv zNJ1vJZ1}l+s<_7Iq}y2@S4J;fQJcJYbL(MpIganOo^(bKrCTeREN4*o#~|vnZoQJg z!}lQ&!Tr}@alHb;7T@u#aXb$*s#$|@X-r@h;S!#S6Gv9jaAP%#rEq1?LUJQv$3M(; zVG&5@<`m7(eSS~GFfen0O{~Oku2d`SCqBO?d4|~qld!n_T=+_s%oBn3{P3+s4 z+H+m&xvp&J{=T|@qUN7a{SnO{QHpx-oU)|{2O7x9%$j8HnjY*wn0q<*V&T=oUjJcm zNDEF@Hq>BD3&!^P_5M+X;2i= p(?B+1N!+xF$3aXqkWCmj5osWs^m&P~2C~WM05R1-$B8-V{{bhzd_4dF diff --git a/functions/__pycache__/fpool.cpython-311.pyc b/functions/__pycache__/fpool.cpython-311.pyc deleted file mode 100644 index 7096c5e0ddef35459dcb444004f7055d6227ebb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4924 zcmd5=U1%Fu7QUmolCCtCD%+AQTQRX6*^crM+p!&jcUzj&Ep;437dOR8NQBAAKdCIa zBPrliUX)^}cQLHn?Gh!}#4RCl$v$M4!e*Dk_MvZmnGv&S7%(g>`{0+NlD9tf+$(vk z@n2QbLa#<=?*GsE&i&54^Tg$HA_$?sei!@3j?n*TVmnwWkr!tmau10}D;NCm9E$egXH1=Vj9FflxCS_vCdT` zjOb&CJvCCp=z7xv%A)n{`57fNB65$RkEcdI99j;D2xeo6NVGwi*YV9{BB3|NXHx0& z@%UIeDNRhp-byCpDcvr`CZ$+v8YW#=iALvW3GJ`#`;H!QB0bS_;rv+7n^)d?{Y=kf zCUG-8lT4&~CTX?PbMq2`noQ6ord|P&L!17VqW^Tke_HYPs{Y;*;`n1sW8Y1`56k0fn4qsc~Oq$DYTh z*0N4<-4o2%?ZIX^3)po(l)4Hchcr(^ZfMivEqXc& zo=(Nnt$Mmk$bvhW$YnNN^+i{>;0kYaDz0AD)teJFo2O`ND%hIx_@U#0wU2}Paf-2QP#{eta4^+)ns-HiI-5ZNHayK-8Aa`T4;rK^ApY)UvZwoWA z)G0w%`85mPKYg!&c<>NA+l1@sQrCYztOZ31%xa z&y7O|^_F&Rw?_!(Nw?mfa9Gbr87E!8GX#uTW%E1v<}pRC*(frPcvz~oRUctCmS5Fu z_#@8dCu?5B@3LJXov6i{M0_|liOE`eN&5`oseRUBD^=)-);q9QYHU|!V|N5NxL6*; zYM&ZBaQJGn92{wEku6F&TeQsftc>Re0gMeEG^9> zrgR>BpiX8|=iwN0JEl9QGqV$kXlmw8OvjXLb*q%jBt&54G67RxD^UZG8bO$-Sn|_s zDgw0V&oDJ0VC=aYS&ZZ&)U%Fk3NICf?t;+0;ZTG#s&FPZtYKFXdkfgR^7g$eA7AA|y zlU?e9mtI#n-IgyMlsa`=IZGGHZ+5iRc}VC4L^P9%i7C1@;pRdEyS+$FkikS4BB`NW z6x-;_UD}Ug8~nwFjzU9+(hyP`LM0?v!{1S{WYfICFWinWEJ;D8_ zbALSdhoR-6m5Jq-^X&y8C<{T&-?TKoH2!~oFhBNi{K5GBtE*QxxYg?${YvZUXZ%0N z-^t&cUpSxlec@7$z5IMa@xQA2UtJnEhRvT-NJu3inS?arEs|h?1oNZDnH?gU&?Mug z@|oT6x1dnUf{Y0_AaXbp9_hS(01NK9ukl%afA%x;B?q5mcHOgf+&wiA-6qE3v2-kq z%T~B;YRrkVTNQshKAWOMYnYf`2W{A0Dhg&O^+VZj;GenxqRO3bI^9KQSHan}KCd|Y zRA*oAb&a@+Bvc@w^=suzQ|>hl+dsVc!Nt3m7BA)4kLf%Tw(BW`{B|}eX5z6|q_a>&9at&@0zQ;*oQAye_EW+Z4nD3Jf>=3U2^qp| d=Yl0<2(O!#8luC)1xm;eAYZcg+(2VT%J&w>y@;sX3&nlW>lYNWF5ramc_X>gmEANG#-sK*%x|Ne{|`{r%X zl!i{E>&Mdd>P<(Axl+uIH|3G%^UvlT`GzasuoI2o)#vInwfb#s!3ieZV8Tu|0@tcz zZzf+&zKpz%IDxo5)eMdAuUF@sP}B`Y?U_dC+JXE+t}Z*FxEqSIfHbym97~b96lvg* z6C6Iq;r$&4$6Oq%<5**K@?hr0Of~C_PP?Pi_SY>R2#j|!S|SjFCur;#jX5anqHrCB zo5)|6rfOwJy6vD@7tPkuYy(M8Zaup7L+WwLPBs1V)200>$3NlvCt3gsiRx@qzRFsv zF1%TOwfu7B^@<};yYjTX)DqaThw;=qj{b+MUhFdO?Ck8a@Sg}jNj^$GU1}H72n^dZ z#wgqJx8lvEd&1j$c-UhiBDFl>9Hg+nmd0)xsU{SQt8UT6RS diff --git a/functions/__pycache__/fvm.cpython-311.pyc b/functions/__pycache__/fvm.cpython-311.pyc deleted file mode 100644 index f9de3bac73e89ec1143708e0797dc53c511be026..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3910 zcmd5<-D?}!6~FVL(MV%`#Ij>MF^=oFj@7Osn!0JACW&InNnBgmTA|&97FFvRWwk4h zyfb6RF;aG743Ui?-m;Lic-c_swqaQarT@UbE$oYB1fC8U0;Lb`lOQi9Pd(>KRy6Ch zsFXtQXwKY^bI(2Z-rxP*qd)q5UIOXYe`Pb@2!#9%3x|oVXI@S~<}s0p%;d;T{IWUb zHY0PZ-$P`G7{A#?&I(i>YqoIqL0{b~w{i0#H$Q78U zIR24T;GXhFDxtzTzS9~*Hev-PNuDu@u*>FW^Qvn5a#`Jo<>%5_Rlgpyy}5k;gN6Ak z_aHB%=jRnwws|!@r-XT1Le-SEpr*32Ev9FU>|$zh&Ss&+$@w`Q{ppAFsy`y9jdbKn zG#R;e>+SftNM=C=?Yyc-GK+I(=kM8VcN7Eqrl=7u2pzGrej9{I_JSR|!GWFNKsh*A z2@aY+wR{2dn&t1Q64rH^iW0jg1s+{mzx3o>S?a4ueWq@?0}nr1`Djyry!4x;kC#7L zF1rUR?tyLkv!sxD<0V)pvyHWd0uD-d7k8$W-7OI3iWV6UfgO6|UOIPz0e~jSX~K|O zG`GavB6k@L@fGGY0X}xy;o2u)y=_5L^o2R)8Ed;?p>PW{KWOPVR)4=1z#g8gURy#% z>w>Zm+kXNA)=+HQ6?=BXo+oF@;y^_lFi%%mj`LW&`{Cru2FKZXWCTc|1}0hFyt$Tow%>x{uE8 zPA{a%F@D6-3zZ?1OdC}_3wI5?s!i=xmxxPR=k7exZ{lN@#5-a>B9%ptJCJR<(161 zs8w@JWEpJd&K4tuZ*o zn~>1@LA!=Ggu6BXVjqo!-A$kq_4gJGIe%Bx22ts|D271TZdm~$$lue>K*@W!SXe1MxW9V8N*LF1 zOOzf->(ZKU!&jnDm4jN^bQF!qAe61v{|hwg0i%gezRf=?wfh%GIg$*#$?EC-h7Biw z0S9^TPL_dLZV{EM-O9jeT!A$?{HmD(+X^}$!u#1Tfq#m8(N%EC9NtQ`q+M~ALGwaU zCdJ+%cN(OD0EVEUD0iKF8l6cRx|A3pI@Iz#coVTuP0L16F1{C6VdT_DjJK;#FNQ* zGL@VePerfB6E|&F77Xe(2d4y1)N5`QvS?bbMMpV9!@mhOx0udp=OCvevh1t+!5+NQPISaS9cX zKHt1|5ZN}!&;&xHgcSC|&7W5@**i4~rhyv9$~0P|p%}f~SQSbi=Vh#F& diff --git a/functions/__pycache__/fvnc.cpython-311.pyc b/functions/__pycache__/fvnc.cpython-311.pyc deleted file mode 100644 index 3932b2c48643bce95cacbeabde5422653d5d2fef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2037 zcma)7TW=dh6yBRJabi0yfuaV`&_uYd^Eo5oH;Z8&N-7` zlgR`J?cd*I+z>hLZ#D^34>ueNs-Vh2R&ty@Tj7TA3L<>=WF6psC zOpEMsg}4?4oX}!`2`vsdsYz>GcH$rAILmwdC4k8#9UIuR*9pd1!HW_6V*^v$i?3o@ zw@ixjDnGmk8{m@uck&kq4>=n!XosVAfs$);k3jzP>G7j@bzIl5?<^?WaY64tJDD{h65kBQe{(=_clTiTTbK{p9pP zalhC-bN|kRJDnRx$@GICx>wxfgcQ^*t}`pU>BU}pv9sJypF3#px4Spo z^jt4J2a3s8Ix8pOo>LhFEzFs3K?6Ax<^soUh4Ogx`4`!Z#grvIL`uxJmTOgAN4XEt z{KYy&IjogX8vqW^sEVrQ zv##pR9UBwlrTl!XStz_y6=o)@Fu|f;ls2i2jmI2$9Vj8M0eDGfx&g^VEge(xCg@V| z(MtdjE-AYArIRYSQn4o$9jQ1})LcpLNxBns-{Gl>Wp%?MaAE?SX8#drp1?O~z&NuT zwrA_s9;vad&{BhXZo!_@^)rl$kZ-*|LVoT#%H?4GsobDMrWJ)?*|Z=-WpringGHoU zs-jmcYJZfKd;zZ45GBs?oetl9*@+FAJMdjO2U zGe52Dt#nq7Qs=u@-PBw!HP^X0WO3>DvYWc)O8K6YcY;2ka`dSRsoVsYFHhxG=mW^& z7+IRYa6p_UzK}jC--_3pcEvK^MJ-t#<{p$b(5PC5p_m%V=sRjov28`IWSH8}atbL^ zlxc|>^iEbB@Hj#tJY0%h@#3)0e|_jEiRs}PA&c{HPxf-qs{o@cvV8n`t2=Ywa^6~X zQ>)He(M=Vd?>F7lrYosENp*tm6Pcazq7a%=wd_s6Gq-?k_=iInqht!ei' + dom.attachDeviceFlags(network_xml, libvirt.VIR_DOMAIN_AFFECT_CONFIG | libvirt.VIR_DOMAIN_AFFECT_LIVE) + +def detach_net(vm_name, net_name, net_mac,net_int): + dom = conn.lookupByName(vm_name) +# network_xml = f'' + network_xml = f'' + print(network_xml) + dom.detachDeviceFlags(network_xml, libvirt.VIR_DOMAIN_AFFECT_CONFIG | libvirt.VIR_DOMAIN_AFFECT_LIVE) + def get_screenshot(vm_name): dom = conn.lookupByName(vm_name) stream = conn.newStream() @@ -83,8 +95,6 @@ def get_screenshot(vm_name): os.remove(file) return data -#Autostart - def get_autostart(vm_name): dom = conn.lookupByName(vm_name) return dom.autostart() @@ -97,3 +107,12 @@ def unset_autostart(vm_name): dom = conn.lookupByName(vm_name) dom.setAutostart(0) +""" +def get_net_vm(vm_name): + netws, nu2 = get_virt_int() + vm_net_list=[] + for net in netws: + if vm_name in net[1][0]: + vm_net_list.append(net[0][0][0]) + return vm_net_list +""" diff --git a/functions/fedit.py.ori b/functions/fedit.py.ori deleted file mode 100644 index cade4bb..0000000 --- a/functions/fedit.py.ori +++ /dev/null @@ -1,99 +0,0 @@ -from config import * -import base64 -import time -import lxc - -def get_version(): - vlxc = lxc.version - vlibvirt = str(libvirt.getVersion()/1000000) #1000000 * major + 1000 * minor + release - vhype = hype_version - return vlxc, vlibvirt, vhype - - -def set_memory(vm_name,memory_new): - dom = conn.lookupByName(vm_name) - dom.shutdown() - time.sleep(3) - alive=0 - while alive < 5: - if dom.isActive(): - time.sleep(3) - alive+=1 - else: - alive=6 - if dom.isActive(): - dom.destroy() - dom.setMaxMemory(memory_new) - dom.setMemoryFlags(memory_new) - dom.create() - time.sleep(3) - alive=0 - while alive < 3: - if dom.isActive(): - alive=4 - else: - time.sleep(3) - alive+=1 - -def set_vcpu(vm_name,vcpu_new): - dom = conn.lookupByName(vm_name) - dom.shutdown() - time.sleep(3) - alive=0 - while alive < 5: - if dom.isActive(): - time.sleep(3) - alive+=1 - else: - alive=6 - if dom.isActive(): - dom.destroy() - dom.setVcpusFlags(vcpu_new,libvirt.VIR_DOMAIN_AFFECT_CONFIG | libvirt.VIR_DOMAIN_VCPU_MAXIMUM) - dom.setVcpusFlags(vcpu_new,libvirt.VIR_DOMAIN_AFFECT_CONFIG | libvirt.VIR_DOMAIN_VCPU_CURRENT) - dom.create() - time.sleep(3) - alive=0 - while alive < 3: - if dom.isActive(): - alive=4 - else: - time.sleep(3) - alive+=1 - -def get_info_vm(vm_name): - dom = conn.lookupByName(vm_name) - state, maxmem, mem, cpus, cput = dom.info() - return state, maxmem, mem, cpus, cput - -#Screenshot -def get_screenshot(vm_name): - dom = conn.lookupByName(vm_name) - stream = conn.newStream() - imageType = dom.screenshot(stream,0) - file = "tmp_screen_" + dom.name() - fileHandler = open(file, 'wb') - streamBytes = stream.recv(262120) - while streamBytes != b'': - fileHandler.write(streamBytes) - streamBytes = stream.recv(262120) - fileHandler.close() - stream.finish() - with open(file, "rb") as f: - data = base64.b64encode(f.read()) - os.remove(file) - return data - -#Autostart - -def get_autostart(vm_name): - dom = conn.lookupByName(vm_name) - return dom.autostart() - -def set_autostart(vm_name): - dom = conn.lookupByName(vm_name) - dom.setAutostart(1) - -def unset_autostart(vm_name): - dom = conn.lookupByName(vm_name) - dom.setAutostart(0) - diff --git a/functions/fnet.py b/functions/fnet.py index a5b5ed0..f6fec25 100644 --- a/functions/fnet.py +++ b/functions/fnet.py @@ -2,6 +2,35 @@ from app import * import ipaddress from xml.dom import minidom + +def ip_fom_mac(vm_name,net_mac): + dom=conn.lookupByName(vm_name) + mac_ip=[] + try: + ifaces = dom.interfaceAddresses(libvirt.VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_AGENT) + except: + ifaces = None + result="---.---.---.---" + + if ifaces is None: + result="---.---.---.---" + else: + for (name, val) in ifaces.items(): + if val['addrs']: + for addr in val['addrs']: + if addr['addr']: + mac_ip.append([val['hwaddr'],addr['addr']]) + break + else: + result = "---.---.---.---" + for int in mac_ip: + if int[0] == net_mac: + result=int[1] + else: + result = "---.---.---.---" + return result + + def diff_net(min_dhcp,max_dhcp): ip1 = ipaddress.IPv4Address(min_dhcp) ip2 = ipaddress.IPv4Address(max_dhcp) @@ -43,28 +72,44 @@ def create_network(net_name,net_int): net_use.create() net_use.setAutostart(True) -def list_network_VM(): - net_tree = [] - net_na = [] -#Host Interfaces - net_hard_int = conn.listInterfaces() -#Virtual Interfaces - net_list = conn.listAllNetworks() - for net_name in net_list: - if net_name.isActive(): - net_sub_tree=[] - net_sub_tree.append(net_name.name()) - net_use = conn.networkLookupByName(net_name.name()) - ports = net_use.listAllPorts() - net_ports = [] - for port in ports: - raw_xml = port.XMLDesc() - net_xml = minidom.parseString(raw_xml) - net_element = net_xml.documentElement - net_VM = net_element.getElementsByTagName("name")[0] - net_ports.append(net_VM.firstChild.data) - net_sub_tree.append(net_ports) - net_tree.append(net_sub_tree) - else: - net_na.append(net_name.name()) - return net_hard_int,net_tree,net_na +def get_mac_net(vm_name,net_name): + dom = conn.lookupByName(vm_name) + raw_xml = dom.XMLDesc() + net_xml = minidom.parseString(raw_xml) + VM_mac = [] + for device in net_xml.getElementsByTagName('devices'): + ifaces = device.getElementsByTagName('interface') + for iface in ifaces: + sources = iface.getElementsByTagName('source') + for source in sources: + if source.getAttribute('network') == net_name: + mac = iface.getElementsByTagName('mac') + target = iface.getElementsByTagName('target') + ip = ip_fom_mac(vm_name,str(mac[0].getAttribute('address'))) + VM_mac.append([target[0].getAttribute('dev'),mac[0].getAttribute('address'),ip]) + return VM_mac + +def get_virt_int(): + net_na = [] + out=[] + for network in conn.listAllNetworks(): + if network.isActive(): + int_name=[] + int_mac = conn.interfaceLookupByName(network.bridgeName()) + int_name.append([network.name(),network.bridgeName(),int_mac.MACString()]) + net_detail = conn.networkLookupByName(network.name()) + net_vms = net_detail.listAllPorts() + vm_name=[] + for vm in net_vms: + net_VM_info = [] + raw_xml = vm.XMLDesc() + net_xml = minidom.parseString(raw_xml) + net_element = net_xml.documentElement + net_VM = net_element.getElementsByTagName("name")[0] + net_VM_info = [net_VM.firstChild.data,get_mac_net(net_VM.firstChild.data,network.name())] + if net_VM_info not in vm_name: + vm_name.append(net_VM_info) + out.append([int_name,vm_name]) + else: + net_na.append(network.name()) + return out, net_na diff --git a/templates/edit.html b/templates/edit.html index e896f2b..b09fa99 100644 --- a/templates/edit.html +++ b/templates/edit.html @@ -109,6 +109,31 @@ +
+
+
+ Networking for {{ vm_name }} +
+
+ Attach new network
+
+
+
+ + +
+ +
+
+
+ +
+
+ {% endblock %} diff --git a/templates/network.html b/templates/network.html index f1de0d4..07fda18 100644 --- a/templates/network.html +++ b/templates/network.html @@ -29,15 +29,33 @@ Virtual Interfaces: {% endfor %} {% for item in net_tree %}
  • - {{ item[0] }} +
    + {{ item[0][0][0] }} - {{ item[0][0][1] }} - {{ item[0][0][2] }} +
    - - -

    + + + +
      {% for sub_item in item[1] %}
    • - {{ sub_item }} +

      {{ sub_item[0] }}

      + {% for pitem in sub_item[1] %} +
      +
      {{ pitem[0] }} - {{ pitem[1] }} - {{ pitem[2] }}
      +
      + + +
      + + + + + +
      +
      + {% endfor %}
    • {% endfor %}
    diff --git a/templates/network.html.ori b/templates/network.html.ori deleted file mode 100644 index 4ba5f5c..0000000 --- a/templates/network.html.ori +++ /dev/null @@ -1,56 +0,0 @@ -{% extends 'layout.html' %} -{% block content %} -{% include 'menu.html' %} - -
    -
    -
    - {% for pint in net_hard_int %} - {{ pint }}
    - {% endfor %} -
    -
    -
    -
    -
    -graph TD -{% for item in net_tree %} -root[Root] --- {{ item[0] }}[{{ item[0] }}] -{% for sub_item in item[1] %} -{{ item[0] }}[{{ item[0] }}] --- {{ sub_item }}[{{ sub_item }}] -{% endfor %} -{% endfor %} -
    -
    -
    -
    - -{% endblock %}