def process_expiring_vms_task(): with app.app_context(): proxmox = connect_proxmox() db = connect_db() connect_starrs() pools = get_pools(proxmox, db) expired_vms = [] for pool in pools: user = User(pool) expiring_vms = [] vms = user.vms for vm in vms: vm = VM(vm['vmid']) days = (vm.expire - datetime.date.today()).days if days in [10, 7, 3, 1, 0, -1, -2, -3, -4, -5, -6]: expiring_vms.append([vm.id, vm.name, days]) if days <= 0: expired_vms.append([vm.id, vm.name, days]) vm.stop() elif days <= -7: logging.info( 'Deleting {} ({}) as it has been at least a week since expiration.' .format(vm.name, vm.id)) send_stop_ssh_tunnel(vm.id) delete_vm_task(vm.id) if expiring_vms: send_vm_expire_email(pool, expiring_vms) if expired_vms: send_rtp_vm_delete_email(expired_vms)
def get_vms_for_rtp(proxmox, database): pools = [] for pool in get_pools(proxmox, database): user = User(pool) pool_dict = {} pool_dict['user'] = user.name pool_dict['vms'] = user.vms pool_dict['num_vms'] = len(pool_dict['vms']) pool_dict['usage'] = user.usage pool_dict['limits'] = user.limits pool_dict['percents'] = user.usage_percent pools.append(pool_dict) return pools
def process_expiring_vms_task(): with app.app_context(): proxmox = connect_proxmox() db = connect_db() starrs = connect_starrs() pools = get_pools(proxmox, db) for pool in pools: user = User(pool) expiring_vms = [] vms = user.vms for vm in vms: vm = VM(vm['vmid']) days = (vm.expire - datetime.date.today()).days if days in [10, 7, 3, 1, 0]: name = vm.name expiring_vms.append([vm.name, days]) if days == 0: vm.stop() if expiring_vms: send_vm_expire_email('com6056', expiring_vms)
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