Crossplane Configuration (and local manifests) that deploy Open Forms using composed Kubernetes resources only — no provider-helm and no Helm Release at runtime. Manifests were derived from the maykinmedia/openforms Helm chart v1.12.0 (app 3.3.9).
→ End users / marketplace: parameter reference, quickstart, and Helm-value mapping — USAGE.md (similar role to the upstream chart README).
This folder mirrors the role of configuration-aws-eks: a dedicated place for install docs, examples, and reference material — here for an application XR instead of EKS.
| Piece | Role |
|---|---|
| apis/definition.yaml | XRD: OpenForms (openforms.example.org/v1alpha1) |
| apis/composition.yaml | Pipeline: Patch & Transform (embedded chart manifests) + function-auto-ready |
| crossplane.yaml | Package metadata + dependsOn for P&T and auto-ready |
| reference/ | helm template snapshots for diffing when the upstream chart changes |
| scripts/generate_composition.py | Regenerates apis/composition.yaml from the external-Redis reference |
Scope of the port (important):
- The Composition embeds the external Redis variant:
helm templatewithtags.redis=falseand broker/result URLs from the XR. You must run Redis (or compatible) yourself. - A full render with the Bitnami Redis subchart is kept as reference/helm-template-openforms-1.12.0-full.yaml. To ship Redis inside the same Composition, copy the extra objects from that file into
composition.yaml(or extend the generator) and add parameters — same maintenance story.
Embedded objects use the Helm release name demo in metadata.name (demo-openforms, …), labels (app.kubernetes.io/instance: demo), and ConfigMap strings (ALLOWED_HOSTS, nginx proxy_pass, rate-limit zones). Your OpenForms XR metadata.name must be demo.
To use another release name, re-render with helm template MYREL ..., replace MYREL consistently in the reference YAML, and run scripts/generate_composition.py again (or sed the bases).
spec.parameters.namespace patches metadata.namespace on every object (default openforms). Internal strings such as demo-openforms.openforms in ConfigMaps assume namespace openforms. If you change the namespace parameter, regenerate from Helm with -n <ns> and update the reference, then re-run the generator — do not only patch metadata.namespace.
- Crossplane v2 with Composition functions (Pipeline mode).
- function-patch-and-transform and function-auto-ready installed (see examples/05-app-with-deployment).
- RBAC allowing Crossplane to create the composed types (ServiceAccount, Secret, ConfigMap, PVC, Service, Deployment, etc.) in the target namespace — same idea as 05-app-with-deployment README.
kubectl apply -f apis/definition.yaml
kubectl apply -f apis/composition.yaml
# Install functions if needed, then:
kubectl apply -f openforms-xr-example.yamlEdit openforms-xr-example.yaml (secrets, DB, Redis URLs) before applying.
From this directory:
# Exclude reference helm dumps, example install CR, generator script, and sample XR — they are not package metadata.
crossplane xpkg build --package-root=. -o configuration-openforms.xpkg \
--ignore='reference/*.yaml,examples/*.yaml,scripts/*.py,openforms-xr-example.yaml'
# push to your OCI registry, then apply the install manifest:
kubectl apply -f examples/install-from-registry.yamlAdjust YOUR_REGISTRY/configuration-openforms:v0.1.0 in examples/install-from-registry.yaml.
-
Pull the new chart version and run
helm templatewith the same options used for reference/helm-template-openforms-1.12.0-external-redis.yaml (document flags in a comment at the top of that file when you change them). -
Diff the new YAML against the saved reference.
-
Run:
python3 scripts/generate_composition.py \ reference/helm-template-openforms-1.12.0-external-redis.yaml \ -o apis/composition.yaml
-
Re-add any hand-written patches in
generate_composition.pyif you extendedpatches_for(). -
Rebuild the xpkg and roll out.
- Helm is a development tool here: it renders the chart to reference YAML and keeps the port honest.
- Runtime is Crossplane Composition only — no Helm operator on the cluster for this app.
Design note: Why we expose only some chart values as XR parameters — and when provider-helm Release might be a better fit than mirroring all of values.yaml — is explained in USAGE.md — Design: curated parameters vs full Helm values.
- Upstream chart: maykinmedia/charts — openforms
- Chart repo:
https://maykinmedia.github.io/charts/