mirror of https://git.48k.eu/ogcp
Add boot mode to actions
This action is related to /mode in ogServer API. Allows changing the netboot template for a set of given clients, previously selected in the /scopes view.multi-ogserver
parent
e68eb7a3da
commit
20f88065bb
|
@ -76,6 +76,11 @@ class ClientDetailsForm(FlaskForm):
|
|||
boot = SelectField(label=_('Boot Mode'))
|
||||
create = SubmitField(label=_('Create'))
|
||||
|
||||
class BootModeForm(FlaskForm):
|
||||
ips = HiddenField()
|
||||
boot = SelectField(label=_('Boot mode'))
|
||||
ok = SubmitField(label=_('Ok'))
|
||||
|
||||
class ImageCreateForm(FlaskForm):
|
||||
ip = HiddenField()
|
||||
os = SelectField(label=_('OS'), choices=[])
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
{% extends 'base.html' %}
|
||||
{% import "bootstrap/wtf.html" as wtf %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{{ wtf.quick_form(form,
|
||||
action=url_for('action_mode'),
|
||||
method='post',
|
||||
button_map={'ok': 'primary'},
|
||||
extra_classes="m-5") }}
|
||||
|
||||
{% endblock %}
|
||||
|
|
@ -56,6 +56,8 @@
|
|||
formaction="{{ url_for('action_client_add') }}" formmethod="get">
|
||||
<input class="dropdown-item" type="submit" value="{{ _('Create image') }}"
|
||||
formaction="{{ url_for('action_image_create') }}" formmethod="get">
|
||||
<input class="dropdown-item" type="submit" value="{{ _('Set boot mode') }}"
|
||||
formaction="{{ url_for('action_mode') }}" formmethod="get">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
|
@ -3,7 +3,7 @@ from flask import (
|
|||
)
|
||||
from ogcp.forms.action_forms import (
|
||||
WOLForm, PartitionForm, ClientDetailsForm, HardwareForm, SessionForm,
|
||||
ImageRestoreForm, ImageCreateForm, SoftwareForm
|
||||
ImageRestoreForm, ImageCreateForm, SoftwareForm, BootModeForm
|
||||
)
|
||||
from ogcp.og_server import OGServer
|
||||
from flask_babel import _
|
||||
|
@ -439,6 +439,34 @@ def action_client_add():
|
|||
form.create.render_kw = {"formaction": url_for('action_client_add')}
|
||||
return render_template('actions/client_details.html', form=form)
|
||||
|
||||
@app.route('/action/mode', methods=['GET', 'POST'])
|
||||
def action_mode():
|
||||
form = BootModeForm(request.form)
|
||||
if request.method == 'POST':
|
||||
ips = form.ips.data.split(' ')
|
||||
payload = { 'clients': ips, 'mode': form.boot.data }
|
||||
print(payload)
|
||||
r = g.server.post('/mode', payload)
|
||||
if r.status_code == requests.codes.ok:
|
||||
flash(_('Client set boot mode request sent successfully'), category='info')
|
||||
else:
|
||||
flash(_('Ogserver replied with status code not ok'), category='error')
|
||||
return redirect(url_for("scopes"))
|
||||
|
||||
else:
|
||||
r = g.server.get('/mode')
|
||||
available_modes = [(mode, mode) for mode in r.json()['modes']]
|
||||
form.boot.choices = list(available_modes)
|
||||
|
||||
ips = parse_ips(request.args.to_dict())
|
||||
form.ips.data = " ".join(ips)
|
||||
if not validate_ips(ips):
|
||||
return redirect(url_for("scopes"))
|
||||
|
||||
form.ok.render_kw = { 'formaction': url_for('action_mode') }
|
||||
return render_template('actions/mode.html', form=form)
|
||||
|
||||
|
||||
@app.route('/action/image/create', methods=['GET', 'POST'])
|
||||
def action_image_create():
|
||||
form = ImageCreateForm(request.form)
|
||||
|
|
Loading…
Reference in New Issue