Skip to content

kubectl-ate: typed postgres and objectStore config for install - #153

Merged
EItanya merged 3 commits into
mainfrom
installer-object-store
Nov 8, 2026
Merged

EItanya merged 3 commits into
mainfrom
installer-object-store

Conversation

@EItanya

@EItanya EItanya commented Nov 8, 2026 •

Copy link
Copy Markdown

Step 3 of the installer refinement, before the config becomes a library API.

Before this change, s3 and gcs installs needed raw chart values in three places: objectStore.* on substrate-atelet, and ateApi.snapshotLocation and objectStorePlugin.* on substrate. objectStore now also takes a struct, and the installer turns it into those values:

postgres:
  type: external        # or bundled
objectStore:
  type: s3              # or bundled, gcs
  bucket: my-snapshots
  s3: {region: us-east-1, endpoint: https://s3.example.com, pathStyle: true, credentialsSecret: s3-creds}

This also fixes a gap. With s3, the substrate release's object store plugin had only the backend name and no region, endpoint or credentials. It now gets them as objectStorePlugin.extraEnv, added after any entries the user set.

The second commit makes both dependencies take the same shape. Each is a struct with a type, and bundled means the installer deploys it. The installer's RustFS is now objectStore: bundled.

Existing configs stay valid:

  • postgres: external and objectStore: s3 still parse as just the type.
  • rustfs still parses, as bundled.
  • Raw chart values still work.

The wizard asks for the bucket and the S3 or GCS settings instead of a values file.

I wrote this with Claude Code and reviewed the diff.

@EItanya EItanya changed the title kubectl-ate: add typed objectStore config to install kubectl-ate: typed postgres and objectStore config for install Nov 8, 2026
@EItanya
EItanya added this pull request to stack #155 November 8, 2026 13:25
objectStore now takes a bucket and s3 or gcs settings, and the installer
fills the atelet and substrate chart values from them. The substrate
release's object store plugin now gets the S3 region, endpoint, path
style and credentials too. Before, it had only the backend name.

The bare objectStore: s3 form still works, and so do the raw chart values.
The wizard asks for these settings instead of a values file.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
postgres is now a struct with a type, like objectStore, and both still
accept the type alone. The installer's RustFS is now objectStore type
bundled, matching postgres. Configs that say rustfs still work.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
TestNoNewHardcodedInstallLayoutInGo rejects ate-system literals.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
@EItanya
EItanya force-pushed the installer-object-store branch from cc08f01 to c78f0ca Compare November 8, 2026 16:07
@EItanya
EItanya merged commit dda7ca9 into main Nov 8, 2026
6 checks passed
EItanya added a commit that referenced this pull request Nov 8, 2026
…roviders (#159)

* docs: list substrate-atelet among the published charts (#151)

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
(cherry picked from commit 19cc8d5)
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>

* charts: let egress use other credential providers (#152)

* charts: let egress use other credential providers

credentialProvider.enabled turns off the bundled Kubernetes Secret
provider and its k8s.io route. credentialProvider.extraProviders points
the egress gateway at providers deployed outside the chart, matching
the ate-setup --credential-provider options.

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

* charts: move extra credential providers under atenetEgress

credentialProvider configures the bundled provider. The extra providers
configure the egress gateway.

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

---------

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
(cherry picked from commit 40c2eaa)
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>

* kubectl-ate: typed postgres and objectStore config for install (#153)

* kubectl-ate: add typed objectStore config to install

objectStore now takes a bucket and s3 or gcs settings, and the installer
fills the atelet and substrate chart values from them. The substrate
release's object store plugin now gets the S3 region, endpoint, path
style and credentials too. Before, it had only the backend name.

The bare objectStore: s3 form still works, and so do the raw chart values.
The wizard asks for these settings instead of a values file.

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

* kubectl-ate: configure postgres and objectStore the same way

postgres is now a struct with a type, like objectStore, and both still
accept the type alone. The installer's RustFS is now objectStore type
bundled, matching postgres. Configs that say rustfs still work.

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

* kubectl-ate: don't name the system namespace in install help

TestNoNewHardcodedInstallLayoutInGo rejects ate-system literals.

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

---------

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
(cherry picked from commit dda7ca9)
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>

* kubectl-ate: per-operation installer options and exported steps (#154)

* kubectl-ate: take install charts as an fs.FS

A program that embeds the installer can pass charts it ships itself
instead of writing them to a directory.

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

* kubectl-ate: split installer options per operation and export steps

Upgrade and Uninstall take their own options, so Options holds only the
cluster, charts and config. Step, Run and InstallSteps are exported so a
caller can add steps to an install, such as setting up its own database
before StepCheckDatabase.

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

---------

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
(cherry picked from commit d006b3b)
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>

* Move the installer to pkg/kagent/install (#157)

kagent imports the installer, so it can't stay under cmd/kubectl-ate/internal.
microvmassets moves with it. Fork-only packages live under pkg/kagent so
upstream can't add a package at the same path.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
(cherry picked from commit 471cd0c)
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>

---------

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
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