def vm_power(vmid, action): user = User(session['userinfo']['preferred_username']) connect_proxmox() if user.rtp or int(vmid) in user.allowed_vms: vm = VM(vmid) if action == 'start': vmconfig = vm.config usage_check = user.check_usage(vmconfig['cores'], vmconfig['memory'], 0) if usage_check: return usage_check vm.start() elif action == 'stop': vm.stop() send_stop_ssh_tunnel(vmid) elif action == 'shutdown': vm.shutdown() send_stop_ssh_tunnel(vmid) elif action == 'reset': vm.reset() elif action == 'suspend': vm.suspend() send_stop_ssh_tunnel(vmid) elif action == 'resume': vm.resume() return '', 200 else: return '', 403
def vm_mem(vmid, mem): user = User(session['userinfo']['preferred_username']) connect_proxmox() if user.rtp or int(vmid) in user.allowed_vms: vm = VM(vmid) cur_mem = vm.mem // 1024 if mem >= cur_mem: if vm.qmpstatus == 'running' or vm.qmpstatus == 'paused': usage_check = user.check_usage(0, mem - cur_mem, 0) else: usage_check = user.check_usage(0, mem, 0) if usage_check: return usage_check vm.set_mem(mem * 1024) return '', 200 else: return '', 403
def vm_cpu(vmid, cores): user = User(session['userinfo']['preferred_username']) connect_proxmox() if user.rtp or int(vmid) in user.allowed_vms: vm = VM(vmid) cur_cores = vm.cpu if cores >= cur_cores: if vm.qmpstatus == 'running' or vm.qmpstatus == 'paused': usage_check = user.check_usage(cores - cur_cores, 0, 0) else: usage_check = user.check_usage(cores, 0, 0) if usage_check: return usage_check vm.set_cpu(cores) return '', 200 else: return '', 403
def vm_disk(vmid, disk, size): user = User(session['userinfo']['preferred_username']) connect_proxmox() if user.rtp or int(vmid) in user.allowed_vms: vm = VM(vmid) usage_check = user.check_usage(0, 0, size) if usage_check: return usage_check vm.resize_disk(disk, size) return '', 200 else: return '', 403
def vm_details(vmid): user = User(session['userinfo']['preferred_username']) proxmox = connect_proxmox() if user.rtp or int(vmid) in user.allowed_vms: vm = VM(vmid) usage_check = user.check_usage(vm.cpu, vm.mem, 0) return render_template('vm_details.html', user=user, vm=vm, usage=user.usage, limits=user.limits, usage_check=usage_check) else: abort(403)
def create(): user = User(session['userinfo']['preferred_username']) proxmox = connect_proxmox() if user.active or user.rtp: if request.method == 'GET': stored_isos = get_isos(proxmox, app.config['PROXMOX_ISO_STORAGE']) pools = get_pools(proxmox, db) templates = get_templates(db) return render_template( 'create.html', user=user, usage=user.usage, limits=user.limits, percents=user.usage_percent, isos=stored_isos, pools=pools, templates=templates, ) elif request.method == 'POST': name = request.form['name'].lower() cores = request.form['cores'] memory = request.form['mem'] template = request.form['template'] disk = request.form['disk'] iso = request.form['iso'] ssh_key = request.form['ssh_key'] if iso != 'none': iso = '{}:iso/{}'.format(app.config['PROXMOX_ISO_STORAGE'], iso) if not user.rtp: if template == 'none': usage_check = user.check_usage(0, 0, disk) else: usage_check = user.check_usage(cores, memory, disk) username = user.name else: usage_check = None username = request.form['user'] if usage_check: return usage_check else: valid, available = check_hostname(starrs, name) if valid and available: if template == 'none': q.enqueue( create_vm_task, username, name, cores, memory, disk, iso, job_timeout=300, ) else: q.enqueue( setup_template_task, template, name, username, ssh_key, cores, memory, job_timeout=600, ) return '', 200 return '', 200 return None else: return '', 403