Podplane Development
This guide is for folks working on Podplane itself: primarily when working on the CLI, vmconfig, components, and templates, with local VMs used for development through the CLI local commands.
Repository Layout
Use the podplane/workspace repository to keep the Podplane repositories checked out next to each other:
workspace/
├── podplane/
│ ├── podplane/ # Podplane CLI
│ ├── vmconfig/ # VM install/configure scripts and dependency manifests
│ ├── components/ # Helm charts and component manifests
│ └── templates/ # App template Helm charts and template manifests
├── netsy-dev/
...The commands below assume you are in the podplane CLI repository and that the ../vmconfig, ../components, and ../templates repository checkouts exist.
Local Cluster Development Flow
Before the first local start, download dependencies using the local components, vmconfig, and templates manifests:
go run . deps download \
--components ../components/manifests/components.json \
--templates ../templates/manifests/templates.json \
--vmconfig ../vmconfig/manifests/vmconfig_knc_debian-13_arm64.json
# or for x86 dev machines:
# --vmconfig ../vmconfig/manifests/vmconfig_knc_debian-13_amd64.jsonBy default this downloads all templates, provider-neutral dependencies, core component images, and recommended addon component images. If you are testing provider-specific components or extra addons locally, add filters such as --providers aws and --addons snapshot.
Then start the local VM. Note that when using local development manifests, start
with --components none unless you have also cached the published Podplane seed files
under the local deps server. This creates a bare Kubernetes cluster and avoids
trying to seed recommended.netsy from the local dependency cache:
go run . local start --components none --followAfter the VM is running, bootstrap components from the components checkout as
needed (for example, DOMAIN=default.localhost make recommended) against the
local cluster.
In a second terminal, run the vmconfig watch loop from the vmconfig repository:
cd ../vmconfig
make knc-watchWhy This Works
podplane deps download normally fetches the published manifests from https://cli.podplane.dev. Passing local paths changes that behavior:
--components ../components/manifests/components.jsonuses the local components manifest and mirrors the component images it names into the local dependency cache. It does not cache the published Podplane seed files (recommended.netsy/minimal.netsy), so pair this workflow withgo run . local start --components nonewhen you want to bootstrap components manually from your localcomponentscheckout.--vmconfig ../vmconfig/manifests/vmconfig_knc_debian-13_arm64.jsonuses the local vmconfig manifest, which contains a vmconfig dependency stub instead of a released vmconfig tarball. That makes the local VM user-data skip extracting and running a prebuilt vmconfig package. For the OS image and other dependencies in the manifest, these will be mirrored into the local dependency cache, so using the local manifest means you can test out new dependencies as well as new configuration.--templates ../templates/manifests/templates.jsonuses the local templates manifest. Entries withtype: "chart"point at unpacked chart directories; the CLI runshelm packageand writes the result into the local template chart cache used bypodplane deploy.
Note that the CLI checks the age of the cached manifests, so you need to re-run deps download on your development manifests at least once every 7 days to continue using them for new VMs.
With no prebuilt vmconfig package installed, the VM is ready for make knc-watch. That target watches the vmconfig templates, manifests, scripts, and Makefile; rebuilds the local knc tree on change; syncs it into the VM; and runs install/configure/restart as needed. Note that it will only run install once; to test that again, delete the VM with go run . local stop --rm and recreate it.
What You Can Iterate On
This workflow gives you a local single-node control-plane VM that is useful for testing changes across Podplane’s core repositories:
- Iterate on the
componentsmanifest and test the images mirrored into the local dependency cache. - Iterate on the
templatesmanifest and app template charts used bypodplane deploy. - Iterate on the
vmconfigmanifest, templates, install scripts, and service configuration. - Test Podplane CLI changes for creating, starting, stopping, syncing, shelling into, deleting local VMs, and deploying apps.
- Use the resulting bare Kubernetes cluster to test component bootstrap and addon installation.
Helpful commands from the CLI repository:
go run . local status
go run . local shell
go run . local console
go run . local stop
go run . local delete
# or perform stop+delete in a single command:
# go run . local stop --rmRun deps download again before creating a fresh local VM whenever you change the local component, vmconfig, or template manifests, or when you need to refresh mirrored component images or packaged template charts.