github mattrobinsonsre/terrapod v2.0.0-beta.4

one hour ago

Terrapod is a free, open-source platform replacement for Terraform Enterprise — the collaboration, governance, state and UI layer around OpenTofu, Terraform, Pulumi and Ansible. This is the fourth 2.0 pre-release, and it closes every finding the previous one shipped with.

Highlights

  • Bulk run actions on the Workspaces list — tick workspaces and run Plan, Retry, Cancel, Apply or Discard across the selection. One request per workspace, so a partial result is normal and every refusal is reported against its own workspace rather than aggregated into one failure; the rows stay selected so the selection can be narrowed and retried. Apply and Discard confirm in the irreversible tier, and an action that cannot apply is inert and says why. Contributed by @the3venthoriz0n.
  • Warm every cache the product keeps — not just the two binary caches. Six language-package ecosystems and container images, at explicit versions, from an admin endpoint, the SDK, four MCP tools or the admin page. Warming a package cache picks a mirror by label rather than by URL, so the set of reachable hosts stays something an operator declares in Helm values. Refused on a sealed node, which is the point: warm before sealing.
  • The PR status comment names the resources a plan changes, instead of only counting them. Contributed by @the3venthoriz0n.
  • The run document says what kind of run it is. The run list and the run page no longer infer it from three attributes, and a workspace can declare which kind gets the prominent button.
  • A configure gets its own concurrency and its own scheduling. configure_parallelism is separate from the engine's -parallelism — a fleet size has nothing to do with a resource count — and runners.configure.{nodeSelector,tolerations,affinity} can keep configure Jobs off spot capacity, because a configure is the one phase that is not safely restartable.
  • The configure log is readable. One coloured block per task per host, the runner's own lines and the galaxy verdicts coloured, and a failed configure now names the host, the task and the message instead of "Runner exited with code 2".
  • The Workspaces filter and every table's sort survive navigation, and the filter dropdowns union their selections. Contributed by @the3venthoriz0n.

Bug Fixes

  • The live log view no longer freezes. The live snapshot is a sliding window — --tail=500, capped at 256KB and replaced wholesale each reconciler cycle — while the viewer advanced a byte offset into it. Past the cap a stale offset sliced a window that had moved, and once the window was shorter than the offset nothing more was ever appended: the view stopped updating until the page was reloaded, on every phase.
  • All four findings beta.3 shipped with are fixed — a bulk archive eviction stopping silently at 5000 keys (#2491), the package listing and bulk evict unbounded at scale (#2492), git failures classified in the wrong direction (#2493), and the eviction routes having no MCP tool (#2494).
  • A pod whose schema is ahead of its code stays ready. Reporting those pods not ready emptied the load balancer for the length of a rolling upgrade; a contraction that genuinely breaks old code now records itself so the pod can refuse for a reason that exists.
  • A data source is no longer priced as a resource being removed in a cost delta.
  • A configure prepares no engine, and the execution environment's children are unbuffered so their output arrives while they run rather than at the end.
  • Galaxy collection metadata is served from the cache rather than fetched upstream on every request, and a vaulted inventory resolves without decrypting anything.
  • A provider terrapod_role level change is no longer ignored, and the API refuses a capabilities list that contradicts the levels instead of silently preferring one.
  • The Workspaces list cannot act on a workspace it is not showing. In grouped mode a collapsed group renders no rows, and select-all could still reach those workspaces.

Breaking Changes

Only one, and only for 2.0: the auto_apply boolean is removed. One setting was described by two attributes — auto_apply_mode and a boolean that was its projection — which let a configuration state a contradiction. auto_apply_mode is the setting. /api/tfe/v2 still returns auto-apply, derived, because go-tfe and the terraform/tofu CLI read it; it is gone from /api/v1, the SDK, both provider surfaces and MCP.

Upgrading to 2.0 names exactly who is affected and who is not. Everything else in this release is additive.

Status

Beta — the 2.0 line is feature-complete and under review. Unlike beta.3, this release ships with no tracked findings of its own: its review found three, and all three are fixed here. One pre-existing gap is tracked separately — the Pulumi committed-schema gate checks resources but not data sources (#2555), which affects two data-source attributes that have been missing for several releases.

Full Changelog: v2.0.0-beta.3...v2.0.0-beta.4

Don't miss a new terrapod release

NewReleases is sending notifications on new releases.