Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion proxstar/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,7 @@ def boot_order(vmid):
def create():
user = User(session['userinfo']['preferred_username'])
proxmox = connect_proxmox()
if user.active:
if user.active or user.rtp:
if request.method == 'GET':
isos = get_isos(proxmox, app.config['PROXMOX_ISO_STORAGE'])
pools = get_pools(proxmox, db)
Expand Down
4 changes: 2 additions & 2 deletions proxstar/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,8 +192,8 @@ def delete_allowed_user(db, user):

def set_template_info(db, template_id, name, disk):
if db.query(exists().where(Template.id == template_id, )).scalar():
template = db.query(Template).filter(Template.id == template_id,
).one()
template = db.query(Template).filter(
Template.id == template_id, ).one()
template.name = name
template.disk = disk
db.commit()
176 changes: 24 additions & 152 deletions proxstar/static/js/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,199 +4,71 @@ $(document).ready(function(){
$('[data-toggle="tooltip"]').tooltip();
});

$("#delete-vm").click(function(){
const vmname = $(this).data('vmname');
function confirmDialog(url, confirm, confirmButton, complete, error, location) {
swal({
title: `Are you sure you want to delete ${vmname}?`,
title: confirm,
icon: "warning",
buttons: {
cancel: true,
delete: {
text: "Delete",
action: {
text: confirmButton,
closeModal: false,
className: "swal-button--danger",
}
},
dangerMode: true,
})
.then((willDelete) => {
if (willDelete) {
const vmid = $(this).data('vmid');
fetch(`/vm/${vmid}/delete`, {
.then((willComplete) => {
if (willComplete) {
fetch(url, {
credentials: 'same-origin',
method: 'post'
}).then((response) => {
return swal(`${vmname} is now being deleted.`, {
return swal(complete, {
icon: "success",
});
}).then(() => {
window.location = "/";
window.location = location;
}).catch(err => {
if (err) {
swal("Uh oh...", `Unable to delete ${vmname}. Please try again later.`, "error");
swal("Uh oh...", error, "error");
} else {
swal.stopLoading();
swal.close();
}
});
}
});
}

$("#delete-vm").click(function(){
const vmname = $(this).data('vmname');
const vmid = $(this).data('vmid')
confirmDialog(`/vm/${vmid}/delete`, `Are you sure you want to delete ${vmname}?`, "Delete", `${vmname} is now being deleted.`, `Unable to delete ${vmname}. Please try again later.`, '/')
});

$("#stop-vm").click(function(){
const vmname = $(this).data('vmname');
swal({
title: `Are you sure you want to stop ${vmname}?`,
icon: "warning",
buttons: {
cancel: true,
delete: {
text: "Stop",
closeModal: false,
className: "swal-button--danger",
}
},
dangerMode: true,
})
.then((willStop) => {
if (willStop) {
const vmid = $(this).data('vmid')
fetch(`/vm/${vmid}/power/stop`, {
credentials: 'same-origin',
method: 'post'
}).then((response) => {
return swal(`${vmname} is now stopping!`, {
icon: "success",
});
}).then(() => {
window.location = `/vm/${vmid}`;
}).catch(err => {
if (err) {
swal("Uh oh...", `Unable to stop ${vmname}. Please try again later.`, "error");
} else {
swal.stopLoading();
swal.close();
}
});
}
});
const vmid = $(this).data('vmid')
confirmDialog(`/vm/${vmid}/power/stop`, `Are you sure you want to stop ${vmname}?`, "Stop", `${vmname} is now stopping!`, `Unable to stop ${vmname}. Please try again later.`, `/vm/${vmid}`)
});

$("#reset-vm").click(function(){
const vmname = $(this).data('vmname');
swal({
title: `Are you sure you want to reset ${vmname}?`,
icon: "warning",
buttons: {
cancel: true,
delete: {
text: "Reset",
closeModal: false,
className: "swal-button--danger",
}
},
dangerMode: true,
})
.then((willReset) => {
if (willReset) {
const vmid = $(this).data('vmid');
fetch(`/vm/${vmid}/power/reset`, {
credentials: 'same-origin',
method: 'post'
}).then((response) => {
return swal(`${vmname} is now resetting!`, {
icon: "success",
});
}).then(() => {
window.location = `/vm/${vmid}`;
}).catch(err => {
if (err) {
swal("Uh oh...", `Unable to reset ${vmname}. Please try again later.`, "error");
} else {
swal.stopLoading();
swal.close();
}
});
}
});
const vmid = $(this).data('vmid')
confirmDialog(`/vm/${vmid}/power/reset`, `Are you sure you want to reset ${vmname}?`, "Reset", `${vmname} is now resetting!`, `Unable to reset ${vmname}. Please try again later.`, `/vm/${vmid}`)
});

$("#shutdown-vm").click(function(){
const vmname = $(this).data('vmname');
swal({
title: `Are you sure you want to shutdown ${vmname}?`,
icon: "warning",
buttons: {
cancel: true,
delete: {
text: "Shutdown",
closeModal: false,
className: "swal-button--danger",
}
},
dangerMode: true,
})
.then((willShutdown) => {
if (willShutdown) {
const vmid = $(this).data('vmid');
fetch(`/vm/${vmid}/power/shutdown`, {
credentials: 'same-origin',
method: 'post'
}).then((response) => {
return swal(`${vmname} is now shutting down!`, {
icon: "success",
});
}).then(() => {
window.location = `/vm/${vmid}`;
}).catch(err => {
if (err) {
swal("Uh oh...", `Unable to shutdown ${vmname}. Please try again later.`, "error");
} else {
swal.stopLoading();
swal.close();
}
});
}
});
const vmid = $(this).data('vmid')
confirmDialog(`/vm/${vmid}/power/shutdown`, `Are you sure you want to shutdown ${vmname}?`, "Shutdown", `${vmname} is now shutting down!`, `Unable to shutdown ${vmname}. Please try again later.`, `/vm/${vmid}`)
});

$("#suspend-vm").click(function(){
const vmname = $(this).data('vmname');
swal({
title: `Are you sure you want to suspend ${vmname}?`,
icon: "warning",
buttons: {
cancel: true,
delete: {
text: "Suspend",
closeModal: false,
className: "swal-button--danger",
}
},
dangerMode: true,
})
.then((willSuspend) => {
if (willSuspend) {
const vmid = $(this).data('vmid');
fetch(`/vm/${vmid}/power/suspend`, {
credentials: 'same-origin',
method: 'post'
}).then((response) => {
return swal(`${vmname} is now suspending!`, {
icon: "success",
});
}).then(() => {
window.location = `/vm/${vmid}`;
}).catch(err => {
if (err) {
swal("Uh oh...", `Unable to suspend ${vmname}. Please try again later.`, "error");
} else {
swal.stopLoading();
swal.close();
}
});
}
});
const vmid = $(this).data('vmid')
confirmDialog(`/vm/${vmid}/power/suspend`, `Are you sure you want to suspend ${vmname}?`, "Suspend", `${vmname} is now suspending!`, `Unable to suspend ${vmname}. Please try again later.`, `/vm/${vmid}`)
});

$("#start-vm").click(function(){
Expand Down
5 changes: 2 additions & 3 deletions proxstar/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,11 +93,10 @@ def process_expiring_vms_task():
expiring_vms.append([vm.id, vm.name, days])
if days <= 0:
expired_vms.append([vm.id, vm.name, days])
if days <= 0:
vm.stop()
elif days == -7:
elif days <= -7:
print(
"Deleting {} ({}) as it has been a week since expiration.".
"Deleting {} ({}) as it has been at least a week since expiration.".
format(vm.name, vm.id))
send_stop_ssh_tunnel(vm.id)
delete_vm_task(vm.id)
Expand Down
2 changes: 1 addition & 1 deletion proxstar/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav mr-auto">
{% if user.active %}
{% if user.active or user.rtp %}
<li class="nav-item navbar-user dropdown">
<a class="nav-link" href="/">
<i class="fas fa-th-list"></i>
Expand Down
8 changes: 4 additions & 4 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
flask
flask_pyoidc
git+https://github.com/merinos/proxmoxer.git@python3#egg=bad01313d9f32a239882195325b21767a25f72e0
flask_pyoidc==1.3.0
proxmoxer
psycopg2-binary
sqlalchemy
python-dateutil
csh_ldap==2.0.1
csh_ldap
rq
rq-scheduler==0.7.0
rq-scheduler
gunicorn
raven
paramiko
Expand Down