Skip to content

feat(core): add chart-values HTTP service#48

Open
drey wants to merge 9 commits into
mainfrom
feat/values-http-svc
Open

feat(core): add chart-values HTTP service#48
drey wants to merge 9 commits into
mainfrom
feat/values-http-svc

Conversation

@drey

@drey drey commented Jul 13, 2026

Copy link
Copy Markdown
Collaborator

Add chart-values-controller: an HTTP service that returns a chart's values.yaml before installation, so external in-cluster apps can preview chart parameters.

The service reuses nelm-source-controller: on request it ensures an auxiliary HelmChart (Helm repos) or OCIRepository (OCI repos), waits for the
artifact, downloads and extracts values.yaml, and caches it.

  • API: POST /v1/chart-values, async 202 + polling, stable machine-readable
    error codes with English messages.
  • Cache: content served from an emptyDir file cache keyed by the auxiliary
    resource name; a watch controller with a revision-change predicate keeps
    entries fresh, so ready charts are served without Kubernetes calls.
  • Atomic, lock-free cache writes (unique temp file + rename) safe under concurrent requests for the same chart.
  • TTL controller removes idle auxiliary resources and their cache entries.
  • Configurable max chart size via --max-chart-size-mb; guards against oversized artifacts and decompression bombs.
  • Auxiliary resources named tmp---.
  • Deployed as a single replica; kube-rbac-proxy fronts the API (TLS via the
    shared rootCA-signed cert, SubjectAccessReview auth) and metrics.

Add chart-values-controller: an HTTP service that returns a chart's
values.yaml before installation, so external in-cluster apps can preview
chart parameters.

The service reuses nelm-source-controller: on request it ensures an
auxiliary HelmChart (Helm repos) or OCIRepository (OCI repos), waits for
the
artifact, downloads and extracts values.yaml, and caches it.

- API: POST /v1/chart-values, async 202 + polling, stable
machine-readable
  error codes with English messages.
- Cache: content served from an emptyDir file cache keyed by the
auxiliary
  resource name; a watch controller with a revision-change predicate
keeps
  entries fresh, so ready charts are served without Kubernetes calls.
- Atomic, lock-free cache writes (unique temp file + rename) safe under
  concurrent requests for the same chart.
- TTL controller removes idle auxiliary resources and their cache
entries.
- Configurable max chart size via --max-chart-size-mb; guards against
  oversized artifacts and decompression bombs.
- Auxiliary resources named tmp-<repo>-<chart>-<hash>.
- Deployed as a single replica; kube-rbac-proxy fronts the API (TLS via
the
  shared rootCA-signed cert, SubjectAccessReview auth) and metrics.

Signed-off-by: Ilya Drey <ilya.drey@flant.com>
@drey drey force-pushed the feat/values-http-svc branch from eb2ca0e to fc18bf8 Compare July 13, 2026 09:37
Signed-off-by: Ilya Drey <ilya.drey@flant.com>
@drey drey force-pushed the feat/values-http-svc branch from 4ef7888 to 0fb7ea3 Compare July 13, 2026 11:10
drey added 2 commits July 13, 2026 14:42
Signed-off-by: Ilya Drey <ilya.drey@flant.com>
Signed-off-by: Ilya Drey <ilya.drey@flant.com>
@drey drey force-pushed the feat/values-http-svc branch from d31c767 to 2d58796 Compare July 13, 2026 12:13
Signed-off-by: Ilya Drey <ilya.drey@flant.com>
@drey drey force-pushed the feat/values-http-svc branch from 848c188 to 886e016 Compare July 13, 2026 12:30
drey added 4 commits July 13, 2026 15:56
Signed-off-by: Ilya Drey <ilya.drey@flant.com>
Signed-off-by: Ilya Drey <ilya.drey@flant.com>
Signed-off-by: Ilya Drey <ilya.drey@flant.com>
Signed-off-by: Ilya Drey <ilya.drey@flant.com>
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