https://github.com/hutstep/crossplane-kind-azure-bootstrap
Crossplane + kind + Azure provider family bootstrap. One-command local setup with reliable waits, cleanup, and Makefile targets.
https://github.com/hutstep/crossplane-kind-azure-bootstrap
azure bootstrap crossplane kind kubernetes local-development
Last synced: about 1 month ago
JSON representation
Crossplane + kind + Azure provider family bootstrap. One-command local setup with reliable waits, cleanup, and Makefile targets.
- Host: GitHub
- URL: https://github.com/hutstep/crossplane-kind-azure-bootstrap
- Owner: hutstep
- License: mit
- Created: 2025-08-09T09:26:45.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-08-09T10:58:49.000Z (10 months ago)
- Last Synced: 2025-08-09T11:36:46.623Z (10 months ago)
- Topics: azure, bootstrap, crossplane, kind, kubernetes, local-development
- Language: Shell
- Homepage:
- Size: 19.5 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# crossplane-kind-azure-bootstrap
[](https://github.com/hutstep/crossplane-kind-azure-bootstrap/actions/workflows/lint.yml) [](https://github.com/hutstep/crossplane-kind-azure-bootstrap/actions/workflows/e2e.yml) [](LICENSE)
๐ Bootstrap a local [kind](https://kind.sigs.k8s.io/) cluster with [Crossplane](https://crossplane.io/), 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.
## โจ Features
- ๐งฐ 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
## โ
Prerequisites
- ๐ณ 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/\*).
## ๐ฆ Quick start
- Non-interactive default install (creates kind cluster if missing):
```bash
scripts/bootstrap-crossplane-kind.sh --yes
```
- Use existing context (no cluster creation):
```bash
scripts/bootstrap-crossplane-kind.sh --yes --skip-cluster
```
- Recreate cluster and override versions:
```bash
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
```
## ๐งฐ Makefile targets
- Bootstrap (idempotent):
```bash
make bootstrap
```
- Dry-run (print planned actions):
```bash
make dry-run
```
- Recreate cluster then bootstrap:
```bash
make recreate
```
- Use current context (no cluster creation):
```bash
make skip-cluster
```
- Tools check (versions, network reachability):
```bash
make tools-check
```
- Cleanup providers/functions/Helm release (keep cluster):
```bash
make clean
```
- Cleanup plus remove Function package CRDs (keeps cluster):
```bash
make clean-force
```
- Cleanup and delete kind cluster:
```bash
make clean-delete-cluster
```
## โ๏ธ Script flags (most-used)
| 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` |
## ๐ฆ What gets installed
- 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
## ๐ Verify installation
```bash
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
```
## ๐งน Cleanup
- Keep cluster, remove providers/functions and Crossplane Helm release:
```bash
scripts/bootstrap-crossplane-kind.sh --cleanup
```
- If function pods linger or are recreated by FunctionRevisions, use force-clean:
```bash
scripts/bootstrap-crossplane-kind.sh --cleanup --force-clean
```
- Delete cluster too:
```bash
scripts/bootstrap-crossplane-kind.sh --cleanup --delete-cluster --yes
```
## ๐งช CI notes
- 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
## ๐ License
This project is licensed under the MIT License - see [LICENSE](LICENSE) for details.