mirror of
https://github.com/ComputerScienceHouse/proxstar.git
synced 2025-02-14 22:11: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':
|
if request.method == 'GET':
|
||||||
usage = get_user_usage(proxmox, 'proxstar')
|
usage = get_user_usage(proxmox, 'proxstar')
|
||||||
limits = get_user_usage_limits(user)
|
limits = get_user_usage_limits(user)
|
||||||
full_limits = check_user_limit(proxmox, user, usage, limits)
|
|
||||||
percents = get_user_usage_percent(proxmox, usage, limits)
|
percents = get_user_usage_percent(proxmox, usage, limits)
|
||||||
isos = get_isos(proxmox, app.config['PROXMOX_ISO_STORAGE'])
|
isos = get_isos(proxmox, app.config['PROXMOX_ISO_STORAGE'])
|
||||||
return render_template(
|
return render_template(
|
||||||
|
@ -219,7 +218,6 @@ def create():
|
||||||
username='com6056',
|
username='com6056',
|
||||||
usage=usage,
|
usage=usage,
|
||||||
limits=limits,
|
limits=limits,
|
||||||
full_limits=full_limits,
|
|
||||||
percents=percents,
|
percents=percents,
|
||||||
isos=isos)
|
isos=isos)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
|
@ -230,7 +228,7 @@ def create():
|
||||||
iso = request.form['iso']
|
iso = request.form['iso']
|
||||||
if iso != 'none':
|
if iso != 'none':
|
||||||
iso = "{}:iso/{}".format(app.config['PROXMOX_ISO_STORAGE'], iso)
|
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:
|
if usage_check:
|
||||||
return usage_check
|
return usage_check
|
||||||
else:
|
else:
|
||||||
|
|
15
proxmox.py
15
proxmox.py
|
@ -137,21 +137,6 @@ def get_user_usage(proxmox, user):
|
||||||
return usage
|
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):
|
def check_user_usage(proxmox, user, vm_cpu, vm_mem, vm_disk):
|
||||||
limits = get_user_usage_limits(user)
|
limits = get_user_usage_limits(user)
|
||||||
cur_usage = get_user_usage(proxmox, user)
|
cur_usage = get_user_usage(proxmox, user)
|
||||||
|
|
|
@ -388,62 +388,67 @@ $("#create-vm").click(function(){
|
||||||
const mem = document.getElementById('mem').value
|
const mem = document.getElementById('mem').value
|
||||||
const disk = document.getElementById('disk').value
|
const disk = document.getElementById('disk').value
|
||||||
const iso = document.getElementById('iso').value
|
const iso = document.getElementById('iso').value
|
||||||
|
const max_disk = $(this).data('max_disk')
|
||||||
if (name && disk) {
|
if (name && disk) {
|
||||||
fetch(`/proxstar/hostname/${name}`, {
|
if (disk > max_disk) {
|
||||||
credentials: 'same-origin',
|
swal("Uh oh...", `You do not have enough disk resources available! Please lower the VM disk size to ${max_disk} GB or lower.`, "error");
|
||||||
}).then((response) => {
|
} else {
|
||||||
return response.text()
|
fetch(`/proxstar/hostname/${name}`, {
|
||||||
}).then((text) => {
|
credentials: 'same-origin',
|
||||||
if (text == 'ok') {
|
}).then((response) => {
|
||||||
var loader = document.createElement('div');
|
return response.text()
|
||||||
loader.setAttribute('class', 'loader');
|
}).then((text) => {
|
||||||
var info = document.createElement('span');
|
if (text == 'ok') {
|
||||||
info.innerHTML = `Cores: ${cores}<br>Memory: ${mem/1024} GB<br>Disk: ${disk} GB<br>ISO: ${iso}`,
|
var loader = document.createElement('div');
|
||||||
swal({
|
loader.setAttribute('class', 'loader');
|
||||||
title: `Are you sure you want to create ${name}?`,
|
var info = document.createElement('span');
|
||||||
content: info,
|
info.innerHTML = `Cores: ${cores}<br>Memory: ${mem/1024} GB<br>Disk: ${disk} GB<br>ISO: ${iso}`,
|
||||||
icon: "info",
|
swal({
|
||||||
buttons: {
|
title: `Are you sure you want to create ${name}?`,
|
||||||
cancel: true,
|
content: info,
|
||||||
create: {
|
icon: "info",
|
||||||
text: "Create",
|
buttons: {
|
||||||
closeModal: false,
|
cancel: true,
|
||||||
className: "swal-button",
|
create: {
|
||||||
|
text: "Create",
|
||||||
|
closeModal: false,
|
||||||
|
className: "swal-button",
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
})
|
.then((willCreate) => {
|
||||||
.then((willCreate) => {
|
if (willCreate) {
|
||||||
if (willCreate) {
|
var data = new FormData();
|
||||||
var data = new FormData();
|
data.append('name', name);
|
||||||
data.append('name', name);
|
data.append('cores', cores);
|
||||||
data.append('cores', cores);
|
data.append('mem', mem);
|
||||||
data.append('mem', mem);
|
data.append('disk', disk);
|
||||||
data.append('disk', disk);
|
data.append('iso', iso);
|
||||||
data.append('iso', iso);
|
fetch('/proxstar/vm/create', {
|
||||||
fetch('/proxstar/vm/create', {
|
credentials: 'same-origin',
|
||||||
credentials: 'same-origin',
|
method: 'post',
|
||||||
method: 'post',
|
body: data
|
||||||
body: data
|
}).then((response) => {
|
||||||
}).then((response) => {
|
return response.text()
|
||||||
return response.text()
|
}).then((vmid) => {
|
||||||
}).then((vmid) => {
|
window.location = `/proxstar/vm/${vmid}`;
|
||||||
window.location = `/proxstar/vm/${vmid}`;
|
});
|
||||||
});
|
}
|
||||||
}
|
});
|
||||||
});
|
} else if (text == 'invalid') {
|
||||||
} else if (text == 'invalid') {
|
swal("Uh oh...", `That name is not a valid name! Please try another name.`, "error");
|
||||||
swal("Uh oh...", `That name is not a valid name! Please try another name.`, "error");
|
} else if (text == 'taken') {
|
||||||
} else if (text == 'taken') {
|
swal("Uh oh...", `That name is not available! Please try another name.`, "error");
|
||||||
swal("Uh oh...", `That name is not available! Please try another name.`, "error");
|
}
|
||||||
}
|
}).catch(err => {
|
||||||
}).catch(err => {
|
if (err) {
|
||||||
if (err) {
|
swal("Uh oh...", `Unable to verify name! Please try again later.`, "error");
|
||||||
swal("Uh oh...", `Unable to verify name. Please try again later.`, "error");
|
} else {
|
||||||
} else {
|
swal.stopLoading();
|
||||||
swal.stopLoading();
|
swal.close();
|
||||||
swal.close();
|
}
|
||||||
}
|
});
|
||||||
});
|
}
|
||||||
} else if (!name && !disk) {
|
} else if (!name && !disk) {
|
||||||
swal("Uh oh...", `You must enter a name and disk size for your VM!`, "error");
|
swal("Uh oh...", `You must enter a name and disk size for your VM!`, "error");
|
||||||
} else if (!name) {
|
} else if (!name) {
|
||||||
|
|
|
@ -9,12 +9,8 @@
|
||||||
<h3 class="panel-title">Create VM</h3>
|
<h3 class="panel-title">Create VM</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
{% if full_limits %}
|
{% if limits['disk'] - usage['disk'] <= 0 %}
|
||||||
<p>You have reached your limit for the following resources:</p>
|
<p>Before you can create any more VMs, you must first delete existing VMs until you have enough disk resources available.</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>
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="name">VM Name</label>
|
<label for="name">VM Name</label>
|
||||||
|
@ -23,7 +19,7 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="cores">Cores</label>
|
<label for="cores">Cores</label>
|
||||||
<select name="cores" id="cores" class="form-control">
|
<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>
|
<option value="{{ i }}">{{ i }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
|
@ -31,14 +27,14 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="mem">Memory</label>
|
<label for="mem">Memory</label>
|
||||||
<select name="mem" id="mem" class="form-control">
|
<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>
|
<option value="{{ i * 1024 }}">{{ i }}GB</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="disk">Disk</label>
|
<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>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="iso">ISO</label>
|
<label for="iso">ISO</label>
|
||||||
|
@ -49,7 +45,7 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</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 %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue