diff options
author | Alejandro Sirgo Rica <asirgo@soleta.eu> | 2024-05-09 14:21:19 +0200 |
---|---|---|
committer | Alejandro Sirgo Rica <asirgo@soleta.eu> | 2024-05-09 14:21:19 +0200 |
commit | 0ba0b933e2483434fab77c8130960af3901a6190 (patch) | |
tree | eadc24d479cb99a3f098dea77dc568284f37d52e /ogcp/views.py | |
parent | 30562a9af524da8cbd08592b74d788ce3a9405e1 (diff) |
views: check target partition size in image restore
Compare image data size with the size of the target partition and
show an error if the size is not enough for the operation.
Diffstat (limited to 'ogcp/views.py')
-rw-r--r-- | ogcp/views.py | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/ogcp/views.py b/ogcp/views.py index 3bbd933..fde7590 100644 --- a/ogcp/views.py +++ b/ogcp/views.py @@ -735,7 +735,7 @@ def action_image_restore(): form = ImageRestoreForm(request.form) if request.method == 'POST': ips = form.ips.data.split(' ') - disk, partition, part_code = form.partition.data.split(' ') + disk, partition, part_code, part_size = form.partition.data.split(' ') part_type = PART_TYPE_CODES.get(int(part_code), 'UNKNOWN') invalid_part_types = ['EMPTY', 'LINUX-SWAP', 'CACHE', 'EFI', 'WIN-RECOV'] @@ -756,6 +756,13 @@ def action_image_restore(): if not image: flash(_(f'Image to restore was not found'), category='error') return redirect(url_for('commands')) + + image_datasize = int(image['datasize']) + part_size = int(part_size) * 1024 + if image_datasize > part_size: + flash(_(f'The image size is bigger than the target partition'), category='error') + return redirect(url_for('commands')) + try: repository = get_repository(image['repo_id'], server) except ServerError: @@ -825,8 +832,9 @@ def action_image_restore(): continue part_code = partition['code'] filesystem = partition['filesystem'] + part_size = partition['size'] - choice_value = (disk_id, part_id, part_code, filesystem) + choice_value = (disk_id, part_id, part_code, filesystem, part_size) parts.append(choice_value) if not part_choices: # Use first computer as reference part setup conf @@ -836,11 +844,11 @@ def action_image_restore(): return redirect(url_for('commands')) form.partition.choices = [ - (f"{disk_id} {part_id} {part_code}", + (f"{disk_id} {part_id} {part_code} {part_size}", f"Disk {disk_id} | Partition {part_id} " f"| {PART_TYPE_CODES.get(part_code, 'UNKNOWN')} " f"{FS_CODES.get(filesystem, 'UNKNOWN')}") - for disk_id, part_id, part_code, filesystem in part_choices ] + for disk_id, part_id, part_code, filesystem, part_size in part_choices ] scopes, clients = get_scopes(set(ips)) selected_clients = list(get_selected_clients(scopes['scope']).items()) |