-
Notifications
You must be signed in to change notification settings - Fork 4
/
Makefile
executable file
·168 lines (137 loc) · 4.33 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# Image URL to use all building/pushing image targets
IMG ?= r.awsctrl.io/manager:latest
BUILD_IMG ?= 591784189070.dkr.ecr.us-west-2.amazonaws.com/manager:latest
# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
CRD_OPTIONS ?= "crd:trivialVersions=true"
# Use AWS Client
USE_AWS_CLIENT ?= false
# Use existing Cluster
USE_EXISTING_CLUSTER ?= false
# Use Go Modules with the awsctrl
GO111MODULE ?= on
# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
ifeq (,$(shell go env GOBIN))
GOBIN=$(shell go env GOPATH)/bin
else
GOBIN=$(shell go env GOBIN)
endif
all: manager
# Stub for ci
test-unit: test
# Install CI will configure
install-ci: kubebuilder set-env kind #kubectl kubectl-context kubectl-verify
# Run tests
test: generate fmt vet manifests
go test `go list ./... | grep -v e2e` -coverprofile coverage.out -covermode atomic
test-e2e-%:
ifeq (true,${USE_EXISTING_CLUSTER})
export KUBECONFIG=${PWD}/kubeconfig-e2e-$*
@$(MAKE) kind-create-awsctrl-$*
endif
go test -coverprofile coverage.out -covermode atomic -v -coverpkg ./controllers/$*/... ./e2e/$*/...
ifeq (true,${USE_EXISTING_CLUSTER})
@$(MAKE) kind-delete-awsctrl-$*
endif
# Run e2e
test-e2e: generate fmt vet manifests
@$(MAKE) test-e2e-apigateway
@$(MAKE) test-e2e-cloud9
@$(MAKE) test-e2e-cloudformation
@$(MAKE) test-e2e-ecr
@$(MAKE) test-e2e-iam
@$(MAKE) test-e2e-lambda
@$(MAKE) test-e2e-route53
@$(MAKE) test-e2e-s3
# Build manager binary
manager: generate fmt vet
go build ./cmd/awsctrl
# Run against the configured Kubernetes cluster in ~/.kube/config
run: generate fmt vet manifests install
go run ./cmd/awsctrl/ start
# Install CRDs into a cluster
install: manifests
kustomize build config/crd | kubectl apply -f -
# Deploy controller in the configured Kubernetes cluster in ~/.kube/config
deploy: manifests
cd config/manager && kustomize edit set image controller=${IMG}
kustomize build config/default | kubectl apply -f -
# Generate manifests e.g. CRD, RBAC etc.
manifests: controller-gen
$(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases
# Run go fmt against code
fmt:
go fmt ./...
# Run go vet against code
vet:
go vet ./...
# Generate code
generate: generator controller-gen
$(GENERATOR) run
$(CONTROLLER_GEN) object:headerFile=./hack/boilerplate.go.txt paths="./..."
docker-login:
eval $(aws ecr get-login --region us-west-2 --no-include-email)
# Build the docker image
docker-build: test
docker build . -t ${BUILD_IMG}
# Push the docker image
docker-push: docker-login
docker push ${BUILD_IMG}
# Create kind cluster for testing
kind-create-%: kind
$(KIND) create cluster --name $* --config config/kind/config.yaml -q
kind-create:
@$(MAKE) kind-create-awsctrl
# Delete kind cluster for testing
kind-delete-%: kind
$(KIND) delete cluster --name $*
kind-delete:
@$(MAKE) kind-delete-awsctrl
# Install Kubectl
kubectl:
curl -LO https://storage.googleapis.com/kubernetes-release/release/\$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mkdir -p /usr/local/bin/
sudo mv ./kubectl /usr/local/bin/kubectl
export PATH=\$PATH:/usr/local/bin
# Set Kubectl context
kubectl-context:
kubectl config set-context kind-awsctrl.io
# Test cluster avilable
kubectl-verify:
kubectl get nodes -o wide
# Install Kubebuilder
kubebuilder:
curl -sL https://go.kubebuilder.io/dl/2.2.0/linux/amd64 | tar -xz -C /tmp/
sudo mv /tmp/kubebuilder_2.2.0_linux_amd64 /usr/local/kubebuilder
export PATH=\$PATH:/usr/local/kubebuilder/bin
set-env:
export GO111MODULE=on
export USE_EXISTING_CLUSTER=true
export POD_NAMESPACE=default
# find or download controller-gen
# download controller-gen if necessary
controller-gen:
ifeq (, $(shell which controller-gen))
go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.2.5
CONTROLLER_GEN=$(GOBIN)/controller-gen
else
CONTROLLER_GEN=$(shell which controller-gen)
endif
# find or download kind
# download kind if necessary
kind:
ifeq (, $(shell which kind))
go get sigs.k8s.io/kind@v0.7.0
KIND=$(GOBIN)/kind
else
KIND=$(shell which kind)
endif
# find or download generator
# download generator if necessary
generator:
ifeq (, $(shell which generator))
go install go.awsctrl.io/generator
GENERATOR=$(GOBIN)/generator
else
GENERATOR=$(shell which generator)
endif