Files
zosstorage/TODO.md

6.3 KiB

TODO checklist

Project status: first-draft preview is implemented and committed. This checklist tracks remaining work to reach end-to-end provisioning (apply mode), plus follow-ups and QA.

Conventions:

  • Completed
  • [-] In progress
  • Pending

Core execution

  • Add “apply mode” switch to orchestrator to perform destructive actions after preview validation
    • Wire phase execution in orchestrator.run(&Context): apply partitions → udev settle → mkfs → mount → maybe write fstab → build/write report
    • Introduce a CLI flag (e.g. --apply) guarded by clear logs and safety checks (not preview)
  • Partition application (destructive) in fn apply_partitions(...)
    • Translate PartitionPlan to sgdisk commands (create GPT, partitions in order with alignment and names)
    • Enforce idempotency: skip if table already matches plan (or abort with explicit validation error)
    • Ensure unique partition GUIDs; capture partition device paths and GUIDs for results
    • Call util::udev_settle() after changes; robust error mapping to Error::Tool / Error::Partition
  • [-] Filesystem creation in fn make_filesystems(...)
    • Base mkfs implemented for vfat/btrfs/bcachefs (UUID capture via blkid)
    • Apply btrfs raid profile from config (e.g., -m raid1 -d raid1) for Topology::BtrfsRaid1 and the desired profile in struct BtrfsOptions
    • Optionally map compression options for btrfs and bcachefs from config (e.g., -O compress=zstd:3 or format-equivalent)
    • Consider verifying UUID consistency across multi-device filesystems and improve error messages
  • Mount planning and application in mount::ops
  • Reporting implementation in report::state

Discovery, idempotency, safety

  • Device discovery with removable policy: exclude /sys/class/block/*/removable == 1 by default; allow via --allow-removable src/device/discovery.rs
  • Idempotency detection via blkid; filesystem label / PARTLABEL checks src/idempotency/mod.rs
  • Emptiness checks (idempotency::is_empty_disk) and skip during preview mode src/orchestrator/run.rs
  • Optional: additional include/exclude helpers (e.g. path allowlist) and stronger heuristics for device class selection (NVMe/SATA only, etc.)

CLI, config, defaults

Orchestrator tracing and spans

Logging/utilities

  • which_tool/run_cmd/run_cmd_capture/udev_settle implemented src/util/mod.rs
  • Optional: enrich debug spans around all shell-outs (command-line echo with redactions if needed)
  • Confirm file logging idempotence and guard path creation src/logging/mod.rs

Docs and tests

  • Exhaustive README with usage and JSON shapes README.md
  • Audit rustdoc coverage for all public functions and important helpers; beef up where minimal
  • Topology planning tests (unit-level) for single/dual/raid1/ssd+hdd setups src/partition/plan.rs
  • Filesystem planning tests for RAID1 aggregation and bcachefs mapping src/fs/plan.rs
  • Orchestrator preview tests (JSON contains filesystems_planned/mount section) src/orchestrator/run.rs
  • Integration tests in QEMU/KVM matrix; exercise /dev/vd* topologies and ensure safe abort on unexpected signatures

Packaging and integration

  • Provide build profile for static musl and Alpine initramfs integration (Cargo config + CI)
  • Add minimal init script / docs for integrating into early boot

Stretch goals and polish

  • Dry-run mode that outputs proposed sgdisk/mkfs/mount commands in detail with “why” annotations
  • Richer structured report schema (typed disks/partitions/filesystems/mounts) and tooling to diff reports across runs
  • Optional telemetry hooks / metrics (phase durations, device counts) behind features

Stale TODOs to review/remove