1
1
CHART_REPO_URL ?= http://example.com
2
2
HELM_REPO_DEST ?= /tmp/gh-pages
3
3
OPERATOR_NAME ?=$(shell basename -z `pwd`)
4
+ HELM_VERSION ?= v3.8.0
5
+ KIND_VERSION ?= v0.11.1
6
+ KUBECTL_VERSION ?= v1.21.1
7
+ VAULT_VERSION ?= 1.9.3
4
8
5
9
# VERSION defines the project version for the bundle.
6
10
# Update this value when you upgrade the version of your project.
@@ -94,6 +98,13 @@ vet: ## Run go vet against code.
94
98
test : manifests generate fmt vet envtest # # Run tests.
95
99
KUBEBUILDER_ASSETS=" $( shell $( ENVTEST) use $( ENVTEST_K8S_VERSION) -p path) " go test ./... -coverprofile cover.out
96
100
101
+ .PHONY : kind-setup
102
+ kind-setup : kind kubectl helm
103
+ $(KIND ) delete cluster
104
+ $(KIND ) create cluster --image docker.io/kindest/node:$(KUBECTL_VERSION ) --config=./integration/cluster-kind.yaml
105
+ $(HELM ) upgrade ingress-nginx ./integration/helm/ingress-nginx -i --create-namespace -n ingress-nginx --atomic
106
+ $(KUBECTL ) wait --namespace ingress-nginx --for=condition=ready pod --selector=app.kubernetes.io/component=controller --timeout=90s
107
+
97
108
# #@ Build
98
109
99
110
build : generate fmt vet # # Build manager binary.
@@ -110,18 +121,18 @@ docker-push: ## Push docker image with the manager.
110
121
111
122
# #@ Deployment
112
123
113
- install : manifests kustomize # # Install CRDs into the K8s cluster specified in ~/.kube/config.
114
- $(KUSTOMIZE ) build config/crd | kubectl apply -f -
124
+ install : manifests kustomize kubectl # # Install CRDs into the K8s cluster specified in ~/.kube/config.
125
+ $(KUSTOMIZE ) build config/crd | $( KUBECTL ) apply -f -
115
126
116
- uninstall : manifests kustomize # # Uninstall CRDs from the K8s cluster specified in ~/.kube/config.
117
- $(KUSTOMIZE ) build config/crd | kubectl delete -f -
127
+ uninstall : manifests kustomize kubectl # # Uninstall CRDs from the K8s cluster specified in ~/.kube/config.
128
+ $(KUSTOMIZE ) build config/crd | $( KUBECTL ) delete -f -
118
129
119
- deploy : manifests kustomize # # Deploy controller to the K8s cluster specified in ~/.kube/config.
130
+ deploy : manifests kustomize kubectl # # Deploy controller to the K8s cluster specified in ~/.kube/config.
120
131
cd config/manager && $(KUSTOMIZE ) edit set image controller=${IMG}
121
- $(KUSTOMIZE ) build config/default | kubectl apply -f -
132
+ $(KUSTOMIZE ) build config/default | $( KUBECTL ) apply -f -
122
133
123
- undeploy : # # Undeploy controller from the K8s cluster specified in ~/.kube/config.
124
- $(KUSTOMIZE ) build config/default | kubectl delete -f -
134
+ undeploy : kustomize kubectl # # Undeploy controller from the K8s cluster specified in ~/.kube/config.
135
+ $(KUSTOMIZE ) build config/default | $( KUBECTL ) delete -f -
125
136
126
137
127
138
CONTROLLER_GEN = $(shell pwd) /bin/controller-gen
@@ -207,7 +218,7 @@ catalog-push: ## Push a catalog image.
207
218
$(MAKE ) docker-push IMG=$(CATALOG_IMG )
208
219
209
220
# Generate helm chart
210
- helmchart : kustomize
221
+ helmchart : kustomize helm
211
222
mkdir -p ./charts/${OPERATOR_NAME} /templates
212
223
mkdir -p ./charts/${OPERATOR_NAME} /crds
213
224
repo=${OPERATOR_NAME} envsubst < ./config/local-development/tilt/env-replace-image.yaml > ./config/local-development/tilt/replace-image.yaml
@@ -220,15 +231,80 @@ helmchart: kustomize
220
231
version=${VERSION} image_repo=$$ {IMG%:* } envsubst < ./config/helmchart/values.yaml.tpl > ./charts/${OPERATOR_NAME} /values.yaml
221
232
sed -i ' 1s/^/{{ if .Values.enableMonitoring }}/' ./charts/${OPERATOR_NAME} /templates/monitoring.coreos.com_v1_servicemonitor_${OPERATOR_NAME} -controller-manager-metrics-monitor.yaml
222
233
echo {{ end }} >> ./charts/${OPERATOR_NAME} /templates/monitoring.coreos.com_v1_servicemonitor_${OPERATOR_NAME} -controller-manager-metrics-monitor.yaml
223
- helm lint ./charts/${OPERATOR_NAME}
234
+ $( HELM ) lint ./charts/${OPERATOR_NAME}
224
235
225
236
helmchart-repo : helmchart
226
237
mkdir -p ${HELM_REPO_DEST} /${OPERATOR_NAME}
227
- helm package -d ${HELM_REPO_DEST} /${OPERATOR_NAME} ./charts/${OPERATOR_NAME}
228
- helm repo index --url ${CHART_REPO_URL} ${HELM_REPO_DEST}
238
+ $( HELM ) package -d ${HELM_REPO_DEST} /${OPERATOR_NAME} ./charts/${OPERATOR_NAME}
239
+ $( HELM ) repo index --url ${CHART_REPO_URL} ${HELM_REPO_DEST}
229
240
230
241
helmchart-repo-push : helmchart-repo
231
242
git -C ${HELM_REPO_DEST} add .
232
243
git -C ${HELM_REPO_DEST} status
233
244
git -C ${HELM_REPO_DEST} commit -m " Release ${VERSION} "
234
245
git -C ${HELM_REPO_DEST} push origin " gh-pages"
246
+
247
+ HELM_TEST_IMG_NAME ?= ${OPERATOR_NAME}
248
+ HELM_TEST_IMG_TAG ?= helmchart-test
249
+
250
+ # Deploy the helmchart to a kind cluster to test deployment.
251
+ # If the test-metrics sidecar in the prometheus pod is ready, the metrics work and the test is successful.
252
+ .PHONY : helmchart-test
253
+ helmchart-test : kind-setup helmchart
254
+ $(MAKE ) IMG=${HELM_TEST_IMG_NAME} :${HELM_TEST_IMG_TAG} docker-build
255
+ docker tag ${HELM_TEST_IMG_NAME} :${HELM_TEST_IMG_TAG} docker.io/library/${HELM_TEST_IMG_NAME} :${HELM_TEST_IMG_TAG}
256
+ $(KIND ) load docker-image ${HELM_TEST_IMG_NAME} :${HELM_TEST_IMG_TAG} docker.io/library/${HELM_TEST_IMG_NAME} :${HELM_TEST_IMG_TAG}
257
+ $(HELM ) repo add jetstack https://charts.jetstack.io
258
+ $(HELM ) install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.7.1 --set installCRDs=true
259
+ $(HELM ) repo add prometheus-community https://prometheus-community.github.io/helm-charts
260
+ $(HELM ) install kube-prometheus-stack prometheus-community/kube-prometheus-stack -n default -f integration/kube-prometheus-stack-values.yaml
261
+ $(HELM ) install prometheus-rbac integration/helm/prometheus-rbac -n default
262
+ $(HELM ) upgrade -i ${OPERATOR_NAME} -local charts/${OPERATOR_NAME} -n ${OPERATOR_NAME} -local --create-namespace \
263
+ --set enableCertManager=true \
264
+ --set image.repository=${HELM_TEST_IMG_NAME} \
265
+ --set image.tag=${HELM_TEST_IMG_TAG}
266
+ $(KUBECTL ) wait --namespace ${OPERATOR_NAME} -local --for=condition=ready pod --selector=app.kubernetes.io/name=${OPERATOR_NAME} --timeout=90s
267
+ $(KUBECTL ) wait --namespace default --for=condition=ready pod prometheus-kube-prometheus-stack-prometheus-0 --timeout=180s
268
+ $(KUBECTL ) exec prometheus-kube-prometheus-stack-prometheus-0 -n default -c test-metrics -- /bin/sh -c " echo 'Example metrics...' && cat /tmp/ready"
269
+
270
+ .PHONY : kind
271
+ KIND = ./bin/kind
272
+ kind : # # Download kind locally if necessary.
273
+ ifeq (,$(wildcard $(KIND ) ) )
274
+ ifeq (,$(shell which kind 2>/dev/null) )
275
+ $(call go-get-tool,$(KIND),sigs.k8s.io/kind@${KIND_VERSION})
276
+ else
277
+ KIND = $(shell which kind)
278
+ endif
279
+ endif
280
+
281
+ .PHONY : kubectl
282
+ KUBECTL = ./bin/kubectl
283
+ kubectl : # # Download kubectl locally if necessary.
284
+ ifeq (,$(wildcard $(KUBECTL ) ) )
285
+ ifeq (,$(shell which kubectl 2>/dev/null) )
286
+ echo "Downloading ${KUBECTL} for managing k8s resources."
287
+ OS=$(shell go env GOOS) ;\
288
+ ARCH=$(shell go env GOARCH) ;\
289
+ curl --create-dirs -sSLo ${KUBECTL} https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/$${OS}/$${ARCH}/kubectl ;\
290
+ chmod +x ${KUBECTL}
291
+ else
292
+ KUBECTL = $(shell which kubectl)
293
+ endif
294
+ endif
295
+
296
+ .PHONY : helm
297
+ HELM = ./bin/helm
298
+ helm : # # Download helm locally if necessary.
299
+ ifeq (,$(wildcard $(HELM ) ) )
300
+ ifeq (,$(shell which helm 2>/dev/null) )
301
+ echo "Downloading ${HELM}."
302
+ OS=$(shell go env GOOS) ;\
303
+ ARCH=$(shell go env GOARCH) ;\
304
+ curl --create-dirs -sSLo ${HELM}.tar.gz https://get.helm.sh/helm-${HELM_VERSION}-$${OS}-$${ARCH}.tar.gz ;\
305
+ tar -xf ${HELM}.tar.gz -C ./bin/ ;\
306
+ mv ./bin/$${OS}-$${ARCH}/helm ${HELM}
307
+ else
308
+ HELM = $(shell which helm)
309
+ endif
310
+ endif
0 commit comments