mirror of
https://github.com/ComputerScienceHouse/proxstar.git
synced 2025-02-14 14:01:51 +00:00
skip cpu and mem check for vm creation, verify disk size before attempting to create vm
This commit is contained in:
parent
05e08fb92d
commit
2b155903fd
4 changed files with 66 additions and 82 deletions
4
app.py
4
app.py
|
@ -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:
|
||||
|
|
15
proxmox.py
15
proxmox.py
|
@ -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)
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in a new issue