Skip to content

Providers

shipped 1.0.0

A provider is how an environment’s host answers four questions: how files move, how a command runs remotely, how a shell opens and what a restore point is. Four ship: cloudron, ssh, ftps/sftp and local.

Choose your host is the practical version: what each one needs in cwp.yml and what changes between them. This page is about the seam itself.

The rule the seam enforces

Anything that differs per host lives behind the provider, and nowhere else. An if (provider === "cloudron") inside an operation fails a structural test.

What that buys is visible from outside: no command asks for a host you are not using. cwp init on an ssh project needs no Cloudron CLI, and cwp doctor checks the host this project names and no other. A tool that gated work behind a login it never needed would read as “this does not support my host”, and would be right about the wrong thing.

Where it pays

An abstraction that only generalises is a cost. Two behaviours make this one worth having, and both are visible in the commands rather than in the source:

  • backup: none makes cwp refuse an upward write, not silently skip it. The provider declares the capability, and a host that cannot take a restore point does not quietly get a shorter guard ladder. The operator decides, in the open. Only local says none: the two hosts that have no backup command of their own answer synthetic, and cwp assembles a dump and an archive where there is nothing to ask.
  • cwp push --dry-run on ssh gives a real file-level diff, because rsync has one. Same command, sharper plan, and no branch anywhere in the operation that produces it. The operation asks the provider whether it can dry-run a transfer, and prints what comes back.
  • A host that runs no commands answers through the capability, not through a failure. commands is shell, agent or none, and an operation that needs WordPress asks before it starts. On shared hosting the answer is agent: cwp installs a signed PHP file for the length of the run, calls it over HTTPS, and removes it at the end. cwp shell, cwp logs and cwp wp refuse there and say why; everything cwp wraps keeps working.

The Cloudron dry run therefore says, in as many words, that a file-level diff is not knowable rather than printing an empty one:

? file-level diff — the cloudron provider has no transfer dry run, so what
  differs is only knowable by sending it

What is not extensible

There are no third-party providers. All four come compiled in, chosen by configuration; there is no registration, no discovery and no plugin API. A fourth host means a change to this repository. A provider has production in its hands, and there is no way to grant that to something loaded at run time.