Skip to content

Add image installation disk-space validation helper#4598

Open
rameshraghupathy wants to merge 1 commit into
sonic-net:masterfrom
rameshraghupathy:min_free_disk_chk
Open

Add image installation disk-space validation helper#4598
rameshraghupathy wants to merge 1 commit into
sonic-net:masterfrom
rameshraghupathy:min_free_disk_chk

Conversation

@rameshraghupathy

Copy link
Copy Markdown
Contributor

Add reusable image installation disk-space validation helper

Problem:
SONiC image installation workflows currently do not validate free disk
space before starting installation. When disk space is insufficient,
installation may fail silently or leave the filesystem in an unstable
state resulting in unexpected behavior and hard-to-diagnose failures.

Solution:
Add a standalone reusable utility helper for validating minimum free
disk space required for image installation.

Implementation:

Add utilities_common/image_disk_space.py
Add reusable APIs for:
NPU image installation disk-space validation
DPU image installation disk-space validation
Generic image installation validation entrypoint
Read platform-specific thresholds from platform.json:
min_free_disk_in_gb_for_npu_image
min_free_disk_in_gb_for_dpu_image
Fall back to safe default values when keys are missing or invalid
Support validation for:
Regular switch NPU image installation
SmartSwitch NPU image installation
SmartSwitch single/multiple DPU image installation
Add robust validation, logging, parsing, and SSH handling
Add unit tests

This helper is intended to be reused by multiple image-installation
workflows including sonic-installer, gNOI upgrade workflows, ONIE
install workflows, and platform onboarding scripts.

What I did

Added a standalone reusable image installation disk-space validation
helper under utilities_common.

The implementation adds reusable APIs for validating minimum free disk
space required before image installation for:

  • Regular switch NPU image installation
  • SmartSwitch NPU image installation
  • SmartSwitch single DPU image installation
  • SmartSwitch multiple DPU image installation

The implementation also supports platform-specific minimum free disk
thresholds through platform.json using:

  • min_free_disk_in_gb_for_npu_image
  • min_free_disk_in_gb_for_dpu_image

If the keys are missing or invalid, the helper falls back to safe
default values.

Added unit tests with high coverage for validation logic, parsing,
platform.json handling, SSH handling, and failure scenarios.

How I did it

  • Added utilities_common/image_disk_space.py

  • Added reusable helper APIs:

    • check_npu_image_install_free_disk_space()
    • check_dpu_image_install_free_disk_space()
    • check_image_install_free_disk_space()
  • Added helper functions for:

    • platform.json parsing
    • minimum threshold validation
    • free disk space retrieval
    • DPU remote disk-space checks
    • df output parsing
  • Added configurable SSH options for DPU checks

  • Added validation and fallback handling for invalid platform.json values

  • Added logging for insufficient disk-space and validation failures

  • Added unit tests under tests/image_disk_space_test.py

How to verify it

Run unit tests:

pytest tests/image_disk_space_test.py \
  --cov=utilities_common.image_disk_space \
  --cov-report=term-missing

Verify successful validation:

from utilities_common.image_disk_space import \
    check_image_install_free_disk_space

check_image_install_free_disk_space(target="npu")

Verify DPU validation:

check_image_install_free_disk_space(
    target="dpu",
    dpu_names=["DPU0", "DPU1"]
)

Verify platform.json override:

{
  "min_free_disk_in_gb_for_npu_image": 16,
  "min_free_disk_in_gb_for_dpu_image": 12
}

Which release branch to backport (provide reason below if selected)

  • 202305
  • 202311
  • 202405
  • 202411
  • 202505
  • 202511
  • 202605

Previous command output (if the output of a command-line utility has changed)

N/A

New command output (if the output of a command-line utility has changed)

N/A

Signed-off-by: Ramesh Raghupathy <ram@cisco.com>
@mssonicbld

Copy link
Copy Markdown
Collaborator

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants