Viewing legacy documentation for Kubebuilder, check out the latest documentation instead.

Makefile Helpers

By default, the projects are scaffolded with a Makefile. You can customize and update this file as please you. Here, you will find some helpers that can be useful.

To debug with go-delve

The projects are built with Go and you have a lot of ways to do that. One of the options would be use go-delve for it:

# Run with Delve for development purposes against the configured Kubernetes cluster in ~/.kube/config
# Delve is a debugger for the Go programming language. More info: https://github.com/go-delve/delve
run-delve: generate fmt vet manifests
    go build -gcflags "all=-trimpath=$(shell go env GOPATH)" -o bin/manager main.go
    dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./bin/manager

To change the version of CRDs

The controller-gen program (from controller-tools) generates CRDs for kubebuilder projects, wrapped in the following make rule:

manifests: controller-gen
	$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases

controller-gen lets you specify what CRD API version to generate (either “v1”, the default, or “v1beta1”). You can direct it to generate a specific version by adding crd:crdVersions={<version>} to your CRD_OPTIONS, found at the top of your Makefile:

CRD_OPTIONS ?= "crd:crdVersions={v1beta1},preserveUnknownFields=false"

manifests: controller-gen
	$(CONTROLLER_GEN) rbac:roleName=manager-role $(CRD_OPTIONS) webhook paths="./..." output:crd:artifacts:config=config/crd/bases

To get all the manifests without deploying

By adding make dry-run you can get the patched manifests in the dry-run folder, unlike make depĺoy which runs kustomize and kubectl apply.

To accomplish this, add the following lines to the Makefile:

dry-run: manifests
	cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}
	mkdir -p dry-run
	$(KUSTOMIZE) build config/default > dry-run/manifests.yaml