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:
|
||||
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'])
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue