-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathMakefile
222 lines (193 loc) · 9.25 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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
GO_PACKAGES=$(shell go list ./... | grep -v vendor)
# Get default value of $GOBIN if not explicitly set
GO_PATH=$(shell go env GOPATH)
ifeq (,$(shell go env GOBIN))
GOBIN=${GO_PATH}/bin
else
GOBIN=$(shell go env GOBIN)
endif
MYSQL_CONTAINER_NAME?=mysql-container
COLLECTOR_IMAGE_NAME?=redhat-best-practices-for-k8s/collector
COLLECTOR_IMAGE_NAME_LEGACY?=testnetworkfunction/collector
COLLECTOR_IMAGE_TAG?=latest
COLLECTOR_CONTAINER_NAME?=cnf-collector
COLLECTOR_NS?=cnf-collector
GRAFANA_CONTAINER_NAME?=grafana
COLLECTOR_VERSION?=latest
REGISTRY?=quay.io
HOST_PORT?=80
TARGET_PORT?=80
LOCAL_DB_URL?=localhost
COMMON_GO_ARGS=-race
GIT_COMMIT=$(shell scripts/create-version-files.sh)
GIT_RELEASE=$(shell scripts/get-git-release.sh)
GIT_PREVIOUS_RELEASE=$(shell scripts/get-git-previous-release.sh)
BASH_SCRIPTS=$(shell find . -name "*.sh" -not -path "./.git/*")
LINKER_TNF_RELEASE_FLAGS=-X github.com/redhat-best-practices-for-k8s/certsuite/certsuite.GitCommit=${GIT_COMMIT}
LINKER_TNF_RELEASE_FLAGS+= -X github.com/redhat-best-practices-for-k8s/certsuite/certsuite.GitRelease=${GIT_RELEASE}
LINKER_TNF_RELEASE_FLAGS+= -X github.com/redhat-best-practices-for-k8s/certsuite/certsuite.GitPreviousRelease=${GIT_PREVIOUS_RELEASE}
MYSQL_DEPLOYMENT_PATH = ./k8s/deployment/database.yaml
COLLECTOR_DEPLOYMENT_PATH = ./k8s/deployment/app.yml
DB_URL = database-collectordb-1hykanj2mxdh.cn9luyhgvfkp.us-east-1.rds.amazonaws.com
S3_BUCKET_NAME?=cnf-suite-claims
S3_BUCKET_REGION?=us-east-1
.PHONY: all clean test
# Build and run unit tests
test:
go build ${COMMON_GO_ARGS} ./...
UNIT_TEST="true" go test -coverprofile=cover.out.tmp ./...
vet:
go vet ${GO_PACKAGES}
build:
go build -ldflags "${LINKER_TNF_RELEASE_FLAGS}" ${COMMON_GO_ARGS} -o collector
# Runs configured linters
lint:
checkmake --config=.checkmake Makefile
golangci-lint run --timeout 10m0s
hadolint Dockerfile
shfmt -d scripts/*.sh
typos
markdownlint '**/*.md'
yamllint --no-warnings .
shellcheck --format=gcc ${BASH_SCRIPTS}
install-mac-brew-tools:
brew install \
checkmake \
golangci-lint \
hadolint
# Pulls collector image from quay.io
pull-image-collector:
docker pull ${REGISTRY}/${COLLECTOR_IMAGE_NAME}:${COLLECTOR_VERSION}
stop-running-collector-container:
docker ps -q --filter "name=${COLLECTOR_CONTAINER_NAME}" | xargs -r docker stop
docker ps -aq --filter "name=${COLLECTOR_CONTAINER_NAME}" | xargs -r docker rm
# Runs collector locally with docker using latest tag
run-collector: clone-tnf-secrets stop-running-collector-container
docker run -d --pull always -p ${HOST_PORT}:${TARGET_PORT} --name ${COLLECTOR_CONTAINER_NAME} \
-e DB_USER='$(shell jq -r ".MysqlUsername" "./tnf-secrets/collector-secrets.json" | base64 -d)' \
-e DB_PASSWORD='$(shell jq -r ".MysqlPassword" "./tnf-secrets/collector-secrets.json" | base64 -d)' \
-e DB_URL=${LOCAL_DB_URL} \
-e DB_PORT='3306' \
-e SERVER_ADDR=':${HOST_PORT}' \
-e SERVER_READ_TIMEOUT=10 \
-e SERVER_WRITE_TIMEOUT=10 \
-e AWS_ACCESS_KEY=$(shell jq -r ".CollectorAWSAccessKey" "./tnf-secrets/collector-secrets.json") \
-e AWS_SECRET_ACCESS_KEY=$(shell jq -r ".CollectorAWSSecretAccessKey" "./tnf-secrets/collector-secrets.json") \
-e S3_BUCKET_NAME=${S3_BUCKET_NAME} \
-e S3_BUCKET_REGION=${S3_BUCKET_REGION} \
${REGISTRY}/${COLLECTOR_IMAGE_NAME}:${COLLECTOR_IMAGE_TAG}
rm -rf tnf-secrets
# Runs collector on rds with docker
run-collector-rds: clone-tnf-secrets stop-running-collector-container
docker run --restart always -d --pull always -p ${HOST_PORT}:${TARGET_PORT} --name ${COLLECTOR_CONTAINER_NAME} \
-e DB_USER='$(shell jq -r ".MysqlUsername" "./tnf-secrets/collector-secrets.json" | base64 -d)' \
-e DB_PASSWORD='$(shell jq -r ".MysqlPassword" "./tnf-secrets/collector-secrets.json" | base64 -d)' \
-e DB_URL='${DB_URL}' \
-e DB_PORT='3306' \
-e SERVER_ADDR=':${HOST_PORT}' \
-e SERVER_READ_TIMEOUT=10 \
-e SERVER_WRITE_TIMEOUT=10 \
-e AWS_ACCESS_KEY=$(shell jq -r ".CollectorAWSAccessKey" "./tnf-secrets/collector-secrets.json") \
-e AWS_SECRET_ACCESS_KEY=$(shell jq -r ".CollectorAWSSecretAccessKey" "./tnf-secrets/collector-secrets.json") \
-e S3_BUCKET_NAME=${S3_BUCKET_NAME} \
-e S3_BUCKET_REGION=${S3_BUCKET_REGION} \
${REGISTRY}/${COLLECTOR_IMAGE_NAME}:${COLLECTOR_VERSION}
rm -rf tnf-secrets
# Runs collector on rds with docker in headless mode
run-collector-rds-headless: clone-tnf-secrets stop-running-collector-container
docker run -d --pull always --name ${COLLECTOR_CONTAINER_NAME} -p ${HOST_PORT}:${TARGET_PORT} \
-e DB_USER='$(shell jq -r ".MysqlUsername" "./tnf-secrets/collector-secrets.json" | base64 -d)' \
-e DB_PASSWORD='$(shell jq -r ".MysqlPassword" "./tnf-secrets/collector-secrets.json" | base64 -d)' \
-e DB_URL='${DB_URL}' \
-e DB_PORT='3306'\
-e SERVER_ADDR=':${HOST_PORT}' \
-e SERVER_READ_TIMEOUT=10 \
-e SERVER_WRITE_TIMEOUT=10 \
-e AWS_ACCESS_KEY=$(shell jq -r ".CollectorAWSAccessKey" "./tnf-secrets/collector-secrets.json") \
-e AWS_SECRET_ACCESS_KEY=$(shell jq -r ".CollectorAWSSecretAccessKey" "./tnf-secrets/collector-secrets.json") \
-e S3_BUCKET_NAME=${S3_BUCKET_NAME} \
-e S3_BUCKET_REGION=${S3_BUCKET_REGION} \
-d ${COLLECTOR_IMAGE_NAME}
rm -rf tnf-secrets
# Builds collector image with latest tag
build-image-collector:
docker build \
-t ${REGISTRY}/${COLLECTOR_IMAGE_NAME}:${COLLECTOR_IMAGE_TAG} \
-f Dockerfile .
build-image-collector-legacy:
docker build \
-t ${REGISTRY}/${COLLECTOR_IMAGE_NAME_LEGACY}:${COLLECTOR_IMAGE_TAG} \
-f Dockerfile .
# Builds collector image with latest and version tags
build-image-collector-by-version:
docker build \
-t ${REGISTRY}/${COLLECTOR_IMAGE_NAME}:${COLLECTOR_IMAGE_TAG} \
-t ${REGISTRY}/${COLLECTOR_IMAGE_NAME}:${COLLECTOR_VERSION} \
-f Dockerfile .
build-image-collector-by-version-legacy:
docker build \
-t ${REGISTRY}/${COLLECTOR_IMAGE_NAME_LEGACY}:${COLLECTOR_IMAGE_TAG} \
-t ${REGISTRY}/${COLLECTOR_IMAGE_NAME_LEGACY}:${COLLECTOR_VERSION} \
-f Dockerfile .
# Pushes collector image with latest tag
push-image-collector:
docker push ${REGISTRY}/${COLLECTOR_IMAGE_NAME}:${COLLECTOR_IMAGE_TAG}
# Pushes collector image with latest tag and version tags
push-image-collector-by-version:
docker push ${REGISTRY}/${COLLECTOR_IMAGE_NAME}:${COLLECTOR_IMAGE_TAG}
docker push ${REGISTRY}/${COLLECTOR_IMAGE_NAME}:${COLLECTOR_VERSION}
create-initial-mysql-scripts:
sed \
-e 's|CollectorAdminUser|$(shell jq -r ".CollectorAdminUser" "./tnf-secrets/collector-secrets.json" | base64 -d)|g' \
-e 's|CollectorAdminPassword|$(shell jq -r ".CollectorAdminPassword" "./tnf-secrets/collector-secrets.json")|g' \
./scripts/database/create_schema.sql > create_schema_prod.sql
sed \
-e 's/MysqlUsername/$(shell jq -r ".MysqlUsername" "./tnf-secrets/collector-secrets.json" | base64 -d)/g' \
-e 's/MysqlPassword/$(shell jq -r ".MysqlPassword" "./tnf-secrets/collector-secrets.json" | base64 -d)/g' \
./scripts/database/create_user.sql > create_user_prod.sql
# Runs initial mysql scripts locally
run-initial-mysql-scripts: clone-tnf-secrets create-initial-mysql-scripts
mysql -uroot -p < create_schema_prod.sql # enter local mysql root password
mysql -uroot -p < create_user_prod.sql # enter local mysql root password
rm create_schema_prod.sql create_user_prod.sql
rm -rf tnf-secrets
# Runs initial mysql scripts on RDS instance
run-initial-mysql-scripts-rds: clone-tnf-secrets create-initial-mysql-scripts
mysql \
-h ${DB_URL} \
-u$(shell jq -r ".MysqlUsername" "./tnf-secrets/collector-secrets.json" | base64 -d) \
-p$(shell jq -r ".MysqlPassword" "./tnf-secrets/collector-secrets.json" | base64 -d)
< create_schema_prod.sql
mysql \
-h ${DB_URL} \
-u$(shell jq -r ".MysqlUsername" "./tnf-secrets/collector-secrets.json" | base64 -d) \
-p$(shell jq -r ".MysqlPassword" "./tnf-secrets/collector-secrets.json" | base64 -d) \
< create_user_prod.sql
rm create_schema_prod.sql create_user_prod.sql
rm -rf tnf-secrets
# Deploys collector for CI test purposes
deploy-collector-for-CI:
oc apply -f ${COLLECTOR_DEPLOYMENT_PATH} -n ${COLLECTOR_NS}
# Deploys mysql for CI test purposes
deploy-mysql-for-CI:
oc apply -f ${MYSQL_DEPLOYMENT_PATH} -n ${COLLECTOR_NS}
stop-running-grafana-container:
docker ps -q --filter "name=${GRAFANA_CONTAINER_NAME}" | xargs -r docker stop
docker ps -aq --filter "name=${GRAFANA_CONTAINER_NAME}" | xargs -r docker rm
run-grafana: clone-tnf-secrets stop-running-grafana-container
sed \
-e 's/MysqlUsername/$(shell jq -r ".MysqlUsername" "./tnf-secrets/collector-secrets.json" | base64 -d)/g' \
-e 's/MysqlPassword/$(shell jq -r ".MysqlPassword" "./tnf-secrets/collector-secrets.json" | base64 -d)/g' \
./grafana/datasource/datasource-config.yaml > datasource-config-prod.yaml
docker run -d -p 3000:3000 --name=${GRAFANA_CONTAINER_NAME} \
-e "GF_SECURITY_ADMIN_USER=$(shell jq -r ".GrafanaUsername" "./tnf-secrets/collector-secrets.json")" \
-e "GF_SECURITY_ADMIN_PASSWORD=$(shell jq -r ".GrafanaPassword" "./tnf-secrets/collector-secrets.json")" \
-v ./grafana/dashboard:/etc/grafana/provisioning/dashboards \
-v ./datasource-config-prod.yaml:/etc/grafana/provisioning/datasources/datasource-config-prod.yaml \
grafana/grafana
rm datasource-config-prod.yaml
rm -rf tnf-secrets
# Clones tnf-secret private repo if does not exist
clone-tnf-secrets:
rm -rf tnf-secrets
git clone [email protected]:redhat-best-practices-for-k8s/tnf-secrets.git