From 7fd726f03f2e012d45b5b727f3cf2fa1469bb427 Mon Sep 17 00:00:00 2001 From: codefiles <11915375+codefiles@users.noreply.github.com> Date: Wed, 20 Nov 2024 18:50:43 -0500 Subject: [PATCH] Fix log disk states (#2902) --- archinstall/__init__.py | 2 +- archinstall/lib/disk/device_handler.py | 11 +++++------ archinstall/lib/disk/device_model.py | 24 ++++++++++++------------ archinstall/scripts/guided.py | 2 +- archinstall/scripts/only_hd.py | 2 +- archinstall/scripts/swiss.py | 2 +- examples/interactive_installation.py | 2 +- examples/only_hd_installation.py | 2 +- 8 files changed, 23 insertions(+), 24 deletions(-) diff --git a/archinstall/__init__.py b/archinstall/__init__.py index cee7c90f..08ccd473 100644 --- a/archinstall/__init__.py +++ b/archinstall/__init__.py @@ -54,7 +54,7 @@ debug(f"Virtualization detected: {SysInfo.virtualization()}; is VM: {SysInfo.is_ debug(f"Graphics devices detected: {SysInfo._graphics_devices().keys()}") # For support reasons, we'll log the disk layout pre installation to match against post-installation layout -debug(f"Disk states before installing: {disk.disk_layouts()}") +debug(f"Disk states before installing:\n{disk.disk_layouts()}") parser = ArgumentParser() diff --git a/archinstall/lib/disk/device_handler.py b/archinstall/lib/disk/device_handler.py index 47708634..e3f1e6f2 100644 --- a/archinstall/lib/disk/device_handler.py +++ b/archinstall/lib/disk/device_handler.py @@ -11,7 +11,7 @@ from typing import Any, Literal from parted import Device, Disk, DiskException, FileSystem, Geometry, IOException, Partition, PartitionException, freshDisk, getAllDevices, getDevice, newDisk from ..exceptions import DiskError, UnknownFilesystemFormat -from ..general import JSON, SysCallError, SysCommand, SysCommandWorker +from ..general import SysCallError, SysCommand, SysCommandWorker from ..luks import Luks2 from ..output import debug, error, info, log, warn from ..utils.util import is_subpath @@ -42,6 +42,7 @@ from .device_model import ( find_lsblk_info, get_all_lsblk_info, get_lsblk_info, + get_lsblk_output, ) @@ -843,11 +844,9 @@ device_handler = DeviceHandler() def disk_layouts() -> str: try: - lsblk_info = get_all_lsblk_info() - return json.dumps(lsblk_info, indent=4, sort_keys=True, cls=JSON) + lsblk_output = get_lsblk_output() except SysCallError as err: warn(f"Could not return disk layouts: {err}") return '' - except json.decoder.JSONDecodeError as err: - warn(f"Could not return disk layouts: {err}") - return '' + + return lsblk_output.model_dump_json(indent=4) diff --git a/archinstall/lib/disk/device_model.py b/archinstall/lib/disk/device_model.py index 779a528d..907bbfd6 100644 --- a/archinstall/lib/disk/device_model.py +++ b/archinstall/lib/disk/device_model.py @@ -1,6 +1,5 @@ from __future__ import annotations -import json import math import uuid from dataclasses import dataclass, field @@ -14,7 +13,7 @@ from pydantic import BaseModel, Field, ValidationInfo, field_serializer, field_v from ..exceptions import DiskError, SysCallError from ..general import SysCommand -from ..output import debug, error +from ..output import debug from ..storage import storage if TYPE_CHECKING: @@ -1402,7 +1401,7 @@ def _fetch_lsblk_info( dev_path: Path | str | None = None, reverse: bool = False, full_dev_path: bool = False -) -> list[LsblkInfo]: +) -> LsblkOutput: cmd = ['lsblk', '--json', '--bytes', '--output', ','.join(LsblkInfo.fields())] if reverse: @@ -1427,13 +1426,8 @@ def _fetch_lsblk_info( raise err - try: - data = json.loads(worker.output(remove_cr=False)) - except json.decoder.JSONDecodeError as err: - error(f"Could not decode lsblk JSON:\n{worker.output().decode().rstrip()}") - raise err - - return LsblkOutput(**data).blockdevices + output = worker.output(remove_cr=False) + return LsblkOutput.parse_raw(output) def get_lsblk_info( @@ -1441,13 +1435,19 @@ def get_lsblk_info( reverse: bool = False, full_dev_path: bool = False ) -> LsblkInfo: - if infos := _fetch_lsblk_info(dev_path, reverse=reverse, full_dev_path=full_dev_path): - return infos[0] + infos = _fetch_lsblk_info(dev_path, reverse=reverse, full_dev_path=full_dev_path) + + if infos.blockdevices: + return infos.blockdevices[0] raise DiskError(f'lsblk failed to retrieve information for "{dev_path}"') def get_all_lsblk_info() -> list[LsblkInfo]: + return _fetch_lsblk_info().blockdevices + + +def get_lsblk_output() -> LsblkOutput: return _fetch_lsblk_info() diff --git a/archinstall/scripts/guided.py b/archinstall/scripts/guided.py index 9737e587..054b8d7f 100644 --- a/archinstall/scripts/guided.py +++ b/archinstall/scripts/guided.py @@ -154,7 +154,7 @@ def perform_installation(mountpoint: Path) -> None: except: pass - debug(f"Disk states after installing: {disk.disk_layouts()}") + debug(f"Disk states after installing:\n{disk.disk_layouts()}") def guided() -> None: diff --git a/archinstall/scripts/only_hd.py b/archinstall/scripts/only_hd.py index ce2d541a..b0fbe891 100644 --- a/archinstall/scripts/only_hd.py +++ b/archinstall/scripts/only_hd.py @@ -50,7 +50,7 @@ def perform_installation(mountpoint: Path) -> None: target.parent.mkdir(parents=True) # For support reasons, we'll log the disk layout post installation (crash or no crash) - debug(f"Disk states after installing: {disk.disk_layouts()}") + debug(f"Disk states after installing:\n{disk.disk_layouts()}") def only_hd() -> None: diff --git a/archinstall/scripts/swiss.py b/archinstall/scripts/swiss.py index 19120878..e4e7c1ab 100644 --- a/archinstall/scripts/swiss.py +++ b/archinstall/scripts/swiss.py @@ -228,7 +228,7 @@ def perform_installation(mountpoint: Path, exec_mode: ExecutionMode) -> None: except: pass - debug(f"Disk states after installing: {disk.disk_layouts()}") + debug(f"Disk states after installing:\n{disk.disk_layouts()}") def swiss() -> None: diff --git a/examples/interactive_installation.py b/examples/interactive_installation.py index b4fc96b1..e159ad33 100644 --- a/examples/interactive_installation.py +++ b/examples/interactive_installation.py @@ -154,7 +154,7 @@ def perform_installation(mountpoint: Path) -> None: except: pass - debug(f"Disk states after installing: {disk.disk_layouts()}") + debug(f"Disk states after installing:\n{disk.disk_layouts()}") def _guided() -> None: diff --git a/examples/only_hd_installation.py b/examples/only_hd_installation.py index 12459cda..b6de06ef 100644 --- a/examples/only_hd_installation.py +++ b/examples/only_hd_installation.py @@ -50,7 +50,7 @@ def perform_installation(mountpoint: Path) -> None: target.parent.mkdir(parents=True) # For support reasons, we'll log the disk layout post installation (crash or no crash) - debug(f"Disk states after installing: {disk.disk_layouts()}") + debug(f"Disk states after installing:\n{disk.disk_layouts()}") def _only_hd() -> None: