diff --git a/app.py b/app.py index fe4402b..6365409 100644 --- a/app.py +++ b/app.py @@ -18,6 +18,7 @@ from functions.fbackup import * from functions.fpool import * from functions.fedit import * from functions.fdisks import * +from functions.fnet import * app = Flask(__name__,static_url_path='',static_folder='static',template_folder='templates') @@ -183,6 +184,65 @@ def delvol(): flash('Error on deleting '+volume_name+':'+str(e), category='danger') return redirect(url_for('get_pool')) +############################ +## NETWORK ## +############################ +@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) + +@app.route('/createnet',methods=['GET']) +@login_required +def createnet(): + return render_template('createnet.html') + +@app.route('/delnet',methods=['POST']) +@login_required +def delnet(): + net_name = request.form['net_del'] + net_int = get_int(net_name) + try: + delete_network(net_name,net_int) + flash(net_name+' deleted', category='success') + except Exception as e: + flash('Error on deleting '+net_name+':'+str(e), category='danger') + return redirect(url_for('network')) + +@app.route('/createint',methods=['POST']) +@login_required +def createint(): + net_name = request.form['net_name'] + net_int = request.form['net_int'] + ip_int = request.form['ip_int'] + mask_int = request.form['mask_int'] + min_dhcp = request.form['min_dhcp'] + max_dhcp = request.form['max_dhcp'] + nb_ip = diff_net(min_dhcp,max_dhcp) + try: + create_network(net_name,net_int) + except Exception as e: + flash('Error creating '+net_name+':'+str(e), category='danger') + delete_network(net_name,net_int) + return redirect(url_for('network')) + try: + cmd="ifconfig "+str(net_int)+" "+str(ip_int)+" netmask "+str(mask_int)+" up" + subprocess.call(cmd, shell=True) + except Exception as e: + flash('Error starting '+net_name+':'+str(e), category='danger') + delete_network(net_name,net_int) + return redirect(url_for('network')) + try: + cmd2="dnsmasq --interface="+str(net_int)+" --bind-interfaces --dhcp-range "+str(min_dhcp)+","+str(max_dhcp)+" --dhcp-lease-max="+str(nb_ip)+" --dhcp-authoritative --pid-file=/run/dhypecp_"+net_int+".pid" + subprocess.call(cmd2, shell=True) + except Exception as e: + flash("Error on DHCP for "+net_name,category='danger') + delete_network(net_name,net_int) + return redirect(url_for('network')) + flash(net_name+' had been created', category='success') + return redirect(url_for('network')) + ############################ ## DISKS ## ############################ @@ -196,6 +256,7 @@ def editdisks(): actual_size = request.form['actual_size'] new_size = request.form['new_size'] vm_name = request.form['vm_name'] + is_active(vm_name) try: resize_disk(disk_file,actual_size,new_size,vm_name,disk_id) flash(disk_name+' had been resized to '+str(new_size)+'G', category='success') @@ -210,6 +271,7 @@ def adddisk(): vm_name = request.form['vm_name'] disk_size = request.form['disk_size'] disk_id = request.form['disk_id'] + is_active(vm_name) try: create_attached_disk(vm_name,disk_name,disk_size,disk_id) flash(disk_name+' had been created and attached', category='success') @@ -223,6 +285,7 @@ def detachdisk(): diskfile = request.form['diskfile'] disk_name = os.path.basename(diskfile) vm_name = request.form['vm_name'] + is_active(vm_name) try: detach_disk(vm_name,diskfile) flash(disk_name+' had been dettached', category='success') @@ -291,6 +354,7 @@ def ter_connect(): @login_required def consolevm(): vm_name = request.form['vm_name'] + is_active(vm_name) try: socket_connect(vm_name) return render_template('vnc.html') @@ -334,13 +398,62 @@ def deluser(): ## EDIT ## ############################ +@app.route('/editlxc',methods=['POST']) +@login_required +def editlxc(): + lxc_name = request.form['edit'] + 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(): + lxc_name = str(request.form['lxc_name']) + vcpu, mem, mem_max, swap_max = get_lxc_ressources(lxc_name) + new_max_swap = request.form['new_max_swap'] + new_max_mem = request.form['new_max_mem'] + new_mem = request.form['new_mem'] + new_cpu = request.form['new_cpu'] + if new_max_swap != ' '.join(swap_max): + try: + lxc_item = 'lxc.cgroup2.memory.swap.max' + set_lxc_ressources(lxc_name,lxc_item,new_max_swap) + except Exception as e: + flash('Error editing Swap for '+lxc_name+': '+str(e), category='danger') + if new_max_mem != ' '.join(mem_max): + try: + lxc_item = 'lxc.cgroup2.memory.max' + set_lxc_ressources(lxc_name,lxc_item,new_max_mem) + except Exception as e: + flash('Error editing Max Memory for '+lxc_name+': '+str(e), category='danger') + if new_mem != ' '.join(mem): + try: + lxc_item = 'lxc.cgroup2.memory.high' + set_lxc_ressources(lxc_name,lxc_item,new_mem) + except Exception as e: + flash('Error editing Memory for '+lxc_name+': '+str(e), category='danger') + if new_cpu != ' '.join(vcpu): + try: + lxc_item = 'lxc.cgroup2.cpuset.cpus' + set_lxc_ressources(lxc_name,lxc_item,new_cpu) + except Exception as e: + 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(): vm_name = request.form['edit'] state, maxmem, mem, cpus, cput = get_info_vm(vm_name) -#Memory in MB - 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=get_screenshot(vm_name).decode('ASCII'),actual_autostart=get_autostart(vm_name),disks=get_disks_info(vm_name)) + 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)) @app.route('/editressources',methods=['POST']) @@ -574,9 +687,11 @@ 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: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: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+' ') flash(str(nom)+' created', category='success') diff --git a/functions/__pycache__/fdisks.cpython-311.pyc b/functions/__pycache__/fdisks.cpython-311.pyc index d6511f0..d418a19 100644 Binary files a/functions/__pycache__/fdisks.cpython-311.pyc and b/functions/__pycache__/fdisks.cpython-311.pyc differ diff --git a/functions/__pycache__/fedit.cpython-311.pyc b/functions/__pycache__/fedit.cpython-311.pyc index 5067193..ab64183 100644 Binary files a/functions/__pycache__/fedit.cpython-311.pyc and b/functions/__pycache__/fedit.cpython-311.pyc differ diff --git a/functions/__pycache__/flxc.cpython-311.pyc b/functions/__pycache__/flxc.cpython-311.pyc index f4952af..95e5506 100644 Binary files a/functions/__pycache__/flxc.cpython-311.pyc and b/functions/__pycache__/flxc.cpython-311.pyc differ diff --git a/functions/__pycache__/fnet.cpython-311.pyc b/functions/__pycache__/fnet.cpython-311.pyc new file mode 100644 index 0000000..5193f19 Binary files /dev/null and b/functions/__pycache__/fnet.cpython-311.pyc differ diff --git a/functions/__pycache__/fvm.cpython-311.pyc b/functions/__pycache__/fvm.cpython-311.pyc index 961b471..f9de3ba 100644 Binary files a/functions/__pycache__/fvm.cpython-311.pyc and b/functions/__pycache__/fvm.cpython-311.pyc differ diff --git a/functions/fdisks.py b/functions/fdisks.py index 95e32f3..eae05f0 100644 --- a/functions/fdisks.py +++ b/functions/fdisks.py @@ -67,8 +67,10 @@ def create_attached_disk(vm_name,disk_name,disk_size,disk_id): pool.createXML(xml_desc, 0) dom = conn.lookupByName(vm_name) - if not dom.isActive(): - dom.create() + try: + dom.resume + except: + pass disk_full = disk_path+disk_name+".qcow2" flags = (libvirt.VIR_DOMAIN_AFFECT_CONFIG | libvirt.VIR_DOMAIN_AFFECT_LIVE | diff --git a/functions/fedit.py.ori b/functions/fedit.py.ori new file mode 100644 index 0000000..cade4bb --- /dev/null +++ b/functions/fedit.py.ori @@ -0,0 +1,99 @@ +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/flxc.py b/functions/flxc.py index 121d2f8..60001df 100644 --- a/functions/flxc.py +++ b/functions/flxc.py @@ -61,3 +61,21 @@ def destroy_lxc(lxc_name): container=lxc.Container(lxc_name) container.destroy() +## RESSOURCES + +def get_lxc_ressources(lxc_name): + container=lxc.Container(lxc_name) + mem_max = container.get_config_item('lxc.cgroup2.memory.max') + mem = container.get_config_item('lxc.cgroup2.memory.high') + swap_max = container.get_config_item('lxc.cgroup2.memory.swap.max') + vcpu = container.get_config_item('lxc.cgroup2.cpuset.cpus') + return vcpu, mem, mem_max, swap_max + +def set_lxc_ressources(lxc_name,lxc_item,val): + container=lxc.Container(lxc_name) + container.set_config_item(lxc_item,val) + container.save_config() + + + + diff --git a/functions/fnet.py b/functions/fnet.py new file mode 100644 index 0000000..a5b5ed0 --- /dev/null +++ b/functions/fnet.py @@ -0,0 +1,70 @@ +from app import * +import ipaddress +from xml.dom import minidom + +def diff_net(min_dhcp,max_dhcp): + ip1 = ipaddress.IPv4Address(min_dhcp) + ip2 = ipaddress.IPv4Address(max_dhcp) + nb_ip = int(ip2) - int(ip1) + 1 + return nb_ip + +def get_int(net_name): + network = conn.networkLookupByName(net_name) + net_int = network.bridgeName() + return net_int + +def create_vswitch_int(net_int): + cmd="ovs-vsctl add-br "+net_int + subprocess.call(cmd, shell=True) + +def delete_network(net_name,net_int): + cmd = "ovs-vsctl del-br "+net_int + subprocess.call(cmd, shell=True) + network = conn.networkLookupByName(net_name) #Lapin + network.destroy() + network.undefine() + cmd2="kill $(cat /run/dhypecp_"+net_int+".pid)" + subprocess.call(cmd2, shell=True) + cmd3="rm -f /run/dhypecp_"+net_int+".pid" + subprocess.call(cmd3, shell=True) + +def create_network(net_name,net_int): + create_vswitch_int(net_int) + xml = f""" + + { net_name } + + + + + """ + conn.networkDefineXML(xml) + net_use = conn.networkLookupByName(net_name) + 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 diff --git a/functions/fvm.py b/functions/fvm.py index 0e56109..f4ee8f3 100644 --- a/functions/fvm.py +++ b/functions/fvm.py @@ -9,6 +9,14 @@ def get_vm_activ(): activ_vm.append(dom.name()) return activ_vm +#Set a VM as active +def is_active(vm_name): + dom = conn.lookupByName(vm_name) + try: + dom.resume() + except: + pass + def get_vm_inactiv(): inactiv_vm=conn.listDefinedDomains() return inactiv_vm diff --git a/templates/createnet.html b/templates/createnet.html new file mode 100644 index 0000000..9ed50e2 --- /dev/null +++ b/templates/createnet.html @@ -0,0 +1,36 @@ +{% extends 'layout.html' %} +{% block content %} +{% include 'menu.html' %} +
+
+
+
+
+ - Build Network +
+
+ +
+ +
+ +
+ +
+ +
+ DHCP Configuration + +
+ +
+ +
+ +
+
+
+
+
+ +{% endblock %} diff --git a/templates/edit_lxc.html b/templates/edit_lxc.html new file mode 100644 index 0000000..dd39a64 --- /dev/null +++ b/templates/edit_lxc.html @@ -0,0 +1,36 @@ +{% extends 'layout.html' %} +{% block content %} +{% include 'menu.html' %} +
+
+
+ Ressources of {{ lxc_name }} +
+
+
+
+ vCPU : {{ max_vCPU }}

+ Memory: {{ actual_ram }}

+ Max Memory: {{ max_Mermory }}

+ Swap: {{ max_swap }}

+
+ +
+
+ +
CPU :

+
Memory :

+
Max Memory :

+
Swap :

+

+ +
+
+
+ +
+
+
+
+ +{% endblock %} diff --git a/templates/menu.html b/templates/menu.html index 98d9d12..0211781 100644 --- a/templates/menu.html +++ b/templates/menu.html @@ -22,6 +22,9 @@ +
diff --git a/templates/network.html b/templates/network.html new file mode 100644 index 0000000..f1de0d4 --- /dev/null +++ b/templates/network.html @@ -0,0 +1,51 @@ +{% extends 'layout.html' %} +{% block content %} +{% include 'menu.html' %} +
+ Add Network


+
+Physical Interfaces: +
+
+
    +
  • + {% for pint in net_hard_int %} + {{ pint }}
    + {% endfor %} +
  • +
+
+
+

+
+Virtual Interfaces: +
+
+
    + {% for noac in net_na %} +
  • + {{ noac }} Not active
    +
  • + {% endfor %} + {% for item in net_tree %} +
  • + {{ item[0] }} +
    + + +

    +
      + {% for sub_item in item[1] %} +
    • + {{ sub_item }} +
    • + {% endfor %} +
    +
  • + {% endfor %} +
+
+
+
+
+{% endblock %} diff --git a/templates/network.html.ori b/templates/network.html.ori new file mode 100644 index 0000000..4ba5f5c --- /dev/null +++ b/templates/network.html.ori @@ -0,0 +1,56 @@ +{% 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 %} diff --git a/templates/state.html b/templates/state.html index 31c71a9..25cd887 100644 --- a/templates/state.html +++ b/templates/state.html @@ -20,6 +20,8 @@
+
+ {{act_lxc[1]}} @@ -42,6 +44,7 @@
+
- @@ -99,7 +102,8 @@
-
+
+ {% if inact_vm[1] == 1 %}
diff --git a/templates/terminal.html b/templates/terminal.html index 891912a..77d4aba 100644 --- a/templates/terminal.html +++ b/templates/terminal.html @@ -1,8 +1,8 @@ {% extends 'layout.html' %} {% block content %} {% include 'menu.html' %} -
- +
Full screen
+
{% endblock %}