Skip to content

Releases: butlerdotdev/butler-api

v0.22.0

Choose a tag to compare

@atbagan atbagan released this 12 Jun 01:48
7df1429

Local provider type for the laptop path

  • New local provider for ClusterBootstrap and ProviderConfig: installs Butler onto a kind-based management cluster and provisions tenant workers as containers via the Cluster API Docker provider (CAPD), for running Butler on a laptop with no hypervisor.
  • Adds ProviderTypeLocal, an optional LocalProviderConfig (kindNodeImage override), and ClusterBootstrap.IsLocal().
  • credentialsRef is now optional on ProviderConfig (the local provider needs no credentials).

Validation

  • A CEL rule on ProviderConfig requires a non-empty credentialsRef.name for every non-local provider and exempts local, so a credential-less non-local config is rejected at admission.

Known follow-up

ProviderConfig.CredentialsRef should become *SecretReference (tracked in #47) so credential-less local configs round-trip cleanly. Until then a local ProviderConfig shows a cosmetic not-Ready status; provisioning is unaffected.

v0.17.0

Choose a tag to compare

@atbagan atbagan released this 08 May 16:29
a19d8d1

Adds InfrastructureAllocations status field to NetworkPoolStatus for tracking infrastructure IP usage within reserved ranges.

  • InfrastructureAllocation type: ip (required), source (required), serviceRef (optional NamespacedObjectReference)
  • +listType=map keyed on ip for SSA merge semantics
  • Purely additive, backward-compatible change

PR: #41

v0.16.0

Choose a tag to compare

@atbagan atbagan released this 07 May 22:13
6600ce4

Multi-range tenant allocation support

Adds AllocationRange type and Ranges field to TenantAllocationConfig, enabling non-contiguous allocatable IP ranges within a single NetworkPool.

Changes

  • AllocationRange type with Start/End fields, max 16 per pool
  • TenantAllocationConfig.Ranges field supersedes deprecated Start/End
  • GetEffectiveRanges() helper centralizing precedence logic
  • CRD schema updated (backwards compatible — Start/End relaxed from required to optional)

Backwards compatibility

Existing manifests with start/end continue to work unchanged. Webhook validation for the new fields is implemented in butler-controller (separate release).

Closes #39.

v0.11.0

Choose a tag to compare

@atbagan atbagan released this 26 Apr 15:29
4919121

Add NTP TimeServers fields to TenantClusterSpec, ProviderNetworkConfig, and ButlerConfigSpec

v0.9.4

Choose a tag to compare

@atbagan atbagan released this 08 Apr 14:52
1df11a2

feat: add NotificationsConfig to ButlerConfig for webhook forwarding

v0.9.3

Choose a tag to compare

@atbagan atbagan released this 07 Apr 18:55
990ae0a

feat: add AuditConfig to ButlerConfig for audit log configuration

  • Add spec.audit with enabled, webhookURL, bufferSize fields
  • Helper methods: IsAuditEnabled(), GetAuditWebhookURL(), GetAuditBufferSize()
  • Regenerated deepcopy and CRD manifests

v0.9.2

Choose a tag to compare

@atbagan atbagan released this 26 Mar 04:41
62fb342

fix: remove omitempty from WorkerNodesReady/WorkerNodesDesired status fields

Zero is a valid value for these int32 fields. With omitempty, 0 was dropped from JSON serialization, making it impossible for consumers to distinguish "0 ready" from "field not set".

v0.9.1

Choose a tag to compare

@atbagan atbagan released this 23 Mar 03:14
6e4c18e

What's Changed

feat: add ImageURN and VMSize to AzureProviderConfig (#24)

  • Added vmSize field for default Azure VM size (e.g., Standard_D4s_v3)
  • Added imageURN field supporting three formats:
    • Standard URN: publisher:offer:sku:version
    • Managed image resource ID: /subscriptions/.../images/my-image
    • Shared gallery image ID: /subscriptions/.../galleries/.../images/.../versions/...

Full Changelog: v0.9.0...v0.9.1

v0.9.0

Choose a tag to compare

@atbagan atbagan released this 23 Mar 03:14
269b736

What's Changed

feat: add LoadBalancerRequest CRD for cloud control plane load balancers

New LoadBalancerRequest CRD (shortName: lbr) for provisioning cloud-native load balancers as control plane endpoints during management cluster bootstrap.

LoadBalancerRequestSpec:

  • clusterName (immutable) — DNS-safe cluster name used for cloud resource naming
  • providerConfigRef (immutable) — references ProviderConfig with cloud credentials
  • port (default: 6443) — target port on backend instances
  • healthCheckPort — optional separate health check port
  • targets — incrementally updated list of backend instances (IP, instanceID, instanceName)

LoadBalancerRequestStatus:

  • Phase lifecycle: Pending -> Creating -> Ready -> Failed / Deleting
  • endpoint — load balancer IP or DNS name (populated at Ready)
  • resourceID — cloud resource identifier for cleanup
  • registeredTargets — count of registered backends
  • Standard conditions (Provisioned, TargetsSynced)

kubectl UX:

  • Print columns: Cluster, Phase, Endpoint, Targets, Age

Helper methods: IsReady(), IsFailed(), IsTerminating(), SetPhase(), SetFailure(), GetHealthCheckPort()

Constants: FinalizerLoadBalancerRequest

Full Changelog: v0.8.0...v0.9.0

v0.8.0

Choose a tag to compare

@atbagan atbagan released this 23 Mar 03:13
605bc0a

What's Changed

feat: cloud-aware bootstrap API types (#22)

ClusterBootstrap cloud provider support:

  • Expanded provider enum to include gcp, aws, azure alongside harvester, nutanix, proxmox
  • VIP field is now optional for cloud providers (no kube-vip needed)
  • VIP accepts DNS hostnames in addition to IP addresses for cloud LB endpoints
  • Added IsCloudProvider() helper method
  • Console addon now defaults to enabled
  • Network validation updated: DNS-based VIPs skip MetalLB pool overlap checks

GCP ProviderConfig expansion:

  • Added zone, machineType, imageProject, imageFamily, image, serviceAccount, tags fields
  • Added gcp credential key documentation (serviceAccountKey)

TenantCluster multi-OS and GCP support:

  • Added kairos and bottlerocket OS types to the enum
  • Added sshAuthorizedKey to OSSpec for non-Talos workers
  • Added GCPOverride for per-cluster GCP settings (zone, machineType, image, imageFamily, subnetwork)

ButlerConfig addition:

  • Added sshAuthorizedKey for platform-default SSH key on non-Talos workers

Full Changelog: v0.7.0...v0.8.0