feat: suspend and resume an instance without losing its data
An instance you are not using had to be deleted, and deleting it destroys its database. Now it can be put to sleep instead. sudo supaspin suspend N # stops all twelve pods, keeps everything else sudo supaspin resume N # starts them again with the same data Suspending gives the server back, per instance: the 1.875 GiB it had reserved and the 1.5-2.5 GiB it was actually using, its twelve pod slots out of the 110 a node allows, and its two server ports (Postgres 544N, Studio 300N). It keeps: the database and the uploads (the disk images stay mounted), the .env file with its passwords and keys, the HTTPS certificate, which goes on renewing itself while the instance sleeps, and the hostname, which answers "service unavailable" until the instance is resumed. Disk space is not given back - that is the data being kept. How: every service takes its pod count from a `replicaCount` setting, so suspend writes zero into all twelve and re-applies the chart, resume writes one. This goes through the instance's stored settings rather than scaling the running pods by hand, so it survives anything that re-applies the chart later. `supaspin upgrade` now understands a sleeping instance: it stores the new memory limits for it and leaves it asleep instead of waiting for pods that by design do not exist. `supaspin list` reports each instance as running, suspended or partly suspended, and prints no tunnel commands for a sleeping one, because nothing is listening on its ports. `suspend` and `resume` take one instance number and have no "all" form: stopping every instance is not something to type by accident, and resuming them all at once would start 36 pods in one go. Reading the stored settings and handing them back to Helm is now shared by upgrade, suspend and resume. Verified on instance 2 (supa2.didgibot.com): suspended to zero pods, memory reserved on the node fell from 25766 MiB to 23846 MiB (exactly the 1920 MiB it had), ports 3002 and 5442 freed, then resumed to 12/12 pods with 0 restarts, its 55 tables and 11 MB of data intact and the gateway answering again. Tests: 130 pass (17 new). Version 1.2.1 -> 1.3.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit was merged in pull request #7.
This commit is contained in: