From 1497e500cb0a11689796cfb2fd4aabeb89f72b58 Mon Sep 17 00:00:00 2001 From: Javier Hernandez Date: Fri, 22 Dec 2023 12:08:49 +0100 Subject: Warn if clients have different boot modes Show user, when attempting to change the bootmode of more than one client with different boot modes, a warning and a table with said bootmodes. --- ogcp/templates/actions/mode.html | 26 ++++++++++++++++++++++++++ ogcp/views.py | 16 +++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/ogcp/templates/actions/mode.html b/ogcp/templates/actions/mode.html index 131097a..87ce59d 100644 --- a/ogcp/templates/actions/mode.html +++ b/ogcp/templates/actions/mode.html @@ -15,6 +15,32 @@ {{ _('Changing boot mode of %(ip_count)d computer(s)', ip_count=ip_count) }} +{% if modes_set|length > 1 %} +

WARNING

+

Selected clients have different boot modes set

+ + + + + + + + + + {% for mode, clients in modes_set.items() %} + + + + + {% endfor %} + +
Boot modesClients
{{mode}} + {% for client in clients %} + {{client}} + {% endfor %} +
+{% endif %} + {{ macros.cmd_selected_clients(selected_clients) }} {{ wtf.quick_form(form, diff --git a/ogcp/views.py b/ogcp/views.py index 9a88bbc..ba9f1a3 100644 --- a/ogcp/views.py +++ b/ogcp/views.py @@ -1172,6 +1172,19 @@ def action_client_delete(): else: return redirect(url_for('scopes')) +def get_clients_modes(ips, server): + modes = {} + for ip in ips: + r = server.get('/client/info', payload={"client": [ip]}) + resp = r.json() + current_boot = resp['boot'] + client_name = resp['name'] + if current_boot not in modes: + modes[current_boot] = [client_name] + else: + modes[current_boot].append(client_name) + return modes + @app.route('/action/mode', methods=['GET', 'POST']) @login_required def action_mode(): @@ -1195,6 +1208,7 @@ def action_mode(): return redirect(url_for('commands')) server = get_server_from_clients(ips) + modes_set = get_clients_modes(ips, server) r = server.get('/mode') available_modes = [(mode, mode) for mode in r.json()['modes']] form.boot.choices = list(available_modes) @@ -1204,7 +1218,7 @@ def action_mode(): selected_clients = list(get_selected_clients(scopes['scope']).items()) return render_template('actions/mode.html', form=form, scopes=scopes, selected_clients=selected_clients, - clients=clients) + clients=clients, modes_set=modes_set) @app.route('/action/oglive', methods=['GET', 'POST']) -- cgit v1.2.3-18-g5258