@@ -20,6 +20,8 @@ SHELL := /usr/bin/env bash
2020
2121.DEFAULT_GOAL := help
2222
23+ VERSION ?= $(shell cat clusterctl-settings.json | jq .config.nextVersion -r)
24+
2325# Use GOPROXY environment variable if set
2426GOPROXY := $(shell go env GOPROXY)
2527ifeq (,$(strip $(GOPROXY ) ) )
@@ -31,8 +33,9 @@ export GOPROXY
3133export GO111MODULE := on
3234
3335# Directories
34- BIN_DIR := bin
35- TOOLS_DIR := hack/tools
36+ ROOT_DIR: =$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST ) ) ) )
37+ BIN_DIR := $(ROOT_DIR ) /bin
38+ TOOLS_DIR := $(ROOT_DIR ) /hack/tools
3639TOOLS_BIN_DIR := $(TOOLS_DIR ) /bin
3740
3841# Binaries
@@ -51,6 +54,35 @@ CRD_ROOT ?= $(MANIFEST_ROOT)/crd/bases
5154WEBHOOK_ROOT ?= $(MANIFEST_ROOT ) /webhook
5255RBAC_ROOT ?= $(MANIFEST_ROOT ) /rbac
5356GC_KIND ?= true
57+ RELEASE_DIR := out
58+ BUILD_DIR := .build
59+ OVERRIDES_DIR := $(HOME ) /.cluster-api/overrides/infrastructure-vsphere/$(VERSION )
60+
61+ # Architecture variables
62+ ARCH ?= amd64
63+ ALL_ARCH = amd64 arm arm64 ppc64le s390x
64+
65+ # Common docker variables
66+ IMAGE_NAME ?= manager
67+ PULL_POLICY ?= Always
68+ # Hosts running SELinux need :z added to volume mounts
69+ SELINUX_ENABLED := $(shell cat /sys/fs/selinux/enforce 2> /dev/null || echo 0)
70+
71+ ifeq ($(SELINUX_ENABLED ) ,1)
72+ DOCKER_VOL_OPTS? =:z
73+ endif
74+
75+
76+ # Release docker variables
77+ RELEASE_REGISTRY := gcr.io/cluster-api-provider-vsphere/release
78+ RELEASE_CONTROLLER_IMG := $(RELEASE_REGISTRY ) /$(IMAGE_NAME )
79+
80+ # Development Docker variables
81+ DEV_REGISTRY ?= gcr.io/$(shell gcloud config get-value project)
82+ DEV_CONTROLLER_IMG ?= $(DEV_REGISTRY ) /vsphere-$(IMAGE_NAME )
83+ DEV_TAG ?= dev
84+ DEV_MANIFEST_IMG := $(DEV_CONTROLLER_IMG ) -$(ARCH )
85+
5486
5587# # --------------------------------------
5688# # Help
@@ -74,7 +106,7 @@ e2e-image: ## Build the e2e manager image
74106.PHONY : e2e
75107e2e : e2e-image
76108e2e : # # Run e2e tests
77- time ginkgo -v ./test/e2e -- --e2e.config=" $( abspath test/e2e/e2e.conf) " --e2e.teardownKind=$(GC_KIND )
109+ time ginkgo -v ./test/e2e -- --e2e.config=" $( abspath test/e2e/e2e.conf) " --e2e.teardownKind=$(GC_KIND ) $( E2E_ARGS )
78110
79111# # --------------------------------------
80112# # Binaries
@@ -122,7 +154,7 @@ lint-go-full: lint-go ## Run slower linters to detect possible issues
122154
123155.PHONY : lint-markdown
124156lint-markdown : # # Lint the project's markdown
125- docker run --rm -v " $$ (pwd)" :/build gcr.io/cluster-api-provider-vsphere/extra/mdlint:0.17.0 -- /md/lint -i vendor -i contrib/haproxy/openapi .
157+ docker run --rm -v " $$ (pwd)" :/build$( DOCKER_VOL_OPTS ) gcr.io/cluster-api-provider-vsphere/extra/mdlint:0.17.0 -- /md/lint -i vendor -i contrib/haproxy/openapi .
126158
127159.PHONY : lint-shell
128160lint-shell : # # Lint the project's shell scripts
@@ -179,24 +211,79 @@ generate-manifests: $(CONTROLLER_GEN) ## Generate manifests e.g. CRD, RBAC etc.
179211# # Release
180212# # --------------------------------------
181213
182- .PHONY : release-manifests
183- release-manifests : # # Builds the manifests to publish with a release
214+ $(RELEASE_DIR ) :
215+ @mkdir -p $(RELEASE_DIR )
216+
217+
218+ $(BUILD_DIR ) :
219+ @mkdir -p $(BUILD_DIR )
220+
221+ $(OVERRIDES_DIR ) :
222+ @mkdir -p $(OVERRIDES_DIR )
223+
224+ .PHONY : dev-version-check
225+ dev-version-check :
184226ifndef VERSION
185- $(error VERSION is undefined )
227+ $(error VERSION must be set )
186228endif
187- @mkdir -p out
188- cd config/manager/; ../../"$(KUSTOMIZE)" edit set image gcr.io/cluster-api-provider-vsphere/release/manager:"$(VERSION)"
189- "$(KUSTOMIZE)" build config/default > out/infrastructure-components.yaml
229+
230+ .PHONY : release-version-check
231+ release-version-check :
232+ ifeq ($(VERSION ) , 0.0.0)
233+ $(error VERSION must be >0.0.0 for release)
234+ endif
235+
236+ .PHONY : release-manifests
237+ release-manifests :
238+ $(MAKE ) manifests STAGE=release MANIFEST_DIR=$(RELEASE_DIR ) PULL_POLICY=IfNotPresent IMAGE=$(RELEASE_CONTROLLER_IMG ) :$(VERSION )
239+
240+ .PHONY : release-overrides
241+ release-overrides :
242+ $(MAKE ) manifests STAGE=release MANIFEST_DIR=$(OVERRIDES_DIR ) PULL_POLICY=IfNotPresent IMAGE=$(RELEASE_CONTROLLER_IMG ) :$(VERSION )
243+
244+ .PHONY : dev-manifests
245+ dev-manifests :
246+ $(MAKE ) manifests STAGE=dev MANIFEST_DIR=$(OVERRIDES_DIR ) PULL_POLICY=Always IMAGE=$(DEV_CONTROLLER_IMG ) :$(DEV_TAG )
247+
248+ .PHONY : manifests
249+ manifests : $(STAGE ) -version-check $(STAGE ) -flavors $(MANIFEST_DIR ) $(BUILD_DIR ) $(KUSTOMIZE )
250+ rm -rf $(BUILD_DIR ) /config
251+ cp -R config $(BUILD_DIR )
252+ sed -i' ' -e ' s@imagePullPolicy: .*@imagePullPolicy: ' " $( PULL_POLICY) " ' @' $(BUILD_DIR ) /config/manager/manager_pull_policy.yaml
253+ sed -i' ' -e ' s@image: .*@image: ' " $( IMAGE) " ' @' $(BUILD_DIR ) /config/manager/manager_image_patch.yaml
254+ " $( KUSTOMIZE) " build $(BUILD_DIR ) /config > $(MANIFEST_DIR ) /infrastructure-components.yaml
255+
190256# # --------------------------------------
191257# # Cleanup / Verification
192258# # --------------------------------------
193259
260+ .PHONY : flavors
261+ flavors : $(FLAVOR_DIR )
262+ go run ./packaging/flavorgen -f multi-host > $(FLAVOR_DIR ) /cluster-template.yaml
263+
264+ .PHONY : release-flavors # # Create release flavor manifests
265+ release-flavors : release-version-check
266+ $(MAKE ) flavors FLAVOR_DIR=$(RELEASE_DIR )
267+
268+ .PHONY : dev-flavors # # Create release flavor manifests
269+ dev-flavors :
270+ $(MAKE ) flavors FLAVOR_DIR=$(OVERRIDES_DIR )
271+
272+ .PHONY : overrides # # Generates flavors as clusterctl overrides
273+ overrides : version-check $(OVERRIDES_DIR )
274+ go run ./packaging/flavorgen -f multi-host > $(OVERRIDES_DIR ) /cluster-template.yaml
275+
194276.PHONY : clean
195277clean : # # Run all the clean targets
196278 $(MAKE ) clean-bin
197279 $(MAKE ) clean-temporary
198280 $(MAKE ) clean-release
199281 $(MAKE ) clean-examples
282+ $(MAKE ) clean-build
283+
284+ .PHONY : clean-build
285+ clean-build :
286+ rm -rf $(BUILD_DIR )
200287
201288.PHONY : clean-bin
202289clean-bin : # # Remove all generated binaries
@@ -238,3 +325,15 @@ verify-crds: ## Verifies the committed CRDs are up-to-date
238325check : # # Verify and lint the project
239326 $(MAKE ) verify
240327 $(MAKE ) lint
328+
329+ # # --------------------------------------
330+ # # Docker
331+ # # --------------------------------------
332+
333+ .PHONY : docker-build
334+ docker-build : # # Build the docker image for controller-manager
335+ docker build --pull --build-arg ARCH=$(ARCH ) . -t $(DEV_CONTROLLER_IMG ) :$(DEV_TAG )
336+
337+ .PHONY : docker-push
338+ docker-push : # # Push the docker image
339+ docker push $(DEV_CONTROLLER_IMG ) :$(DEV_TAG )
0 commit comments