Importers

Move accounts in from cPanel, Plesk, DirectAdmin, Hestia and FastPanel backups - checked first, staged, then committed or rolled back.

In preview importers version 1.0.0 Part of Migrations

Actions

18 actions, callable from the panel, the command palette and the API as POST /api/v1/a/<id>. Internal actions used between modules are not listed.

ActionWhat it doesRiskPreview
importers.analyze Pre-flight an account backup medium No dry run
importers.run Import an analysed backup (dry run or commit) high
importers.upload.chunk Upload a piece of a backup archive low No dry run
importers.upload.finish Finish an archive upload low No dry run
importers.upload.abort Cancel an archive upload low No dry run
importers.rollback Roll an import back critical
importers.prerequisites Check what an import needs on its server (read) low No dry run
importers.discard Discard an analysed backup low No dry run
importers.get Get an import job (read) low No dry run
importers.list List import jobs (read) low No dry run
importers.transfer.connect Connect to another server medium No dry run
importers.transfer.trust Trust the old server's host key medium No dry run
importers.transfer.discover List the accounts on the old server (read) low No dry run
importers.transfer.start Copy accounts from the old server medium
importers.transfer.final Final pass before the DNS switch high
importers.transfer.checklist DNS switch checklist (read) low No dry run
importers.transfer.list List old servers and their transfers (read) low No dry run
importers.transfer.forget Forget an old server medium No dry run

Permissions and limits

Permissions

  • importers.manage Analyse, stage, commit and roll back imports
  • importers.view View import jobs and reports

Engineering notes

Generated from modules/importers/docs.md at build f3a3c074. These are the notes the engineers keep next to the code: precise, technical, and honest about what is not done yet.

Moves accounts in from another panel or another server. Two ways in:

  • Backup file (cPanel cpmove, Plesk, DirectAdmin, Hestia, FastPanel): importers.analyze unpacks it safely into /var/lib/respirecloud/import/<id>/stage, importers.run creates everything through the owning modules.
  • Live transfer ("From another server", w11-28): importers.transfer.*. The node connects OUT over SSH, only reads, and brings an account into the same staging area; the same importers.run then creates it. Flow: connect (key or password into the vault, host key read through the egress guard) -> trust (a person confirms the fingerprint; pinned) -> discover (panel kind, accounts, sizes, what cannot come over) -> start (dry_run = the plan; first copy, one resumable job per account, a failed one does not stop the others) -> importers.run dry_run/commit -> final (rsync incremental, files synced into the account with os.Root, databases reloaded from a fresh dump, new mail, DNS checklist) -> forget (deletes credentials, pinned key and staged copies).

Safety rules

  • Private/loopback sources are refused unless the importers setting transfer_allow lists them (admin, logged at use; the UI warns). Addresses are resolved once through internal/egress and ssh/rsync dial that address.
  • A different host key than the confirmed one stops the transfer before any command runs.
  • Credentials: vault only; passed to the agent per call; rsync gets them through 0600 files in a private directory removed afterwards (key file or SSH_ASKPASS), never on a command line; scrubbed from errors and job logs.
  • Source content is hostile: rsync runs with --safe-links --no-specials --no-devices, no hard links, --chmod=ug-s,-t; staging is re-walked (links leaving the tree, special files removed, set-id cleared, entry/depth/size bounds against the plan's disk quota); the account copy never follows links in the account's home; dumps are loaded only by databases.db.import as the account's database user (finding 004); cron lines are listed for review, not created; names are validated as new names; the source account's home comes from the source's own getent.
  • Nothing is installed on or changed on the source. Only read commands run there (listed in internal/agent/transfer.go).

Known limits

Plain Linux is proven end to end. cPanel, Plesk and DirectAdmin are discovered through their documented read-only listings and their accounts' files, databases and DNS zones are pulled directly; mailboxes, passwords and certificates of those panels are not brought over by a live copy (use their backup). Sites whose files live outside the account's home are reported, not copied. Mail sign-in passwords and database users get new passwords (shown once).