Pending<T> system with a database endpoint flowing into a Helm chart. The deploy block is where that pattern lives in practice — it’s the purpose-built ubx block for Helm releases, ArgoCD applications, and Flux kustomizations. Unlike a raw unit "kubernetes_helm_release" block, deploy "helm" is aware of the Pending type system from the ground up: every value in its values map can be a mix of resolved inputs and pending infrastructure outputs, and ubx generates exactly the right .apply() chains to sequence the Helm release after its dependencies. This tutorial focuses on the deploy "helm" block specifically — the chart name, version, namespace, and values — and shows how pending infrastructure outputs flow into Helm values cleanly.
What you’ll learn
- The
deploy "helm"block syntax — chart, version, namespace, values - How
Pending<T>infrastructure outputs wire into Helm values automatically - How ubx sequences the Helm release after its infrastructure dependencies
Why this matters
deploy "helm" is the bridge between infrastructure provisioning and application deployment. Reference a resource output directly in the values map and the RDS endpoint becomes a database URL in a Helm values map — no CI glue, no manual copy-paste, no drift between what Terraform knows and what Helm uses.The source code
How it works
deploy detects Pending values in its values map
During the IR pass, ubx scans the
values map for pending resource references. db_host = unit.aws_rds_instance.db.endpoint is Pending<string>. The IR records this as a pending dependency on the RDS instance.The emitter wraps the Chart in an .apply() chain
Because
db_host is pending, the entire deploy "helm" "backend" block must wait for db.endpoint to resolve. The emitter generates db.endpoint.apply(endpoint => new helm.v3.Chart(...)), ensuring Pulumi sequences the Helm release after the RDS instance.What ubx generates
Common mistakes
Run it
What you learned
deploy "helm" wires pending infrastructure outputs into Helm values automaticallyubx sequences the Helm release after its pending dependencies via
.apply() chainsResolved values are inlined directly — only pending values drive sequencing
Next steps
sync ArgoCD application
Register a GitOps application with ArgoCD
deploy block reference
Full deploy block syntax
Full runnable example: github.com/ubiquex/ubx-examples/25-deploy-helm-chart

