Authoring a Bundle
A bundle is defined in a bundle.yaml file inside the platform-stacks repository. It describes everything needed to deploy an application into a tenant cluster — inputs, defaults, resource groups, and dependencies between resources.
Bundle Structure
version: 0.0.1
name: aws/superset
slug: aws/superset
category: application
description: ...
spec:
defaults:
namespace: superset
inputs:
- name: cluster
resourceTypeId: aws-eks-cluster
description: Target cluster
groups:
- name: infra
resources:
- name: superset_k8s_namespace
resourceTypeId: k8s-manifest
config: ...
- name: app
resources:
- name: superset_helm_release
resourceTypeId: helm-release
dependsOn: [superset_k8s_namespace]
config: ...
Template Engine
Bundle configs use a three-pass template model:
| Pass | Syntax | Resolved By | Used For |
|---|---|---|---|
| Pass 1 | ${{ }} | Server (Nunjucks) | Inputs, defaults, structural decisions |
| Pass 2 | ${{ }} | Server (Nunjucks) | Dependency outputs wiring (deps.X.outputs.Y) |
| Pass 3 | {{ }} | Agent (Jinja2) | Credentials, cluster context, runtime values |
Rule: Use ${{ }} only for structural decisions (conditions, dependency wiring, defaults). Use {{ }} for all content rendering inside resource configs.
Resource Types
| Type | What It Does |
|---|---|
helm-release | Installs or upgrades a Helm chart via helm upgrade --install |
k8s-manifest | Applies a raw Kubernetes YAML manifest via kubectl apply |
tofu-module | Clones a git repo and runs tofu apply inside the cluster |
flow | A sequential pipeline of the above, executed in order |
Go Deeper
- Deployment Lifecycle
- Core Platform → Control Plane