🚀 Bootstrap a local kind cluster with Crossplane, the Crossplane provider family for Azure, and selected Composition Functions. Designed to be robust, idempotent, and non-interactive friendly for both local use and CI.
- 🧰 Creates or reuses a kind cluster (or targets current kubectl context)
- 📦 Installs Crossplane via Helm chart (chart version controllable)
- ☁️ Installs provider family for Azure (provider-family-azure)
- 🧩 Installs Crossplane Composition Functions:
- function-patch-and-transform
- function-environment-configs
- ✅ Reliable health waits with JSONPath fallback
- 🧹 Cleanup modes (keep cluster, delete cluster, and force-clean leftovers)
- 🧰 Makefile with common targets
- 🐳 Docker (required by kind)
- 🧱 kind ≥ 0.20.0
- ⎈ kubectl ≥ 1.25
- ⛵ Helm ≥ 3.11
- 🌐 Network access to:
Tip: Ensure all scripts in scripts/ are executable so you can run them directly (chmod +x scripts/*).
-
Non-interactive default install (creates kind cluster if missing):
scripts/bootstrap-crossplane-kind.sh --yes
-
Use existing context (no cluster creation):
scripts/bootstrap-crossplane-kind.sh --yes --skip-cluster
-
Recreate cluster and override versions:
scripts/bootstrap-crossplane-kind.sh --yes --recreate \ --cluster-name xp-dev --kind-node-image kindest/node:v1.33.1 \ --crossplane-version v1.20.1 \ --provider-azure-version v1.13.0 \ --func-pat-version v0.9.0 \ --func-envcfg-version v0.4.0
-
Bootstrap (idempotent):
make bootstrap
-
Dry-run (print planned actions):
make dry-run
-
Recreate cluster then bootstrap:
make recreate
-
Use current context (no cluster creation):
make skip-cluster
-
Tools check (versions, network reachability):
make tools-check
-
Cleanup providers/functions/Helm release (keep cluster):
make clean
-
Cleanup plus remove Function package CRDs (keeps cluster):
make clean-force
-
Cleanup and delete kind cluster:
make clean-delete-cluster
| Flag | Description | Default |
|---|---|---|
--yes |
Non-interactive assume-yes | false |
--cluster-name NAME |
Kind cluster name | crossplane-kind |
--kind-node-image IMAGE |
Node image | kindest/node:v1.33.1 |
--crossplane-version VER |
Crossplane Helm chart version | v1.20.1 |
--provider-azure-version V |
provider-family-azure version | v1.13.0 |
--func-pat-version V |
function-patch-and-transform version | v0.9.0 |
--func-envcfg-version V |
function-environment-configs version | v0.4.0 |
--skip-cluster |
Target current kubectl context; do not create kind | false |
--recreate |
Delete existing kind cluster with the same name first | false |
--wait-timeout DURATION |
Timeout for waits (e.g., 10m) |
10m |
--cleanup |
Remove providers/functions and Crossplane Helm release | false |
--delete-cluster |
With --cleanup, delete the kind cluster too |
false |
--force-clean |
With --cleanup, also remove Function package CRDs |
false |
--dry-run |
Print planned actions only | false |
--verbose |
Shell tracing (set -x) |
false |
- Crossplane Helm chart from charts.crossplane.io (chart version you choose)
- Provider family Azure package:
- xpkg.crossplane.io/crossplane-contrib/provider-family-azure:v1.13.0
- Composition Functions:
- xpkg.crossplane.io/crossplane-contrib/function-patch-and-transform:v0.9.0
- xpkg.crossplane.io/crossplane-contrib/function-environment-configs:v0.4.0
helm list -n crossplane-system
kubectl get providers.pkg.crossplane.io -o wide
kubectl get functions.pkg.crossplane.io -o wide
kubectl get pods -A-
Keep cluster, remove providers/functions and Crossplane Helm release:
scripts/bootstrap-crossplane-kind.sh --cleanup
-
If function pods linger or are recreated by FunctionRevisions, use force-clean:
scripts/bootstrap-crossplane-kind.sh --cleanup --force-clean
-
Delete cluster too:
scripts/bootstrap-crossplane-kind.sh --cleanup --delete-cluster --yes
- Ensure Docker-in-Docker or Docker is available on the runner (kind requires Docker).
- Cache Helm repository data to speed up runs:
- $HOME/.cache/helm
- optionally $HOME/.config/helm/repositories.yaml
This project is licensed under the MIT License - see LICENSE for details.