mirror of
https://github.com/ComputerScienceHouse/proxstar.git
synced 2025-03-09 15:40:09 +00:00
store ignored pools in db, check ignored pools when getting all pools
This commit is contained in:
parent
51de0b69af
commit
8fbae0a071
5 changed files with 39 additions and 26 deletions
|
@ -78,7 +78,7 @@ def list_vms(user=None):
|
||||||
if user and not rtp:
|
if user and not rtp:
|
||||||
return '', 403
|
return '', 403
|
||||||
elif user and rtp:
|
elif user and rtp:
|
||||||
vms = get_vms_for_user(proxmox, user)
|
vms = get_vms_for_user(proxmox, db, user)
|
||||||
rtp_view = user
|
rtp_view = user
|
||||||
user = session['userinfo']['preferred_username']
|
user = session['userinfo']['preferred_username']
|
||||||
elif rtp:
|
elif rtp:
|
||||||
|
@ -88,7 +88,7 @@ def list_vms(user=None):
|
||||||
else:
|
else:
|
||||||
user = session['userinfo']['preferred_username']
|
user = session['userinfo']['preferred_username']
|
||||||
if active:
|
if active:
|
||||||
vms = get_vms_for_user(proxmox, user)
|
vms = get_vms_for_user(proxmox, db, user)
|
||||||
else:
|
else:
|
||||||
vms = 'INACTIVE'
|
vms = 'INACTIVE'
|
||||||
return render_template(
|
return render_template(
|
||||||
|
@ -127,7 +127,7 @@ def vm_details(vmid):
|
||||||
rtp = 'rtp' in session['userinfo']['groups']
|
rtp = 'rtp' in session['userinfo']['groups']
|
||||||
active = 'active' in session['userinfo']['groups']
|
active = 'active' in session['userinfo']['groups']
|
||||||
proxmox = connect_proxmox()
|
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 = get_vm(proxmox, vmid)
|
||||||
vm['vmid'] = vmid
|
vm['vmid'] = vmid
|
||||||
vm['config'] = get_vm_config(proxmox, vmid)
|
vm['config'] = get_vm_config(proxmox, vmid)
|
||||||
|
@ -141,7 +141,7 @@ def vm_details(vmid):
|
||||||
get_ip_for_mac(starrs, interface[1])])
|
get_ip_for_mac(starrs, interface[1])])
|
||||||
vm['expire'] = get_vm_expire(
|
vm['expire'] = get_vm_expire(
|
||||||
db, vmid, app.config['VM_EXPIRE_MONTHS']).strftime('%m/%d/%Y')
|
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)
|
limits = get_user_usage_limits(db, user)
|
||||||
usage_check = check_user_usage(proxmox, db, user,
|
usage_check = check_user_usage(proxmox, db, user,
|
||||||
vm['config']['cores'],
|
vm['config']['cores'],
|
||||||
|
@ -165,7 +165,7 @@ def vm_power(vmid, action):
|
||||||
user = session['userinfo']['preferred_username']
|
user = session['userinfo']['preferred_username']
|
||||||
rtp = 'rtp' in session['userinfo']['groups']
|
rtp = 'rtp' in session['userinfo']['groups']
|
||||||
proxmox = connect_proxmox()
|
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':
|
if action == 'start':
|
||||||
config = get_vm_config(proxmox, vmid)
|
config = get_vm_config(proxmox, vmid)
|
||||||
usage_check = check_user_usage(proxmox, db, user, config['cores'],
|
usage_check = check_user_usage(proxmox, db, user, config['cores'],
|
||||||
|
@ -184,7 +184,7 @@ def vm_cpu(vmid, cores):
|
||||||
user = session['userinfo']['preferred_username']
|
user = session['userinfo']['preferred_username']
|
||||||
rtp = 'rtp' in session['userinfo']['groups']
|
rtp = 'rtp' in session['userinfo']['groups']
|
||||||
proxmox = connect_proxmox()
|
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']
|
cur_cores = get_vm_config(proxmox, vmid)['cores']
|
||||||
if cores >= cur_cores:
|
if cores >= cur_cores:
|
||||||
status = get_vm(proxmox, vmid)['qmpstatus']
|
status = get_vm(proxmox, vmid)['qmpstatus']
|
||||||
|
@ -207,7 +207,7 @@ def vm_mem(vmid, mem):
|
||||||
user = session['userinfo']['preferred_username']
|
user = session['userinfo']['preferred_username']
|
||||||
rtp = 'rtp' in session['userinfo']['groups']
|
rtp = 'rtp' in session['userinfo']['groups']
|
||||||
proxmox = connect_proxmox()
|
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
|
cur_mem = get_vm_config(proxmox, vmid)['memory'] // 1024
|
||||||
if mem >= cur_mem:
|
if mem >= cur_mem:
|
||||||
status = get_vm(proxmox, vmid)['qmpstatus']
|
status = get_vm(proxmox, vmid)['qmpstatus']
|
||||||
|
@ -230,7 +230,7 @@ def vm_renew(vmid):
|
||||||
user = session['userinfo']['preferred_username']
|
user = session['userinfo']['preferred_username']
|
||||||
rtp = 'rtp' in session['userinfo']['groups']
|
rtp = 'rtp' in session['userinfo']['groups']
|
||||||
proxmox = connect_proxmox()
|
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'])
|
renew_vm_expire(db, vmid, app.config['VM_EXPIRE_MONTHS'])
|
||||||
for interface in get_vm_interfaces(proxmox, vmid):
|
for interface in get_vm_interfaces(proxmox, vmid):
|
||||||
renew_ip(starrs, get_ip_for_mac(starrs, interface[1]))
|
renew_ip(starrs, get_ip_for_mac(starrs, interface[1]))
|
||||||
|
@ -245,7 +245,7 @@ def iso_eject(vmid):
|
||||||
user = session['userinfo']['preferred_username']
|
user = session['userinfo']['preferred_username']
|
||||||
rtp = 'rtp' in session['userinfo']['groups']
|
rtp = 'rtp' in session['userinfo']['groups']
|
||||||
proxmox = connect_proxmox()
|
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)
|
eject_vm_iso(proxmox, vmid)
|
||||||
return '', 200
|
return '', 200
|
||||||
else:
|
else:
|
||||||
|
@ -258,7 +258,7 @@ def iso_mount(vmid, iso):
|
||||||
user = session['userinfo']['preferred_username']
|
user = session['userinfo']['preferred_username']
|
||||||
rtp = 'rtp' in session['userinfo']['groups']
|
rtp = 'rtp' in session['userinfo']['groups']
|
||||||
proxmox = connect_proxmox()
|
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)
|
iso = "{}:iso/{}".format(app.config['PROXMOX_ISO_STORAGE'], iso)
|
||||||
mount_vm_iso(proxmox, vmid, iso)
|
mount_vm_iso(proxmox, vmid, iso)
|
||||||
return '', 200
|
return '', 200
|
||||||
|
@ -273,7 +273,7 @@ def delete(vmid):
|
||||||
rtp = 'rtp' in session['userinfo']['groups']
|
rtp = 'rtp' in session['userinfo']['groups']
|
||||||
proxmox = connect_proxmox()
|
proxmox = connect_proxmox()
|
||||||
if rtp or int(vmid) in get_user_allowed_vms(
|
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)
|
q.enqueue(delete_vm_task, vmid)
|
||||||
return '', 200
|
return '', 200
|
||||||
else:
|
else:
|
||||||
|
@ -289,7 +289,7 @@ def create():
|
||||||
proxmox = connect_proxmox()
|
proxmox = connect_proxmox()
|
||||||
if active:
|
if active:
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
usage = get_user_usage(proxmox, user)
|
usage = get_user_usage(proxmox, db, user)
|
||||||
limits = get_user_usage_limits(db, user)
|
limits = get_user_usage_limits(db, user)
|
||||||
percents = get_user_usage_percent(proxmox, user, usage, limits)
|
percents = get_user_usage_percent(proxmox, user, usage, limits)
|
||||||
isos = get_isos(proxmox, app.config['PROXMOX_ISO_STORAGE'])
|
isos = get_isos(proxmox, app.config['PROXMOX_ISO_STORAGE'])
|
||||||
|
|
|
@ -2,7 +2,7 @@ import datetime
|
||||||
from sqlalchemy import exists
|
from sqlalchemy import exists
|
||||||
from dateutil.relativedelta import relativedelta
|
from dateutil.relativedelta import relativedelta
|
||||||
from proxstar.ldapdb import *
|
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):
|
def get_vm_expire(db, vmid, months):
|
||||||
|
@ -124,3 +124,10 @@ def get_pool_cache(db):
|
||||||
pool_dict['percents'] = pool.percents
|
pool_dict['percents'] = pool.percents
|
||||||
pools.append(pool_dict)
|
pools.append(pool_dict)
|
||||||
return pools
|
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
|
||||||
|
|
|
@ -35,3 +35,8 @@ class Template(Base):
|
||||||
id = Column(Integer, primary_key=True)
|
id = Column(Integer, primary_key=True)
|
||||||
name = Column(String(32), nullable=False)
|
name = Column(String(32), nullable=False)
|
||||||
desc = Column(Text)
|
desc = Column(Text)
|
||||||
|
|
||||||
|
|
||||||
|
class Ignored_Pools(Base):
|
||||||
|
__tablename__ = 'ignored_pools'
|
||||||
|
id = Column(String(32), primary_key=True)
|
||||||
|
|
|
@ -27,8 +27,8 @@ def create_user(proxmox, user):
|
||||||
path="/pool/{}".format(user), roles='PVEVMConsole', users=username)
|
path="/pool/{}".format(user), roles='PVEVMConsole', users=username)
|
||||||
|
|
||||||
|
|
||||||
def get_vms_for_user(proxmox, user):
|
def get_vms_for_user(proxmox, db, user):
|
||||||
pools = get_pools(proxmox)
|
pools = get_pools(proxmox, db)
|
||||||
if user not in pools:
|
if user not in pools:
|
||||||
create_user(proxmox, user)
|
create_user(proxmox, user)
|
||||||
vms = proxmox.pools(user).get()['members']
|
vms = proxmox.pools(user).get()['members']
|
||||||
|
@ -41,12 +41,12 @@ def get_vms_for_user(proxmox, user):
|
||||||
|
|
||||||
def get_vms_for_rtp(proxmox, db):
|
def get_vms_for_rtp(proxmox, db):
|
||||||
pools = []
|
pools = []
|
||||||
for pool in get_pools(proxmox):
|
for pool in get_pools(proxmox, db):
|
||||||
pool_dict = dict()
|
pool_dict = dict()
|
||||||
pool_dict['user'] = pool
|
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['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['limits'] = get_user_usage_limits(db, pool)
|
||||||
pool_dict['percents'] = get_user_usage_percent(
|
pool_dict['percents'] = get_user_usage_percent(
|
||||||
proxmox, pool, pool_dict['usage'], pool_dict['limits'])
|
proxmox, pool, pool_dict['usage'], pool_dict['limits'])
|
||||||
|
@ -54,9 +54,9 @@ def get_vms_for_rtp(proxmox, db):
|
||||||
return pools
|
return pools
|
||||||
|
|
||||||
|
|
||||||
def get_user_allowed_vms(proxmox, user):
|
def get_user_allowed_vms(proxmox, db, user):
|
||||||
allowed_vms = []
|
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'])
|
allowed_vms.append(vm['vmid'])
|
||||||
return allowed_vms
|
return allowed_vms
|
||||||
|
|
||||||
|
@ -162,7 +162,7 @@ def get_user_usage(proxmox, user):
|
||||||
usage['disk'] = 0
|
usage['disk'] = 0
|
||||||
if is_rtp(user):
|
if is_rtp(user):
|
||||||
return usage
|
return usage
|
||||||
vms = get_vms_for_user(proxmox, user)
|
vms = get_vms_for_user(proxmox, db, user)
|
||||||
for vm in vms:
|
for vm in vms:
|
||||||
config = get_vm_config(proxmox, vm['vmid'])
|
config = get_vm_config(proxmox, vm['vmid'])
|
||||||
if 'status' in vm:
|
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):
|
def check_user_usage(proxmox, db, user, vm_cpu, vm_mem, vm_disk):
|
||||||
limits = get_user_usage_limits(db, user)
|
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']):
|
if int(cur_usage['cpu']) + int(vm_cpu) > int(limits['cpu']):
|
||||||
return 'exceeds_cpu_limit'
|
return 'exceeds_cpu_limit'
|
||||||
elif int(cur_usage['mem']) + (int(vm_mem) / 1024) > int(limits['mem']):
|
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):
|
def get_user_usage_percent(proxmox, user, usage=None, limits=None):
|
||||||
percents = dict()
|
percents = dict()
|
||||||
if not usage:
|
if not usage:
|
||||||
usage = get_user_usage(proxmox, user)
|
usage = get_user_usage(proxmox, db, user)
|
||||||
if not limits:
|
if not limits:
|
||||||
limits = get_user_usage_limits(user)
|
limits = get_user_usage_limits(user)
|
||||||
percents['cpu'] = round(usage['cpu'] / limits['cpu'] * 100)
|
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))
|
node.qemu(vmid).config.post(ide2="{},media=cdrom".format(iso))
|
||||||
|
|
||||||
|
|
||||||
def get_pools(proxmox):
|
def get_pools(proxmox, db):
|
||||||
pools = []
|
pools = []
|
||||||
for pool in proxmox.pools.get():
|
for pool in proxmox.pools.get():
|
||||||
poolid = pool['poolid']
|
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.append(poolid)
|
||||||
pools = sorted(pools)
|
pools = sorted(pools)
|
||||||
return pools
|
return pools
|
||||||
|
|
|
@ -79,7 +79,7 @@ def process_expiring_vms_task():
|
||||||
pools = get_pools(proxmox)
|
pools = get_pools(proxmox)
|
||||||
for pool in pools:
|
for pool in pools:
|
||||||
expiring_vms = []
|
expiring_vms = []
|
||||||
vms = get_vms_for_user(proxmox, pool)
|
vms = get_vms_for_user(proxmox, db, pool)
|
||||||
for vm in vms:
|
for vm in vms:
|
||||||
vmid = vm['vmid']
|
vmid = vm['vmid']
|
||||||
expire = get_vm_expire(db, vmid,
|
expire = get_vm_expire(db, vmid,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue