check usage before starting vm, hide start button if not enough resources, always show cpu/mem buttons

This commit is contained in:
Jordan Rodgers 2017-12-11 13:13:25 -05:00
parent 75ef5a98d1
commit 79fff2e762
2 changed files with 32 additions and 22 deletions

8
app.py
View file

@ -75,7 +75,8 @@ def vm_details(vmid):
vm['expire'] = get_vm_expire(vmid, app.config['VM_EXPIRE_MONTHS']).strftime('%m/%d/%Y') vm['expire'] = get_vm_expire(vmid, app.config['VM_EXPIRE_MONTHS']).strftime('%m/%d/%Y')
usage = get_user_usage(proxmox, 'proxstar') usage = get_user_usage(proxmox, 'proxstar')
limits = get_user_usage_limits(user) limits = get_user_usage_limits(user)
return render_template('vm_details.html', username='com6056', vm=vm, usage=usage, limits=limits) usage_check = check_user_usage(proxmox, user, vm['config']['cores'], vm['config']['memory'], 0)
return render_template('vm_details.html', username='com6056', vm=vm, usage=usage, limits=limits, usage_check=usage_check)
else: else:
return '', 403 return '', 403
@ -86,6 +87,11 @@ def vm_power(vmid, action):
app.config['PROXMOX_USER'], app.config['PROXMOX_USER'],
app.config['PROXMOX_PASS']) app.config['PROXMOX_PASS'])
if int(vmid) in get_user_allowed_vms(proxmox, user): if int(vmid) in get_user_allowed_vms(proxmox, user):
if action == 'start':
config = get_vm_config(proxmox, vmid)
usage_check = check_user_usage(proxmox, user, config['cores'], config['memory'], 0)
if usage_check:
return usage_check
change_vm_power(proxmox, vmid, action) change_vm_power(proxmox, vmid, action)
return '', 200 return '', 200
else: else:

View file

@ -10,8 +10,11 @@
</div> </div>
<div class="panel-body"> <div class="panel-body">
{% if vm['qmpstatus'] == 'stopped' %} {% if vm['qmpstatus'] == 'stopped' %}
{% if not usage_check %}
<button class="btn btn-success proxstar-actionbtn" id="start-vm" name="start" data-vmid="{{ vm['vmid'] }}" data-vmname="{{ vm['name'] }}">START</button> <button class="btn btn-success proxstar-actionbtn" id="start-vm" name="start" data-vmid="{{ vm['vmid'] }}" data-vmname="{{ vm['name'] }}">START</button>
<button class="btn btn-danger proxstar-actionbtn" id="delete-vm" name="delete" data-vmid="{{ vm['vmid'] }}" data-vmname="{{ vm['name'] }}">DELETE</button> {% else %}
Insufficient resources to start VM.
{% endif %}
{% endif %} {% endif %}
{% if vm['qmpstatus'] == 'paused' %} {% if vm['qmpstatus'] == 'paused' %}
<button class="btn btn-success proxstar-actionbtn" id="resume-vm" name="resume" data-vmid="{{ vm['vmid'] }}" data-vmname="{{ vm['name'] }}">RESUME</button> <button class="btn btn-success proxstar-actionbtn" id="resume-vm" name="resume" data-vmid="{{ vm['vmid'] }}" data-vmname="{{ vm['name'] }}">RESUME</button>
@ -24,6 +27,11 @@
<button class="btn btn-warning proxstar-actionbtn" id="stop-vm" name="stop" data-vmid="{{ vm['vmid'] }}" data-vmname="{{ vm['name'] }}">STOP</button> <button class="btn btn-warning proxstar-actionbtn" id="stop-vm" name="stop" data-vmid="{{ vm['vmid'] }}" data-vmname="{{ vm['name'] }}">STOP</button>
<button class="btn btn-warning proxstar-actionbtn" id="reset-vm" name="reset" data-vmid="{{ vm['vmid'] }}" data-vmname="{{ vm['name'] }}">RESET</button> <button class="btn btn-warning proxstar-actionbtn" id="reset-vm" name="reset" data-vmid="{{ vm['vmid'] }}" data-vmname="{{ vm['name'] }}">RESET</button>
{% endif %} {% endif %}
{% if vm['qmpstatus'] == 'stopped' %}
<button class="btn btn-danger proxstar-actionbtn" id="delete-vm" name="delete" data-vmid="{{ vm['vmid'] }}" data-vmname="{{ vm['name'] }}">DELETE</button>
{% else %}
To delete VM, power it off.
{% endif %}
</div> </div>
</div> </div>
</div> </div>
@ -76,31 +84,27 @@
<dt>Cores</dt> <dt>Cores</dt>
<dd> <dd>
{{ vm['config']['cores'] * vm['config'].get('sockets', 1) }} {{ vm['config']['cores'] * vm['config'].get('sockets', 1) }}
{% if limits['cpu'] - usage['cpu'] > 0 %} {% if vm['qmpstatus'] == 'running' or vm['qmpstatus'] == 'paused' %}
{% if vm['qmpstatus'] == 'running' or vm['qmpstatus'] == 'paused' %} <button class="btn btn-default proxstar-changebtn" id="change-cores" data-vmid="{{ vm['vmid'] }}" data-cores="{{ vm['config']['cores'] * vm['config'].get('sockets', 1) }}" data-usage="{{ usage['cpu'] - (vm['config']['cores'] * vm['config'].get('sockets', 1)) }}" data-limit="{{ limits['cpu'] }}">
<button class="btn btn-default proxstar-changebtn" id="change-cores" data-vmid="{{ vm['vmid'] }}" data-cores="{{ vm['config']['cores'] * vm['config'].get('sockets', 1) }}" data-usage="{{ usage['cpu'] - (vm['config']['cores'] * vm['config'].get('sockets', 1)) }}" data-limit="{{ limits['cpu'] }}"> <span class="glyphicon glyphicon-cog"></span>
<span class="glyphicon glyphicon-cog"></span> </button>
</button> {% else %}
{% else %} <button class="btn btn-default proxstar-changebtn" id="change-cores" data-vmid="{{ vm['vmid'] }}" data-cores="{{ vm['config']['cores'] * vm['config'].get('sockets', 1) }}" data-usage=0 data-limit="{{ limits['cpu'] }}">
<button class="btn btn-default proxstar-changebtn" id="change-cores" data-vmid="{{ vm['vmid'] }}" data-cores="{{ vm['config']['cores'] * vm['config'].get('sockets', 1) }}" data-usage="{{ usage['cpu'] }}" data-limit="{{ limits['cpu'] }}"> <span class="glyphicon glyphicon-cog"></span>
<span class="glyphicon glyphicon-cog"></span> </button>
</button>
{% endif %}
{% endif %} {% endif %}
</dd> </dd>
<dt>Memory</dt> <dt>Memory</dt>
<dd> <dd>
{{ vm['config']['memory'] // 1024 }}GB {{ vm['config']['memory'] // 1024 }}GB
{% if limits['mem'] - usage['mem'] > 0 %} {% if vm['qmpstatus'] == 'running' or vm['qmpstatus'] == 'paused' %}
{% if vm['qmpstatus'] == 'running' or vm['qmpstatus'] == 'paused' %} <button class="btn btn-default proxstar-changebtn" id="change-mem" data-vmid="{{ vm['vmid'] }}" data-mem="{{ vm['config']['memory'] // 1024 }}" data-usage="{{ usage['mem'] - vm['config']['memory'] // 1024 }}" data-limit="{{ limits['mem'] }}">
<button class="btn btn-default proxstar-changebtn" id="change-mem" data-vmid="{{ vm['vmid'] }}" data-mem="{{ vm['config']['memory'] // 1024 }}" data-usage="{{ usage['mem'] - vm['config']['memory'] // 1024 }}" data-limit="{{ limits['mem'] }}"> <span class="glyphicon glyphicon-cog"></span>
<span class="glyphicon glyphicon-cog"></span> </button>
</button> {% else %}
{% else %} <button class="btn btn-default proxstar-changebtn" id="change-mem" data-vmid="{{ vm['vmid'] }}" data-cores="{{ vm['config']['memory'] // 1024 }}" data-usage=0 data-limit="{{ limits['mem'] }}">
<button class="btn btn-default proxstar-changebtn" id="change-mem" data-vmid="{{ vm['vmid'] }}" data-cores="{{ vm['config']['memory'] // 1024 }}" data-usage="{{ usage['mem'] }}" data-limit="{{ limits['mem'] }}"> <span class="glyphicon glyphicon-cog"></span>
<span class="glyphicon glyphicon-cog"></span> </button>
</button>
{% endif %}
{% endif %} {% endif %}
</dd> </dd>
<dt>Expiration</dt> <dt>Expiration</dt>