A non-destructive, read-only dry-run utility for planning on-prem storage and datastore migrations.
This tool is designed to answer one question before anything moves:
“If we try this migration, what will break — and how long will it take?”
It simulates storage migration scenarios using inventory data, applies configurable safety and risk rules, and produces a clear GO / NO-GO decision with supporting evidence.
Storage migrations fail for boring reasons:
- insufficient destination capacity
- snapshot sprawl
- unrealistic throughput assumptions
- hidden blast radius
- unclear outage windows
This tool focuses on preventing those failures by running a rehearsal that:
- does not modify infrastructure
- does not require downtime
- produces artifacts suitable for change review, operations, and management
It is intentionally conservative and opinionated in favor of safety.
During a dry-run, the tool:
- Identifies candidate VMs on source datastores
- Calculates effective data to move, accounting for:
- copy overhead
- snapshots
- thin provisioning penalties
- Evaluates destination datastore capacity with safety headroom
- Estimates migration duration using configurable throughput assumptions
- Flags risk conditions (snapshots, size, tooling, policy violations)
- Produces:
- a structured GO / NO-GO decision
- detailed findings
- a placement plan
- JSON and HTML evidence reports
No changes are made to infrastructure.
- No live migrations
- No storage writes
- No destructive actions
- No assumptions about cloud platforms
This is a planning and validation tool, not an execution engine.
+-------------------+
| Inventory Source |
| (mock / future) |
+---------+---------+
|
v
+-------------------+
| Dry-Run Analyzer|
|-------------------|
| • capacity checks |
| • risk rules |
| • time estimates |
+---------+---------+
|
v
+-------------------+
| Evidence Output |
|-------------------|
| • JSON report |
| • HTML report |
| • GO / NO-GO |
+-------------------+
The provider layer is intentionally abstracted so inventory sources can be swapped without changing analysis logic.
- Python 3.9+
- No external services required
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtpython -m dryrun.cliOr, if installed in editable mode:
pip install -e .
storage-dryrunReports are written to a timestamped directory under ./out/.
Defines what you want to evaluate.
migration:
source_datastores:
- DS_SITEA_01
destination_datastores:
- DS_SITEB_01
auto_place: true
run:
provider: mock
inventory_path: ./mock_data/inventory.jsonDefines how conservative the dry-run should be.
Key areas:
- throughput assumptions
- overhead multipliers
- snapshot penalties
- free-space safety margins
- policy rules for GO / NO-GO
These values are deliberately configurable to reflect different environments and risk tolerance.
Each run produces:
-
dryrun_report.json
Machine-readable results for automation, review, or archiving. -
dryrun_report.html
Human-readable evidence pack suitable for:- change requests
- migration reviews
- post-planning documentation
Example highlights:
- overall decision (GO / NO-GO)
- estimated total migration time
- per-VM placement plan
- categorized findings (GREEN / YELLOW / RED)
The current provider loads inventory from JSON to enable:
- safe local testing
- deterministic behavior
- easy review of edge cases
This is intentional.
The provider interface is designed so a read-only vCenter provider can be added without changing the analyzer or reporting layers.
See docs/LIMITATIONS.md for a full list.
In short:
- inventory is mock-based
- throughput is assumed, not measured
- guest-level checks are limited
These constraints are deliberate to keep planning safe and repeatable.
- Datastore evacuations
- Data center storage moves
- Migration window estimation
- Change impact analysis
- Pre-migration risk reviews
This tool is biased toward:
- clarity over cleverness
- safety over speed
- boring correctness over optimism
It is designed to fail loudly before production does.
MIT