Adds confirmation page to reboot clients

This commit adds an extra view to ensure users do not reboot clients
accidentally.

ogcp GET /reboot returns the confirmation page and POST /reboot
builds and sends the request to ogServer.

It also includes Spanish translation of the new strings.
multi-ogserver
Javier Sánchez Parra 2022-01-20 13:26:43 +01:00 committed by soleta
parent ddd4629571
commit b566528012
4 changed files with 75 additions and 23 deletions

View File

@ -0,0 +1,25 @@
{% extends 'commands.html' %}
{% import "bootstrap/wtf.html" as wtf %}
{% block content %}
{% set ip_list = form.ips.data.split(' ') %}
{% set ip_count = ip_list | length %}
<h1 class="m-5">
{{ _('Reboot %(ip_count)d client(s)', ip_count=ip_count) }}
</h1>
<ul class="list-group mx-5 list-group-horizontal-sm">
{% for ip in ip_list %}
<li class="list-group-item flex-fill list-group-item-info">{{ ip }}</li>
{% endfor %}
</ul>
{{ wtf.quick_form(form,
action=url_for('action_reboot'),
method='post',
button_map={'submit': 'primary'},
extra_classes="mx-5") }}
{% endblock %}

View File

@ -21,7 +21,7 @@
<input class="btn btn-light" type="submit" value="{{ _('Power off') }}"
form="scopesForm" formaction="{{ url_for('action_poweroff') }}" formmethod="get">
<input class="btn btn-light" type="submit" value="{{ _('Reboot') }}"
form="scopesForm" formaction="{{ url_for('action_reboot') }}" formmethod="post">
form="scopesForm" formaction="{{ url_for('action_reboot') }}" formmethod="get">
<input class="btn btn-light" type="submit" value="{{ _('Refresh') }}"
form="scopesForm" formaction="{{ url_for('action_refresh') }}" formmethod="post">
<input class="btn btn-light" type="submit" value="{{ _('Hardware') }}"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 1.0.0\n"
"Report-Msgid-Bugs-To: opengnsys@soleta.eu\n"
"POT-Creation-Date: 2022-01-20 12:35+0100\n"
"POT-Creation-Date: 2022-01-20 13:33+0100\n"
"PO-Revision-Date: 2021-12-23 16:47+0100\n"
"Last-Translator: Soleta Networks <opengnsys@soleta.eu>\n"
"Language: es\n"
@ -94,47 +94,55 @@ msgstr "OgServer respondió con el código de estado de error"
msgid "Client set ogLive request sent successfully"
msgstr "Solicitud de cambio de ogLive enviada con éxito"
#: views.py:806 views.py:821 views.py:953
#: views.py:808
msgid "ogServer: error rebooting client"
msgstr "ogServer: error al reiniciar cliente"
#: views.py:811
msgid "Client rebooted successfully"
msgstr "Cliente reiniciado con éxito"
#: views.py:835 views.py:967
msgid "OgServer replied with a non ok status code"
msgstr "OgServer respondió con un código de estado de error"
#: views.py:808 views.py:823
#: views.py:837
msgid "Refresh request processed successfully"
msgstr "Solicitud de actualización procesada con éxito"
#: views.py:835
#: views.py:849
msgid "Server replied with error code when adding the center"
msgstr "El servidor respondió con el código de error al agregar el centro."
#: views.py:838
#: views.py:852
msgid "Center added successfully"
msgstr "Centro añadido con éxito"
#: views.py:851
#: views.py:865
msgid "Server replied with error code when deleting the center"
msgstr "El servidor respondió con el código de error al eliminar el centro"
#: views.py:854
#: views.py:868
msgid "Center deleted successfully"
msgstr "Centro eliminado con éxito"
#: views.py:873
#: views.py:887
msgid "Server replied with error code when adding the room"
msgstr "El servidor respondió con el código de error al agregar la sala."
#: views.py:875
#: views.py:889
msgid "Room added successfully"
msgstr "Sala añadida con éxito"
#: views.py:892
#: views.py:906
msgid "Server replied with error code when deleting the room"
msgstr "El servidor respondió con el código de error al eliminar la sala."
#: views.py:895
#: views.py:909
msgid "Room deleted successfully"
msgstr "Sala eliminada con éxito"
#: views.py:955
#: views.py:969
msgid "Delete client request processed successfully"
msgstr "Solicitud de eliminar cliente procesada con éxito"
@ -519,6 +527,11 @@ msgstr "Crear una imagen de partición"
msgid "Power off %(ip_count)d client(s)"
msgstr "Apaga %(ip_count)d cliente(s)"
#: templates/actions/reboot.html:9
#, python-format
msgid "Reboot %(ip_count)d client(s)"
msgstr "Reinicia %(ip_count)d cliente(s)"
#: templates/actions/setup.html:5
msgid "Partition and Format"
msgstr "Partición y formato"

View File

@ -793,20 +793,34 @@ def action_image_create():
form.os.choices.append((choice_value, choice_name))
return render_template('actions/image_create.html', form=form)
@app.route('/action/reboot', methods=['POST'])
@app.route('/action/reboot', methods=['GET', 'POST'])
@login_required
def action_reboot():
ips = parse_elements(request.form.to_dict())
if not validate_elements(ips):
return redirect(url_for('commands'))
form = GenericForm(request.form)
if request.method == 'POST':
ips = form.ips.data.split(' ')
if not validate_elements(ips):
return redirect(url_for('commands'))
payload = {'clients': list(ips)}
r = g.server.post('/reboot', payload)
if r.status_code != requests.codes.ok:
flash(_('OgServer replied with a non ok status code'), category='error')
payload = {'clients': ips}
r = g.server.post('/reboot', payload)
if r.status_code != requests.codes.ok:
flash(_('ogServer: error rebooting client'),
category='error')
else:
flash(_('Client rebooted successfully'),
category='info')
return redirect(url_for('commands'))
else:
flash(_('Refresh request processed successfully'), category='info')
return redirect(url_for('commands'))
ips = parse_elements(request.args.to_dict())
form.ips.data = " ".join(ips)
if validate_elements(ips):
scopes, clients = get_scopes(set(ips))
return render_template('actions/reboot.html', form=form,
scopes=scopes)
else:
return redirect(url_for('commands'))
@app.route('/action/refresh', methods=['POST'])
@login_required