store ignored pools in db, check ignored pools when getting all pools

This commit is contained in:
Jordan Rodgers 2018-02-02 15:18:50 -05:00
parent 51de0b69af
commit 8fbae0a071
5 changed files with 39 additions and 26 deletions

View file

@ -78,7 +78,7 @@ def list_vms(user=None):
if user and not rtp:
return '', 403
elif user and rtp:
vms = get_vms_for_user(proxmox, user)
vms = get_vms_for_user(proxmox, db, user)
rtp_view = user
user = session['userinfo']['preferred_username']
elif rtp:
@ -88,7 +88,7 @@ def list_vms(user=None):
else:
user = session['userinfo']['preferred_username']
if active:
vms = get_vms_for_user(proxmox, user)
vms = get_vms_for_user(proxmox, db, user)
else:
vms = 'INACTIVE'
return render_template(
@ -127,7 +127,7 @@ def vm_details(vmid):
rtp = 'rtp' in session['userinfo']['groups']
active = 'active' in session['userinfo']['groups']
proxmox = connect_proxmox()
if rtp or int(vmid) in get_user_allowed_vms(proxmox, user):
if rtp or int(vmid) in get_user_allowed_vms(proxmox, db, user):
vm = get_vm(proxmox, vmid)
vm['vmid'] = vmid
vm['config'] = get_vm_config(proxmox, vmid)
@ -141,7 +141,7 @@ def vm_details(vmid):
get_ip_for_mac(starrs, interface[1])])
vm['expire'] = get_vm_expire(
db, vmid, app.config['VM_EXPIRE_MONTHS']).strftime('%m/%d/%Y')
usage = get_user_usage(proxmox, user)
usage = get_user_usage(proxmox, db, user)
limits = get_user_usage_limits(db, user)
usage_check = check_user_usage(proxmox, db, user,
vm['config']['cores'],
@ -165,7 +165,7 @@ def vm_power(vmid, action):
user = session['userinfo']['preferred_username']
rtp = 'rtp' in session['userinfo']['groups']
proxmox = connect_proxmox()
if rtp or int(vmid) in get_user_allowed_vms(proxmox, user):
if rtp or int(vmid) in get_user_allowed_vms(proxmox, db, user):
if action == 'start':
config = get_vm_config(proxmox, vmid)
usage_check = check_user_usage(proxmox, db, user, config['cores'],
@ -184,7 +184,7 @@ def vm_cpu(vmid, cores):
user = session['userinfo']['preferred_username']
rtp = 'rtp' in session['userinfo']['groups']
proxmox = connect_proxmox()
if rtp or int(vmid) in get_user_allowed_vms(proxmox, user):
if rtp or int(vmid) in get_user_allowed_vms(proxmox, db, user):
cur_cores = get_vm_config(proxmox, vmid)['cores']
if cores >= cur_cores:
status = get_vm(proxmox, vmid)['qmpstatus']
@ -207,7 +207,7 @@ def vm_mem(vmid, mem):
user = session['userinfo']['preferred_username']
rtp = 'rtp' in session['userinfo']['groups']
proxmox = connect_proxmox()
if rtp or int(vmid) in get_user_allowed_vms(proxmox, user):
if rtp or int(vmid) in get_user_allowed_vms(proxmox, db, user):
cur_mem = get_vm_config(proxmox, vmid)['memory'] // 1024
if mem >= cur_mem:
status = get_vm(proxmox, vmid)['qmpstatus']
@ -230,7 +230,7 @@ def vm_renew(vmid):
user = session['userinfo']['preferred_username']
rtp = 'rtp' in session['userinfo']['groups']
proxmox = connect_proxmox()
if rtp or int(vmid) in get_user_allowed_vms(proxmox, user):
if rtp or int(vmid) in get_user_allowed_vms(proxmox, db, user):
renew_vm_expire(db, vmid, app.config['VM_EXPIRE_MONTHS'])
for interface in get_vm_interfaces(proxmox, vmid):
renew_ip(starrs, get_ip_for_mac(starrs, interface[1]))
@ -245,7 +245,7 @@ def iso_eject(vmid):
user = session['userinfo']['preferred_username']
rtp = 'rtp' in session['userinfo']['groups']
proxmox = connect_proxmox()
if rtp or int(vmid) in get_user_allowed_vms(proxmox, user):
if rtp or int(vmid) in get_user_allowed_vms(proxmox, db, user):
eject_vm_iso(proxmox, vmid)
return '', 200
else:
@ -258,7 +258,7 @@ def iso_mount(vmid, iso):
user = session['userinfo']['preferred_username']
rtp = 'rtp' in session['userinfo']['groups']
proxmox = connect_proxmox()
if rtp or int(vmid) in get_user_allowed_vms(proxmox, user):
if rtp or int(vmid) in get_user_allowed_vms(proxmox, db, user):
iso = "{}:iso/{}".format(app.config['PROXMOX_ISO_STORAGE'], iso)
mount_vm_iso(proxmox, vmid, iso)
return '', 200
@ -273,7 +273,7 @@ def delete(vmid):
rtp = 'rtp' in session['userinfo']['groups']
proxmox = connect_proxmox()
if rtp or int(vmid) in get_user_allowed_vms(
proxmox, user) or 'rtp' in session['userinfo']['groups']:
proxmox, db, user) or 'rtp' in session['userinfo']['groups']:
q.enqueue(delete_vm_task, vmid)
return '', 200
else:
@ -289,7 +289,7 @@ def create():
proxmox = connect_proxmox()
if active:
if request.method == 'GET':
usage = get_user_usage(proxmox, user)
usage = get_user_usage(proxmox, db, user)
limits = get_user_usage_limits(db, user)
percents = get_user_usage_percent(proxmox, user, usage, limits)
isos = get_isos(proxmox, app.config['PROXMOX_ISO_STORAGE'])

View file

@ -2,7 +2,7 @@ import datetime
from sqlalchemy import exists
from dateutil.relativedelta import relativedelta
from proxstar.ldapdb import *
from proxstar.models import VM_Expiration, Usage_Limit, Pool_Cache, Base
from proxstar.models import VM_Expiration, Usage_Limit, Pool_Cache, Ignored_Pools, Base
def get_vm_expire(db, vmid, months):
@ -124,3 +124,10 @@ def get_pool_cache(db):
pool_dict['percents'] = pool.percents
pools.append(pool_dict)
return pools
def get_ignored_pools(db):
ignored_pools = []
for pool in db.query(Ignored_Pools).all():
ignored_pools.append(pool.id)
return ignored_pools

View file

@ -35,3 +35,8 @@ class Template(Base):
id = Column(Integer, primary_key=True)
name = Column(String(32), nullable=False)
desc = Column(Text)
class Ignored_Pools(Base):
__tablename__ = 'ignored_pools'
id = Column(String(32), primary_key=True)

View file

@ -27,8 +27,8 @@ def create_user(proxmox, user):
path="/pool/{}".format(user), roles='PVEVMConsole', users=username)
def get_vms_for_user(proxmox, user):
pools = get_pools(proxmox)
def get_vms_for_user(proxmox, db, user):
pools = get_pools(proxmox, db)
if user not in pools:
create_user(proxmox, user)
vms = proxmox.pools(user).get()['members']
@ -41,12 +41,12 @@ def get_vms_for_user(proxmox, user):
def get_vms_for_rtp(proxmox, db):
pools = []
for pool in get_pools(proxmox):
for pool in get_pools(proxmox, db):
pool_dict = dict()
pool_dict['user'] = pool
pool_dict['vms'] = get_vms_for_user(proxmox, pool)
pool_dict['vms'] = get_vms_for_user(proxmox, db, pool)
pool_dict['num_vms'] = len(pool_dict['vms'])
pool_dict['usage'] = get_user_usage(proxmox, pool)
pool_dict['usage'] = get_user_usage(proxmox, db, pool)
pool_dict['limits'] = get_user_usage_limits(db, pool)
pool_dict['percents'] = get_user_usage_percent(
proxmox, pool, pool_dict['usage'], pool_dict['limits'])
@ -54,9 +54,9 @@ def get_vms_for_rtp(proxmox, db):
return pools
def get_user_allowed_vms(proxmox, user):
def get_user_allowed_vms(proxmox, db, user):
allowed_vms = []
for vm in get_vms_for_user(proxmox, user):
for vm in get_vms_for_user(proxmox, db, user):
allowed_vms.append(vm['vmid'])
return allowed_vms
@ -162,7 +162,7 @@ def get_user_usage(proxmox, user):
usage['disk'] = 0
if is_rtp(user):
return usage
vms = get_vms_for_user(proxmox, user)
vms = get_vms_for_user(proxmox, db, user)
for vm in vms:
config = get_vm_config(proxmox, vm['vmid'])
if 'status' in vm:
@ -176,7 +176,7 @@ def get_user_usage(proxmox, user):
def check_user_usage(proxmox, db, user, vm_cpu, vm_mem, vm_disk):
limits = get_user_usage_limits(db, user)
cur_usage = get_user_usage(proxmox, user)
cur_usage = get_user_usage(proxmox, db, user)
if int(cur_usage['cpu']) + int(vm_cpu) > int(limits['cpu']):
return 'exceeds_cpu_limit'
elif int(cur_usage['mem']) + (int(vm_mem) / 1024) > int(limits['mem']):
@ -188,7 +188,7 @@ def check_user_usage(proxmox, db, user, vm_cpu, vm_mem, vm_disk):
def get_user_usage_percent(proxmox, user, usage=None, limits=None):
percents = dict()
if not usage:
usage = get_user_usage(proxmox, user)
usage = get_user_usage(proxmox, db, user)
if not limits:
limits = get_user_usage_limits(user)
percents['cpu'] = round(usage['cpu'] / limits['cpu'] * 100)
@ -273,11 +273,12 @@ def mount_vm_iso(proxmox, vmid, iso):
node.qemu(vmid).config.post(ide2="{},media=cdrom".format(iso))
def get_pools(proxmox):
def get_pools(proxmox, db):
pools = []
for pool in proxmox.pools.get():
poolid = pool['poolid']
if is_user(poolid) and poolid != 'rtp':
ignored_pools = get_ignored_pools(db)
if poolid not in ignored_pools and is_user(poolid):
pools.append(poolid)
pools = sorted(pools)
return pools

View file

@ -79,7 +79,7 @@ def process_expiring_vms_task():
pools = get_pools(proxmox)
for pool in pools:
expiring_vms = []
vms = get_vms_for_user(proxmox, pool)
vms = get_vms_for_user(proxmox, db, pool)
for vm in vms:
vmid = vm['vmid']
expire = get_vm_expire(db, vmid,