Skip to content

feat: butleradm bootstrap local + TUI wizard for the laptop path - #58

Merged
atbagan merged 19 commits into
mainfrom
feat/local-bootstrap
Jun 12, 2026
Merged

atbagan merged 19 commits into
mainfrom
feat/local-bootstrap

Conversation

@atbagan

@atbagan atbagan commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

The butleradm bootstrap local subcommand and TUI wizard local provider: KIND + CAPD orchestration (docker.sock mount, console NodePort, MetalLB pool from the kind network), pull-published-images by default with --from-source for dev, full teardown of prior mgmt + tenant clusters, console URL/user/password reporting, and the em-dash hygiene fix. No butler-api dependency (builds tenant CRs unstructured). Builds + vets clean. Live-validated end to end.

atbagan added 19 commits June 10, 2026 17:14
Adds a local bootstrap subcommand that stands up the whole platform on a KIND
cluster with CAPD tenant workers, no hypervisor required. The orchestrator gains
a local path: the KIND cluster is the management cluster, so it mounts the host
docker socket (for CAPD sibling containers) and maps the console NodePort to the
host, skips teardown, derives the MetalLB pool from the kind docker network,
creates a credential-less platform-scoped local ProviderConfig, builds
butler-controller from source alongside butler-bootstrap, and treats the KIND
kubeconfig as the management kubeconfig once bootstrap reaches Ready.
butler-controller depends on butler-api as a normal fetchable module, so it no
longer needs the parent build context that the sibling replace required. Its
Dockerfile is not REPO_DIR-aware, so the parent context failed on COPY go.mod.
The local provider uses CAPD for tenant workers and has no butler-provider-local
controller manifest. Deploying it failed the bootstrap at the controller step.
- Default `bootstrap local` (subcommand and TUI wizard) to pull published
  component images from ghcr; add --from-source to build from sibling
  repos for development.
- Tear down the full prior local environment on a fresh bootstrap,
  including tenant clusters (each runs as its own KIND cluster via CAPD),
  so re-runs start from a clean slate.
- Report the console URL, username, and password at the end of bootstrap
  and on the TUI completion screen; read the password from in-memory
  kubeconfig bytes. Hide the talosconfig line for local (no Talos nodes).
- Capture image build/load output to a buffer so it does not corrupt the
  bootstrap TUI; surface it only on failure.
- Make local ProviderConfig creation idempotent (tolerate AlreadyExists).
Three wizard help strings used em-dashes; replace with -- to match the
repo text convention.
@atbagan
atbagan merged commit 96f5bea into main Jun 12, 2026
1 check passed
@atbagan
atbagan deleted the feat/local-bootstrap branch June 12, 2026 02:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant