forked from 3wordchant/capsul-flask
fine-tuning the create-capsul experience
This commit is contained in:
parent
321a46d77b
commit
e3a2e8eee4
@ -8,6 +8,8 @@ from flask import g
|
|||||||
from flask import request
|
from flask import request
|
||||||
from flask import session
|
from flask import session
|
||||||
from flask import render_template
|
from flask import render_template
|
||||||
|
from flask import redirect
|
||||||
|
from flask import url_for
|
||||||
from flask_mail import Message
|
from flask_mail import Message
|
||||||
from werkzeug.exceptions import abort
|
from werkzeug.exceptions import abort
|
||||||
from nanoid import generate
|
from nanoid import generate
|
||||||
@ -42,6 +44,9 @@ def double_check_capsul_address(id, ipv4):
|
|||||||
@account_required
|
@account_required
|
||||||
def index():
|
def index():
|
||||||
vms = get_vms()
|
vms = get_vms()
|
||||||
|
created = request.args.get('created')
|
||||||
|
if not re.match(r"^(cvm|capsul)-[a-z0-9]{10}$", created):
|
||||||
|
created = '___________'
|
||||||
|
|
||||||
# for now we are going to check the IP according to the virt model
|
# for now we are going to check the IP according to the virt model
|
||||||
# on every request. this could be done by a background job and cached later on...
|
# on every request. this could be done by a background job and cached later on...
|
||||||
@ -60,7 +65,7 @@ def index():
|
|||||||
list(filter(lambda x: not x['deleted'], vms))
|
list(filter(lambda x: not x['deleted'], vms))
|
||||||
))
|
))
|
||||||
|
|
||||||
return render_template("capsuls.html", vms=vms, has_vms=len(vms) > 0)
|
return render_template("capsuls.html", vms=vms, has_vms=len(vms) > 0, created=created)
|
||||||
|
|
||||||
@bp.route("/<string:id>", methods=("GET", "POST"))
|
@bp.route("/<string:id>", methods=("GET", "POST"))
|
||||||
@account_required
|
@account_required
|
||||||
@ -111,7 +116,6 @@ def create():
|
|||||||
account_balance = get_account_balance(get_vms(), get_payments(), datetime.utcnow())
|
account_balance = get_account_balance(get_vms(), get_payments(), datetime.utcnow())
|
||||||
capacity_avaliable = current_app.config["VIRTUALIZATION_MODEL"].capacity_avaliable(512*1024*1024)
|
capacity_avaliable = current_app.config["VIRTUALIZATION_MODEL"].capacity_avaliable(512*1024*1024)
|
||||||
errors = list()
|
errors = list()
|
||||||
created_os = None
|
|
||||||
|
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
|
|
||||||
@ -172,7 +176,8 @@ def create():
|
|||||||
memory_mb=vm_sizes[size]['memory_mb'],
|
memory_mb=vm_sizes[size]['memory_mb'],
|
||||||
ssh_public_keys=list(map(lambda x: x["content"], posted_keys))
|
ssh_public_keys=list(map(lambda x: x["content"], posted_keys))
|
||||||
)
|
)
|
||||||
created_os = os
|
|
||||||
|
return redirect(f"{url_for('console.index')}?created={id}")
|
||||||
|
|
||||||
affordable_vm_sizes = dict()
|
affordable_vm_sizes = dict()
|
||||||
for key, vm_size in vm_sizes.items():
|
for key, vm_size in vm_sizes.items():
|
||||||
@ -187,7 +192,6 @@ def create():
|
|||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"create-capsul.html",
|
"create-capsul.html",
|
||||||
created_os=created_os,
|
|
||||||
capacity_avaliable=capacity_avaliable,
|
capacity_avaliable=capacity_avaliable,
|
||||||
account_balance=format(account_balance, '.2f'),
|
account_balance=format(account_balance, '.2f'),
|
||||||
ssh_public_keys=ssh_public_keys,
|
ssh_public_keys=ssh_public_keys,
|
||||||
|
@ -45,6 +45,15 @@ a:hover, a:active, a:visited {
|
|||||||
padding: 1em;
|
padding: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.flash.green {
|
||||||
|
color: rgb(8, 173, 137);
|
||||||
|
border-color: rgb(8, 173, 137);
|
||||||
|
}
|
||||||
|
|
||||||
|
.display-none {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
h1, h2, h3, h4, h5 {
|
h1, h2, h3, h4, h5 {
|
||||||
font-size:calc(0.40rem + 1vmin);
|
font-size:calc(0.40rem + 1vmin);
|
||||||
margin: initial;
|
margin: initial;
|
||||||
@ -63,6 +72,8 @@ main {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.full-margin {
|
.full-margin {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 3rem 0;
|
margin: 3rem 0;
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
{% for message in get_flashed_messages() %}
|
{% for message in get_flashed_messages() %}
|
||||||
<div class="flash">{{ message }}</div>
|
<div class="flash">{{ message }}</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
{% block custom_flash %}{% endblock %}
|
||||||
<main>
|
<main>
|
||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
</main>
|
</main>
|
||||||
|
@ -2,6 +2,12 @@
|
|||||||
|
|
||||||
{% block title %}Capsuls{% endblock %}
|
{% block title %}Capsuls{% endblock %}
|
||||||
|
|
||||||
|
{% block custom_flash %}
|
||||||
|
{% if created %}
|
||||||
|
<div class="flash green">{{ created }} successfully created!</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row third-margin">
|
<div class="row third-margin">
|
||||||
<h1>Capsuls</h1>
|
<h1>Capsuls</h1>
|
||||||
|
@ -6,21 +6,10 @@
|
|||||||
<div class="row third-margin">
|
<div class="row third-margin">
|
||||||
<h1>Create Capsul</h1>
|
<h1>Create Capsul</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="row third-margin"><div>
|
<div class="row third-margin">
|
||||||
|
<div>
|
||||||
|
|
||||||
|
|
||||||
{% if created_os %}
|
|
||||||
<p>
|
|
||||||
Your Capsul was successfully created! You should already see it listed on the
|
|
||||||
<a href="/console/">Capsuls page</a>, but it may not have obtained an IP address yet.
|
|
||||||
Its IP address should become visible once the machine has booted and taken a DHCP lease.
|
|
||||||
</p>
|
|
||||||
{% if created_os == 'debian10' %}
|
|
||||||
<p>
|
|
||||||
Note: because Debian delays fully booting until after entropy has been generated, Debian Capsuls
|
|
||||||
may take an extra-long time to obtain an IP address, like up to 10 minutes. Be patient.
|
|
||||||
</p>
|
|
||||||
{% endif %}
|
|
||||||
{% else %}
|
|
||||||
{% if cant_afford %}
|
{% if cant_afford %}
|
||||||
<p>
|
<p>
|
||||||
Your account does not have sufficient funds to create a Capsul.
|
Your account does not have sufficient funds to create a Capsul.
|
||||||
@ -79,14 +68,24 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-end">
|
<div class="row justify-end">
|
||||||
<input type="submit" value="Create">
|
<input id="submit-button" type="submit" value="Create">
|
||||||
|
<span id="submit-button-clicked" class="display-none">..Creating...</span>
|
||||||
</div>
|
</div>
|
||||||
|
<script>
|
||||||
|
window.addEventListener('DOMContentLoaded', function(event) {
|
||||||
|
var submitButton = document.getElementById('submit-button');
|
||||||
|
var submitButtonClicked = document.getElementById('submit-button-clicked');
|
||||||
|
document.getElementById('submit-button').onclick = function() {
|
||||||
|
submitButton.className = "display-none";
|
||||||
|
submitButtonClicked.className = "waiting-pulse";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% endif %}
|
</div>
|
||||||
</div></div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block subcontent %}
|
{% block subcontent %}
|
||||||
|
Loading…
Reference in New Issue
Block a user