skip cpu and mem check for vm creation, verify disk size before attempting to create vm

This commit is contained in:
Jordan Rodgers 2017-12-11 18:58:16 -05:00
parent 05e08fb92d
commit 2b155903fd
4 changed files with 66 additions and 82 deletions

4
app.py
View file

@ -211,7 +211,6 @@ def create():
if request.method == 'GET':
usage = get_user_usage(proxmox, 'proxstar')
limits = get_user_usage_limits(user)
full_limits = check_user_limit(proxmox, user, usage, limits)
percents = get_user_usage_percent(proxmox, usage, limits)
isos = get_isos(proxmox, app.config['PROXMOX_ISO_STORAGE'])
return render_template(
@ -219,7 +218,6 @@ def create():
username='com6056',
usage=usage,
limits=limits,
full_limits=full_limits,
percents=percents,
isos=isos)
elif request.method == 'POST':
@ -230,7 +228,7 @@ def create():
iso = request.form['iso']
if iso != 'none':
iso = "{}:iso/{}".format(app.config['PROXMOX_ISO_STORAGE'], iso)
usage_check = check_user_usage(proxmox, user, cores, memory, disk)
usage_check = check_user_usage(proxmox, user, 0, 0, disk)
if usage_check:
return usage_check
else:

View file

@ -137,21 +137,6 @@ def get_user_usage(proxmox, user):
return usage
def check_user_limit(proxmox, user, usage=None, limits=None):
full_limits = []
if not usage:
usage = get_user_usage(proxmox, user)
if not limits:
limits = get_user_usage_limits(user)
if usage['cpu'] >= limits['cpu']:
full_limits.append('CPU')
if usage['mem'] >= limits['mem']:
full_limits.append('Memory')
if usage['disk'] >= limits['disk']:
full_limits.append('Disk')
return full_limits
def check_user_usage(proxmox, user, vm_cpu, vm_mem, vm_disk):
limits = get_user_usage_limits(user)
cur_usage = get_user_usage(proxmox, user)

View file

@ -388,62 +388,67 @@ $("#create-vm").click(function(){
const mem = document.getElementById('mem').value
const disk = document.getElementById('disk').value
const iso = document.getElementById('iso').value
const max_disk = $(this).data('max_disk')
if (name && disk) {
fetch(`/proxstar/hostname/${name}`, {
credentials: 'same-origin',
}).then((response) => {
return response.text()
}).then((text) => {
if (text == 'ok') {
var loader = document.createElement('div');
loader.setAttribute('class', 'loader');
var info = document.createElement('span');
info.innerHTML = `Cores: ${cores}<br>Memory: ${mem/1024} GB<br>Disk: ${disk} GB<br>ISO: ${iso}`,
swal({
title: `Are you sure you want to create ${name}?`,
content: info,
icon: "info",
buttons: {
cancel: true,
create: {
text: "Create",
closeModal: false,
className: "swal-button",
if (disk > max_disk) {
swal("Uh oh...", `You do not have enough disk resources available! Please lower the VM disk size to ${max_disk} GB or lower.`, "error");
} else {
fetch(`/proxstar/hostname/${name}`, {
credentials: 'same-origin',
}).then((response) => {
return response.text()
}).then((text) => {
if (text == 'ok') {
var loader = document.createElement('div');
loader.setAttribute('class', 'loader');
var info = document.createElement('span');
info.innerHTML = `Cores: ${cores}<br>Memory: ${mem/1024} GB<br>Disk: ${disk} GB<br>ISO: ${iso}`,
swal({
title: `Are you sure you want to create ${name}?`,
content: info,
icon: "info",
buttons: {
cancel: true,
create: {
text: "Create",
closeModal: false,
className: "swal-button",
}
}
}
})
.then((willCreate) => {
if (willCreate) {
var data = new FormData();
data.append('name', name);
data.append('cores', cores);
data.append('mem', mem);
data.append('disk', disk);
data.append('iso', iso);
fetch('/proxstar/vm/create', {
credentials: 'same-origin',
method: 'post',
body: data
}).then((response) => {
return response.text()
}).then((vmid) => {
window.location = `/proxstar/vm/${vmid}`;
});
}
});
} else if (text == 'invalid') {
swal("Uh oh...", `That name is not a valid name! Please try another name.`, "error");
} else if (text == 'taken') {
swal("Uh oh...", `That name is not available! Please try another name.`, "error");
}
}).catch(err => {
if (err) {
swal("Uh oh...", `Unable to verify name. Please try again later.`, "error");
} else {
swal.stopLoading();
swal.close();
}
});
})
.then((willCreate) => {
if (willCreate) {
var data = new FormData();
data.append('name', name);
data.append('cores', cores);
data.append('mem', mem);
data.append('disk', disk);
data.append('iso', iso);
fetch('/proxstar/vm/create', {
credentials: 'same-origin',
method: 'post',
body: data
}).then((response) => {
return response.text()
}).then((vmid) => {
window.location = `/proxstar/vm/${vmid}`;
});
}
});
} else if (text == 'invalid') {
swal("Uh oh...", `That name is not a valid name! Please try another name.`, "error");
} else if (text == 'taken') {
swal("Uh oh...", `That name is not available! Please try another name.`, "error");
}
}).catch(err => {
if (err) {
swal("Uh oh...", `Unable to verify name! Please try again later.`, "error");
} else {
swal.stopLoading();
swal.close();
}
});
}
} else if (!name && !disk) {
swal("Uh oh...", `You must enter a name and disk size for your VM!`, "error");
} else if (!name) {

View file

@ -9,12 +9,8 @@
<h3 class="panel-title">Create VM</h3>
</div>
<div class="panel-body">
{% if full_limits %}
<p>You have reached your limit for the following resources:</p>
{% for limit in full_limits %}
<p><strong>{{ limit }}</strong></p>
{% endfor %}
<p>Before you can create any more VMs, you must first either power off (CPU/Memory) or delete (Disk) existing VMs until you have enough resources available.</p>
{% if limits['disk'] - usage['disk'] <= 0 %}
<p>Before you can create any more VMs, you must first delete existing VMs until you have enough disk resources available.</p>
{% else %}
<div class="form-group">
<label for="name">VM Name</label>
@ -23,7 +19,7 @@
<div class="form-group">
<label for="cores">Cores</label>
<select name="cores" id="cores" class="form-control">
{% for i in range(1, limits['cpu'] - usage['cpu'] + 1) %}
{% for i in range(1, limits['cpu'] + 1) %}
<option value="{{ i }}">{{ i }}</option>
{% endfor %}
</select>
@ -31,14 +27,14 @@
<div class="form-group">
<label for="mem">Memory</label>
<select name="mem" id="mem" class="form-control">
{% for i in range(1, limits['mem'] - usage['mem'] + 1) %}
{% for i in range(1, limits['mem'] + 1) %}
<option value="{{ i * 1024 }}">{{ i }}GB</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<label for="disk">Disk</label>
<input type="text" name="disk" id="disk" class="form-control">
<input type="number" name="disk" id="disk" class="form-control" min="1" max="{{ limits['disk'] - usage['disk'] }}">
</div>
<div class="form-group">
<label for="iso">ISO</label>
@ -49,7 +45,7 @@
{% endfor %}
</select>
</div>
<button class="btn btn-success" id="create-vm" name="create">CREATE</button>
<button class="btn btn-success" id="create-vm" name="create" data-max_disk="{{ limits['disk'] - usage['disk'] }}">CREATE</button>
{% endif %}
</div>
</div>