Skip to content

feat(helm): add backend storage driver support#998

Merged
manusa merged 1 commit into
containers:mainfrom
difrost:feat-helm-storage-driver
Apr 2, 2026
Merged

feat(helm): add backend storage driver support#998
manusa merged 1 commit into
containers:mainfrom
difrost:feat-helm-storage-driver

Conversation

@difrost

@difrost difrost commented Mar 31, 2026

Copy link
Copy Markdown
Contributor

Currently helm toolset supports only default, 'secret' storage driver. This PR adds support of defining default storage driver (via config file) and per-call driver overrides.

Supported values: "secret", "configmap" and "" (Helms default driver - currently "secret").

@manusa manusa changed the title feat(helm): add backend storage driver support feat(helm-charts): add backend storage driver support Apr 1, 2026
@manusa manusa changed the title feat(helm-charts): add backend storage driver support feat(helm): add backend storage driver support Apr 1, 2026

@manusa manusa left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this contribution! The config-based storage driver is a good addition. However, I'd like to narrow the scope: let's ship only the config default and drop the per-call storage_driver parameter from the three tools.

Why: Exposing the storage driver as a per-call parameter adds API surface that's hard to remove later, and it's unclear when an AI agent would need to switch drivers mid-conversation. The config default covers the real use case (clusters that store Helm releases in ConfigMaps instead of Secrets). If a per-call override turns out to be needed, we can add it in a follow-up.

Concretely, what to remove:

  • The storage_driver property from the helm_install, helm_list, and helm_uninstall tool schemas (pkg/toolsets/helm/helm.go)
  • The resolveStorageDriver function — instead, read helmCfg.StorageDriver directly (with a nil guard)
  • The storage_driver entries from README.md and pkg/mcp/testdata/toolsets-helm-tools.json

What stays (and looks good):

  • StorageDriver field in Config + TOML parsing
  • validateStorageDriver and its call from Config.Validate()
  • The storageDriver parameter threaded through Install/List/Uninstall/newAction (the plumbing is fine, it just gets its value from config only)
  • docs/configuration.md updates
  • Config tests

One additional note on the tests: the project guidelines prefer testing through the public API. Consider folding the TestValidateStorageDriver cases into TestValidate by exercising Config.Validate() with different StorageDriver values, rather than calling the unexported validateStorageDriver directly.

@difrost

difrost commented Apr 1, 2026

Copy link
Copy Markdown
Contributor Author

Hey @manusa. I'm running this in an environment with mixed drivers in use (on lower envs users can use standard "secret" driver while in upper envs access to Kube Secrets is blocked hence the need to handled releases backed by CMs) for last 3 days and it works great. No issues with agent switching between different drivers smoothly and showing releases installed via both drivers on single cluster or in mix of clusters.

Keeping the config level control only could be a good move forward but that actually helps only in uniform environments where there's just one single driver in use - from my experience this is rare case. In an enterprise env like mine, it is quite common to ban Kube Secrets use and that forces Helm users to switch to CMs but that is rarely enforced across all environments. This implementation has been created based on the environments I've been dealing with for last couple years.

I'm ok to just submit the portion of this feature and keep remaining parts on my feature build.

Re tests - I'll move the TestValidateStorageDriver to Config.Validate().

@manusa

manusa commented Apr 1, 2026

Copy link
Copy Markdown
Member

I'm ok to just submit the portion of this feature and keep remaining parts on my feature build.

Let's break the work in two then. For this PR, keep the narrowed scope which can be merged easily (it won't affect existing LLM performance).

Follow-up PR with the optional parameter. For this one we'll need to improve the eval suite and find a way to test this in the CI environment.

This implementation has been created based on the environments I've been dealing with for last couple years.

I trust your judgement, but still the evals are a must right now for a consolidated toolset.

Signed-off-by: Jacek Luczak <difrost.kernel@gmail.com>
@difrost
difrost force-pushed the feat-helm-storage-driver branch from a238b29 to 08b1da1 Compare April 1, 2026 16:47
@difrost

difrost commented Apr 1, 2026

Copy link
Copy Markdown
Contributor Author

Let's break the work in two then. For this PR, keep the narrowed scope which can be merged easily (it won't affect existing LLM performance).

@manusa please review.

@manusa manusa left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thx!

@manusa
manusa merged commit 53816c1 into containers:main Apr 2, 2026
9 checks passed
@manusa manusa added this to the 0.1.0 milestone Apr 2, 2026
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