mirror of
https://github.com/YuzuZensai/netbird-kubernetes-operator.git
synced 2026-09-13 10:49:15 +00:00
This changes the group reconcile to get the existing group first and then update it in place. If not done like this peers will be removed from the group on the next reconcile. Fixes #221
135 lines
4.9 KiB
Makefile
135 lines
4.9 KiB
Makefile
# Setting SHELL to bash allows bash commands to be executed by recipes.
|
|
# Options are set to exit when a recipe line exits non-zero or a piped command fails.
|
|
SHELL = /usr/bin/env bash -o pipefail
|
|
.SHELLFLAGS = -ec
|
|
|
|
GOARCH = $(shell go env GOARCH)
|
|
ifeq (,$(shell go env GOBIN))
|
|
GOBIN = $(shell go env GOPATH)/bin
|
|
else
|
|
GOBIN = $(shell go env GOBIN)
|
|
endif
|
|
|
|
IMG_REGISTRY ?= docker.io
|
|
IMG_REPOSITORY ?= netbirdio/kubernetes-operator
|
|
IMG_TAG ?= dev
|
|
IMG := $(IMG_REGISTRY)/$(IMG_REPOSITORY):$(IMG_TAG)
|
|
|
|
.PHONY: generate
|
|
generate: api/v1/zz_generated.deepcopy.go api/v1alpha1/zz_generated.deepcopy.go pkg/applyconfigurations helm/kubernetes-operator/crds docs/api-reference.md
|
|
|
|
api/v1/zz_generated.deepcopy.go api/v1alpha1/zz_generated.deepcopy.go: $(shell find api -not -name 'zz_generated*') hack/boilerplate.go.txt
|
|
@go tool controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
|
|
|
|
pkg/applyconfigurations: $(shell find api -not -name 'zz_generated*') hack/boilerplate.go.txt
|
|
@go tool controller-gen applyconfiguration:headerFile="hack/boilerplate.go.txt" object:headerFile="hack/boilerplate.go.txt" paths="./..."
|
|
@touch pkg/applyconfigurations
|
|
|
|
helm/kubernetes-operator/crds: $(shell find api)
|
|
@go tool controller-gen crd paths="./..." output:crd:artifacts:config=helm/kubernetes-operator/crds
|
|
@touch helm/kubernetes-operator/crds
|
|
|
|
docs/api-reference.md: $(shell find api) docs/.crd-ref-docs.yaml
|
|
@go tool crd-ref-docs --log-level error --output-path docs/api-reference.md --renderer markdown --source-path api/v1alpha1 --config docs/.crd-ref-docs.yaml
|
|
|
|
.PHONY: lint
|
|
lint:
|
|
@golangci-lint run ./...
|
|
|
|
.PHONY: test
|
|
test: setup-envtest
|
|
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path)" go test -v $$(go list ./... | grep -v /e2e) -coverprofile cover.out
|
|
|
|
.PHONY: test-e2e
|
|
test-e2e: generate
|
|
@command -v kind >/dev/null 2>&1 || { \
|
|
echo "Kind is not installed. Please install Kind manually."; \
|
|
exit 1; \
|
|
}
|
|
@kind get clusters | grep -q 'kind' || { \
|
|
echo "No Kind cluster is running. Please start a Kind cluster before running the e2e tests."; \
|
|
exit 1; \
|
|
}
|
|
go test ./test/e2e/ -v -ginkgo.v
|
|
|
|
.PHONY: build
|
|
build: generate bin/linux-$(GOARCH)/netbird-operator
|
|
|
|
bin/linux-%/netbird-operator: $(shell find api cmd internal pkg) go.mod go.sum
|
|
@CGO_ENABLED=0 GOOS=linux GOARCH=$(GOARCH) go build -ldflags="-w -s" -trimpath -o $@ cmd/main.go
|
|
|
|
.PHONY: build-image
|
|
build-image: build
|
|
@docker buildx build -t ${IMG} .
|
|
@echo ${IMG}
|
|
|
|
.PHONY: build-image-multiarch
|
|
build-image-multiarch: generate bin/linux-amd64/netbird-operator bin/linux-arm64/netbird-operator
|
|
@docker buildx build --platform linux/amd64,linux/arm64 -t ${IMG} .
|
|
@echo ${IMG}
|
|
|
|
## Generate a consolidated YAML with CRDs and deployment.
|
|
.PHONY: build-installer
|
|
build-installer: generate
|
|
mkdir -p manifests
|
|
helm template --include-crds kubernetes-operator helm/kubernetes-operator > manifests/install.yaml
|
|
|
|
##@ Deployment
|
|
|
|
.PHONY: install
|
|
install: generate
|
|
kubectl apply --server-side -f helm/kubernetes-operator/crds
|
|
|
|
.PHONY: uninstall
|
|
uninstall:
|
|
kubectl delete -f helm/kubernetes-operator/crds
|
|
|
|
run: install
|
|
kubectl create namespace netbird --dry-run=client -o yaml | kubectl apply -f -
|
|
go run cmd/main.go --enable-webhooks=false --netbird-api-key=$${NB_API_KEY} --runtime-namespace netbird
|
|
|
|
##@ Dependencies
|
|
|
|
## Location to install dependencies to
|
|
LOCALBIN ?= $(shell pwd)/bin
|
|
$(LOCALBIN):
|
|
mkdir -p $(LOCALBIN)
|
|
|
|
## Tool Binaries
|
|
ENVTEST ?= $(LOCALBIN)/setup-envtest
|
|
|
|
#ENVTEST_VERSION is the version of controller-runtime release branch to fetch the envtest setup script (i.e. release-0.20)
|
|
ENVTEST_VERSION ?= $(shell go list -m -f "{{ .Version }}" sigs.k8s.io/controller-runtime | awk -F'[v.]' '{printf "release-%d.%d", $$2, $$3}')
|
|
#ENVTEST_K8S_VERSION is the version of Kubernetes to use for setting up ENVTEST binaries (i.e. 1.31)
|
|
ENVTEST_K8S_VERSION ?= $(shell go list -m -f "{{ .Version }}" k8s.io/api | awk -F'[v.]' '{printf "1.%d", $$3}')
|
|
|
|
.PHONY: setup-envtest
|
|
setup-envtest: envtest ## Download the binaries required for ENVTEST in the local bin directory.
|
|
@echo "Setting up envtest binaries for Kubernetes version $(ENVTEST_K8S_VERSION)..."
|
|
@$(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path || { \
|
|
echo "Error: Failed to set up envtest binaries for version $(ENVTEST_K8S_VERSION)."; \
|
|
exit 1; \
|
|
}
|
|
|
|
.PHONY: envtest
|
|
|
|
envtest: $(ENVTEST) ## Download setup-envtest locally if necessary.
|
|
$(ENVTEST): $(LOCALBIN)
|
|
$(call go-install-tool,$(ENVTEST),sigs.k8s.io/controller-runtime/tools/setup-envtest,$(ENVTEST_VERSION))
|
|
|
|
# go-install-tool will 'go install' any package with custom target and name of binary, if it doesn't exist
|
|
# $1 - target path with name of binary
|
|
# $2 - package url which can be installed
|
|
# $3 - specific version of package
|
|
define go-install-tool
|
|
@[ -f "$(1)-$(3)" ] || { \
|
|
set -e; \
|
|
package=$(2)@$(3) ;\
|
|
echo "Downloading $${package}" ;\
|
|
rm -f $(1) || true ;\
|
|
GOBIN=$(LOCALBIN) go install $${package} ;\
|
|
mv $(1) $(1)-$(3) ;\
|
|
} ;\
|
|
ln -sf $(1)-$(3) $(1)
|
|
endef
|