Skip to content

[Feature]: Support dynamic install-time values in bundle output #515

Description

@lockwobr

Feature Summary

Support declaring value paths as dynamic at bundle time so they are omitted from the resolved output and provided at install time. This enables reusable bundles across clusters without rebuilding.

Problem/Use Case

Component Helm charts sometimes require values that are cluster-specific and not known at bundle time — for example, Alloy needing a cluster name or subnet reference. Today AICR fully resolves all values at bundle time, requiring a separate bundle per cluster. This is the "render per-cluster at build time" pattern that ADR-025 lists as an existing workaround.

For OCI-published bundles, this limitation means you can't share a single immutable image across clusters — cluster-specific values are baked in. Separating static from dynamic values is what makes a bundle reusable as an OCI image: the image contains only the resolved values, and cluster-specific configuration is provided at install time.

Proposed Solution

Add an opt-in --dynamic flag to aicr bundle that declares specific value paths as install-time parameters:

aicr bundle --recipe recipe.yaml \
  --dynamic alloy:clusterName \
  --dynamic alloy:subnetName

For each component with dynamic values, the bundler outputs a cluster-values.yaml stub alongside the existing values.yaml for the user to fill in:

bundle/
├── alloy/
│   ├── values.yaml            # static, resolved at bundle time
│   └── cluster-values.yaml    # dynamic stub, fill in at install time
├── gpu-operator/
│   └── values.yaml            # no dynamic values, nothing extra

Helm deployer: Works cleanly today — Helm natively merges multiple values files:

helm upgrade --install ... -f values.yaml -f cluster-values.yaml

Existing ArgoCD deployer (--deployer argocd): Continues to work as-is for GitOps workflows where the bundle is pushed to a Git repo. Dynamic stubs can be filled in before committing.

New ArgoCD OCI deployer (--deployer argocd-oci): For the ArgoCD + OCI case, a new deployer would be needed. ArgoCD pulls the image directly so you can't edit files inside it — dynamic values need to be injected through ArgoCD's own mechanisms. This deployer would produce a Helm-based app-of-apps (closer to ADR-025's approach), giving ArgoCD a native way to inject values via valuesObject on the root Application.

Success Criteria

  • --dynamic flag accepted by aicr bundle to declare install-time value paths
  • Dynamic paths omitted from values.yaml, output as cluster-values.yaml stubs per component
  • deploy.sh supports passing cluster values files
  • Same bundle output deployable to multiple clusters by providing different cluster-values.yaml
  • Bundle remains functional without --dynamic (fully backwards compatible)
  • New argocd-oci deployer that produces a Helm-based app-of-apps for OCI + dynamic values

Component

Bundlers

Priority

Important (would improve my workflow)

Compatibility / Breaking Changes

The --dynamic flag is opt-in. Existing deployers (helm, argocd) work exactly as they do today. The argocd-oci deployer is additive.

Metadata

Metadata

Fields

No fields configured for Enhancement.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions