summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJavier Hernandez <jhernandez@soleta.eu>2024-01-30 11:20:56 +0100
committerOpenGnSys Support Team <soporte-og@soleta.eu>2024-01-30 11:29:57 +0100
commit556e06cc3d159c9b1b207a55d3f35f7d0ba048c6 (patch)
tree763a52e6f49bc9cfc4e0ca4e6778c19c57aa64fe
parent5892d5c8c37ff412863afe2c9c6985f32276caf2 (diff)
Add list images action
Add list images action that shows a list of all the images in each server and their properties
-rw-r--r--ogcp/templates/actions/list_images.html41
-rw-r--r--ogcp/templates/images.html2
-rw-r--r--ogcp/views.py25
3 files changed, 68 insertions, 0 deletions
diff --git a/ogcp/templates/actions/list_images.html b/ogcp/templates/actions/list_images.html
new file mode 100644
index 0000000..e2f5633
--- /dev/null
+++ b/ogcp/templates/actions/list_images.html
@@ -0,0 +1,41 @@
+{% extends 'images.html' %}
+{% import "bootstrap/wtf.html" as wtf %}
+
+{% set btn_back = true %}
+
+{% block content %}
+
+<h1 class="m-5">{{_('List images')}}</h1>
+{% for r in responses %}
+ {% set server = r['server']['name']%}
+ {% set repos = r['repos'] %}
+ {% for repo in repos.values() %}
+ {% set repo_name = repo['name'] %}
+ {% set images = repo['images'] %}
+ {% if images %}
+ {{ repo_name }} ({{ server }})
+ <table class="table table-hover">
+ <thead class="thead-light">
+ <tr>
+ <th>Name</th>
+ <th>Size (MiB)</th>
+ <th>Datasize (MiB)</th>
+ <th>Last update</th>
+ </tr>
+ </thead>
+ <tbody class="text-left">
+ {% for img in images %}
+ <tr>
+ <th>{{img['name']}}</th>
+ <td>{{img['size'] / 1024 ** 2}}</td>
+ <td>{{img['datasize'] / 1024 ** 2}}</td>
+ <td>{{img['modified']}}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ {% endif %}
+ {% endfor %}
+{% endfor %}
+
+{% endblock %}
diff --git a/ogcp/templates/images.html b/ogcp/templates/images.html
index 2a50d39..c0b4359 100644
--- a/ogcp/templates/images.html
+++ b/ogcp/templates/images.html
@@ -60,6 +60,8 @@
{% block commands %}
<input class="btn btn-light" type="submit" value="{{ _('Image details') }}"
form="imagesForm" formaction="{{ url_for('action_image_info') }}" formmethod="get">
+ <input class="btn btn-light" type="submit" value="{{ _('List images') }}"
+ form="imagesForm" formaction="{{ url_for('action_image_list') }}" formmethod="get">
<input class="btn btn-light" type="submit" value="{{ _('Delete image') }}"
form="imagesForm" formaction="{{ url_for('action_image_delete') }}" formmethod="get">
{% if btn_back %}
diff --git a/ogcp/views.py b/ogcp/views.py
index f6f1fb7..fa6ebc2 100644
--- a/ogcp/views.py
+++ b/ogcp/views.py
@@ -2504,6 +2504,31 @@ def user_delete_get():
return render_template('auth/delete_user.html', form=form)
+@app.route('/action/image/list', methods=['GET'])
+@login_required
+def action_image_list():
+ params = request.args.to_dict()
+ ids = parse_elements(params)
+ server = get_server_from_ip_port(params['image-server'])
+ r = server.get('/images')
+ if not r:
+ return ogserver_down('images')
+ if r.status_code != requests.codes.ok:
+ return ogserver_error('images')
+ tmp = r.json()['images']
+ images = []
+ for img in tmp:
+ if img['id'] in ids:
+ images.append(img)
+ try:
+ images = get_images_grouped_by_repos()
+ except ServerError:
+ return ogserver_down('images')
+ except ServerErrorCode:
+ return ogserver_error('images')
+ return render_template('actions/list_images.html',
+ responses=images)
+
@app.route('/user/delete', methods=['POST'])
@login_required
def user_delete_post():