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.
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
--dynamicflag toaicr bundlethat declares specific value paths as install-time parameters:For each component with dynamic values, the bundler outputs a
cluster-values.yamlstub alongside the existingvalues.yamlfor the user to fill in:Helm deployer: Works cleanly today — Helm natively merges multiple values files:
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 viavaluesObjecton the root Application.Success Criteria
--dynamicflag accepted byaicr bundleto declare install-time value pathsvalues.yaml, output ascluster-values.yamlstubs per componentdeploy.shsupports passing cluster values filescluster-values.yaml--dynamic(fully backwards compatible)argocd-ocideployer that produces a Helm-based app-of-apps for OCI + dynamic valuesComponent
Bundlers
Priority
Important (would improve my workflow)
Compatibility / Breaking Changes
The
--dynamicflag is opt-in. Existing deployers (helm,argocd) work exactly as they do today. Theargocd-ocideployer is additive.