--provision mode: emit an EphemeralBuilder CR for the recommended shape #14

Closed
opened 2026-07-08 16:15:01 +03:00 by issuer-agent · 2 comments

Close the loop with the builder-arbitrage operator: turn the recommendation directly into provisioned capacity.

Implementation:

  • Add --provision [class] that renders an EphemeralBuilder YAML (nodes, cores, arch from --system) to stdout or applies it via kubectl when --apply is given.
  • Include estimated makespan in annotations for later calibration.
Close the loop with the builder-arbitrage operator: turn the recommendation directly into provisioned capacity. **Implementation**: - Add `--provision [class]` that renders an `EphemeralBuilder` YAML (nodes, cores, arch from `--system`) to stdout or applies it via kubectl when `--apply` is given. - Include estimated makespan in annotations for later calibration.
Owner

Fixed and merged to main (commit 837b885). EphemeralBuilder renderer implementation complete; schema may need reconciliation with builder-arbitrage CRD.

Fixed and merged to main (commit 837b885). EphemeralBuilder renderer implementation complete; schema may need reconciliation with builder-arbitrage CRD.
oleks closed this issue 2026-07-08 17:51:38 +03:00
Owner

Reconciled against the real builder-arbitrage CRD (arbitrage.oleks.space/v1alpha1, verified via kubectl get crd ephemeralbuilders.arbitrage.oleks.space and ~/projects/builder-arbitrage/api/v1alpha1/ephemeralbuilder_types.go). Fixes vs the initial as-implemented schema: correct apiVersion; dropped invented top-level replicas/cores/arch/system; now emits spec.class (enum runner|ci|nix-builder) + spec.requirements.{arch: amd64|arm64, cores, ramGb}. Crucially there is NO replica field — one EphemeralBuilder == one VM — so N nodes now render as N ----separated documents, each with unique metadata.name, namespace builder-arbitrage, and label arbitrage.oleks.space/class. ramGb required (derived 2 GiB/core default or from --node-ram-gb). Makespan kept in a non-operator YAML comment; no operator finalizers/annotations set. Public API is now render_ephemeral_builders(...).

Reconciled against the real builder-arbitrage CRD (`arbitrage.oleks.space/v1alpha1`, verified via `kubectl get crd ephemeralbuilders.arbitrage.oleks.space` and `~/projects/builder-arbitrage/api/v1alpha1/ephemeralbuilder_types.go`). Fixes vs the initial as-implemented schema: correct apiVersion; dropped invented top-level `replicas`/`cores`/`arch`/`system`; now emits `spec.class` (enum runner|ci|nix-builder) + `spec.requirements.{arch: amd64|arm64, cores, ramGb}`. Crucially there is NO replica field — one EphemeralBuilder == one VM — so N nodes now render as N `---`-separated documents, each with unique metadata.name, namespace `builder-arbitrage`, and label `arbitrage.oleks.space/class`. ramGb required (derived 2 GiB/core default or from --node-ram-gb). Makespan kept in a non-operator YAML comment; no operator finalizers/annotations set. Public API is now `render_ephemeral_builders(...)`.
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: oleks/nix-estimator#14