forked from 3wordchant/capsul-flask
first try at implementing the vm start and stop feature
This commit is contained in:
@ -34,7 +34,7 @@ def double_check_capsul_address(id, ipv4, get_ssh_host_keys):
|
||||
ipv4 = result.ipv4
|
||||
get_model().update_vm_ip(email=session["account"], id=id, ipv4=result.ipv4)
|
||||
|
||||
if result != None and result.ipv4 != None and get_ssh_host_keys:
|
||||
if result != None and result.ssh_host_keys != None and get_ssh_host_keys:
|
||||
get_model().update_vm_ssh_host_keys(email=session["account"], id=id, ssh_host_keys=result.ssh_host_keys)
|
||||
except:
|
||||
current_app.logger.error(f"""
|
||||
@ -62,11 +62,13 @@ def index():
|
||||
result = double_check_capsul_address(vm["id"], vm["ipv4"], False)
|
||||
if result is not None:
|
||||
vm["ipv4"] = result.ipv4
|
||||
vm["state"] = result.state
|
||||
|
||||
vms = list(map(
|
||||
lambda x: dict(
|
||||
id=x['id'],
|
||||
size=x['size'],
|
||||
state=x['state'],
|
||||
ipv4=(x['ipv4'] if x['ipv4'] else "..booting.."),
|
||||
ipv4_status=("ok" if x['ipv4'] else "waiting-pulse"),
|
||||
os=x['os'],
|
||||
@ -92,24 +94,58 @@ def detail(id):
|
||||
if vm['deleted']:
|
||||
return render_template("capsul-detail.html", vm=vm, delete=True, deleted=True)
|
||||
|
||||
vm["created"] = vm['created'].strftime("%b %d %Y %H:%M")
|
||||
vm["ssh_authorized_keys"] = ", ".join(vm["ssh_authorized_keys"]) if len(vm["ssh_authorized_keys"]) > 0 else "<missing>"
|
||||
|
||||
if request.method == "POST":
|
||||
if "csrf-token" not in request.form or request.form['csrf-token'] != session['csrf-token']:
|
||||
return abort(418, f"u want tea")
|
||||
|
||||
if 'are_you_sure' not in request.form or not request.form['are_you_sure']:
|
||||
return render_template(
|
||||
"capsul-detail.html",
|
||||
csrf_token = session["csrf-token"],
|
||||
vm=vm,
|
||||
delete=True,
|
||||
deleted=False
|
||||
)
|
||||
else:
|
||||
current_app.logger.info(f"deleting {vm['id']} per user request ({session['account']})")
|
||||
current_app.config["HUB_MODEL"].destroy(email=session['account'], id=id)
|
||||
get_model().delete_vm(email=session['account'], id=id)
|
||||
if 'action' not in request.form:
|
||||
return abort(400, "action is required")
|
||||
|
||||
if request.form['action'] == "start":
|
||||
current_app.config["HUB_MODEL"].vm_state_command(email=session['account'], id=id, command="start")
|
||||
|
||||
vm["state"] = "starting"
|
||||
return render_template("capsul-detail.html", vm=vm)
|
||||
elif request.form['action'] == "delete":
|
||||
if 'are_you_sure' not in request.form or not request.form['are_you_sure']:
|
||||
return render_template(
|
||||
"capsul-detail.html",
|
||||
csrf_token = session["csrf-token"],
|
||||
vm=vm,
|
||||
delete=True
|
||||
)
|
||||
else:
|
||||
current_app.logger.info(f"deleting {vm['id']} per user request ({session['account']})")
|
||||
current_app.config["HUB_MODEL"].destroy(email=session['account'], id=id)
|
||||
get_model().delete_vm(email=session['account'], id=id)
|
||||
|
||||
return render_template("capsul-detail.html", vm=vm, deleted=True)
|
||||
elif request.form['action'] == "force-stop":
|
||||
if 'are_you_sure' not in request.form or not request.form['are_you_sure']:
|
||||
return render_template(
|
||||
"capsul-detail.html",
|
||||
csrf_token = session["csrf-token"],
|
||||
vm=vm,
|
||||
force_stop=True,
|
||||
)
|
||||
else:
|
||||
current_app.logger.info(f"force stopping {vm['id']} per user request ({session['account']})")
|
||||
current_app.config["HUB_MODEL"].vm_state_command(email=session['account'], id=id, command="force-stop")
|
||||
|
||||
vm["state"] = "stopped"
|
||||
return render_template(
|
||||
"capsul-detail.html",
|
||||
csrf_token = session["csrf-token"],
|
||||
vm=vm,
|
||||
durations=list(map(lambda x: x.strip("_"), metric_durations.keys())),
|
||||
duration=duration
|
||||
)
|
||||
else:
|
||||
return abort(400, "action must be either delete, force-stop, or start")
|
||||
|
||||
return render_template("capsul-detail.html", vm=vm, delete=True, deleted=True)
|
||||
|
||||
else:
|
||||
needs_ssh_host_keys = "ssh_host_keys" not in vm or len(vm["ssh_host_keys"]) == 0
|
||||
@ -118,17 +154,17 @@ def detail(id):
|
||||
|
||||
if vm_from_virt_model is not None:
|
||||
vm["ipv4"] = vm_from_virt_model.ipv4
|
||||
vm["state"] = vm_from_virt_model.state
|
||||
if needs_ssh_host_keys:
|
||||
vm["ssh_host_keys"] = vm_from_virt_model.ssh_host_keys
|
||||
|
||||
vm["created"] = vm['created'].strftime("%b %d %Y %H:%M")
|
||||
vm["ssh_authorized_keys"] = ", ".join(vm["ssh_authorized_keys"]) if len(vm["ssh_authorized_keys"]) > 0 else "<missing>"
|
||||
|
||||
if vm["state"] == "running" and not vm["ipv4"]:
|
||||
vm["state"] = "starting"
|
||||
|
||||
return render_template(
|
||||
"capsul-detail.html",
|
||||
csrf_token = session["csrf-token"],
|
||||
vm=vm,
|
||||
delete=False,
|
||||
durations=list(map(lambda x: x.strip("_"), metric_durations.keys())),
|
||||
duration=duration
|
||||
)
|
||||
|
Reference in New Issue
Block a user