Skip to content

[release-1.0] Backport kubectl ate install, upgrade and uninstall - #148

Merged
EItanya merged 8 commits into
release-1.0from
backport/kubectl-ate-install-1.0
Nov 7, 2026
Merged

EItanya merged 8 commits into
release-1.0from
backport/kubectl-ate-install-1.0

Conversation

@EItanya

@EItanya EItanya commented Nov 7, 2026 •

Copy link
Copy Markdown

Backports the kubectl ate install, upgrade and uninstall work to release-1.0, with the helm-e2e changes it relies on. Each commit is a git cherry-pick -x of the main commit:

#119 and #138 conflicted only in helm-e2e.yaml, the chart README and the chart tests, where release-1.0 had added lines next to theirs. Both sides are kept. After #138, helm-e2e.yaml matches main.

I used Claude Code to cherry-pick the commits and resolve the conflicts.

TarasLykhenko and others added 7 commits November 7, 2026 18:38
* kubectl-ate: add install and status commands

kubectl ate install installs the substrate-crds, substrate-podcert,
substrate-atelet and substrate charts in order, from copies embedded in the
binary. It creates the CA pools, identity secrets and object store
credentials the charts expect. By default it applies a single-replica
PostgreSQL for evaluation.

--microvm stages the microVM guest assets in the object store and applies
the microvm SandboxConfig. The helm-e2e workflow now installs with
kubectl ate install --microvm.

kubectl ate status shows the releases and their workloads.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>

* tools/apitool: tidy go.mod for the Helm SDK dependencies

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>

* kubectl-ate: name Helm's field manager kubectl-ate

Helm names its server-side apply manager after the binary, so rerunning
install from a renamed binary conflicted with the fields the first run
applied.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>

---------

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
(cherry picked from commit 4e72650)
Upgrade moves the certificate controller, atelet, the CRDs, then the
substrate release to the embedded charts, and keeps each release's values.
It refuses downgrades, skipped minor releases and CRD changes that would
strand stored objects. --dry-run prints each release's manifest diff.

If the microvm SandboxConfig exists, upgrade stages the assets the new
release pins and reapplies it.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
(cherry picked from commit 340d5cf)
* kubectl-ate: add uninstall command

Uninstall deletes every WorkerPool and waits for ate-controller to finalize
them. Then it uninstalls the releases in reverse order and removes the
bundled PostgreSQL. CRDs, CA keys, secrets and volumes stay unless
--include-crds or --purge is set.

The RustFS PVC gets helm.sh/resource-policy: keep, so helm uninstall keeps
the snapshots the database refers to.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>

* manifests: render the RustFS volume keep annotation

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>

---------

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
(cherry picked from commit 65cb208)
* kubectl-ate: show install progress in a TUI

On a terminal, install, upgrade and uninstall draw a live step list, and
Ctrl+C cancels the running step. A bare kubectl ate install on a terminal
asks for its options and prints the matching command. --no-tui and -v
print plain lines.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>

* kubectl-ate: skip the install wizard when flags are set

LocalNonPersistentFlags returns a new FlagSet whose NFlag is always 0,
so install asked for its options even with --microvm or -f set. Check
each flag's Changed instead.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>

---------

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
(cherry picked from commit 81ee5e0)
…ile (#144)

* kubectl-ate: configure install, upgrade and uninstall with a config file

Install options came from a set of flags that scripts had to repeat on
every run. A YAML config, from a file or stdin with -c -, replaces them.
The wizard prints the config it built so the next run can skip it.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>

* kubectl-ate: set Helm values per release in the install config

releases.all applies to every release except substrate-crds, and
releases.podcert, atelet and substrate add values for one release.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>

* helm-e2e: give each release only the values it reads

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>

---------

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
(cherry picked from commit 04d9321)
helm-e2e: run every suite on both runtimes
(cherry picked from commit c070968)
)

setup-go keys its cache on go.sum with no fallback, so a PR that changes
go.sum built from scratch and saved its own 3.6GB copy. run-tests now
restores the latest main cache by prefix and saves only on main.
helm-e2e reuses the e2e job's cache.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
(cherry picked from commit 1a65fa0)
@EItanya
EItanya merged commit a2a3c9f into release-1.0 Nov 7, 2026
8 checks passed
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.

2 participants