diff options
author | Javier Hernandez <jhernandez@soleta.eu> | 2024-01-30 11:20:56 +0100 |
---|---|---|
committer | OpenGnSys Support Team <soporte-og@soleta.eu> | 2024-01-30 11:29:57 +0100 |
commit | 556e06cc3d159c9b1b207a55d3f35f7d0ba048c6 (patch) | |
tree | 763a52e6f49bc9cfc4e0ca4e6778c19c57aa64fe | |
parent | 5892d5c8c37ff412863afe2c9c6985f32276caf2 (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.html | 41 | ||||
-rw-r--r-- | ogcp/templates/images.html | 2 | ||||
-rw-r--r-- | ogcp/views.py | 25 |
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(): |