During dry runs, query pool.dataset.query on the destination to verify that
every share path would have a backing ZFS dataset. Missing paths are collected
in Summary.missing_datasets and surfaced as a WARNING block in the report.
In interactive mode the user is prompted to create any auto-creatable
(/mnt/…) datasets before the live migration proceeds. Non-interactive
--dry-run mode prints the same warning in the summary report.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When run with no arguments the script now guides the user through the
full migration interactively:
1. Lists debug archives found in the current directory and prompts
for selection (auto-selects when only one is present)
2. Prompts for destination host, port, and API key (key input hidden)
3. Prompts for migration scope (SMB shares / NFS shares / SMB config)
4. Runs a dry run and displays the summary
5. Asks for confirmation before applying changes live
The archive is parsed once and reused for both the dry and live runs.
The existing CLI flag interface is unchanged.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces the third-party `websockets` package with a self-contained
implementation built on asyncio.open_connection, ssl, hashlib, base64,
struct, and os — all Python stdlib modules available on TrueNAS OS.
The script now runs directly on TrueNAS without any pip install.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>