Skip to content

Commit 2f4fee1

Browse files
committed
feat: use yq to generate the dynamic values.yaml in write_environment_values_file function
generate `application.*db_uri` params with `write_environment_values_file` function if `DB_ENABLED` is true & `DB_URI` is set by user then we will provision the `DB` but `DB_URI` will still contain the value set by user Signed-off-by: Siddharth Tiwari <[email protected]>
1 parent 8bf178e commit 2f4fee1

File tree

1 file changed

+53
-30
lines changed

1 file changed

+53
-30
lines changed

auto-deploy

Lines changed: 53 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -112,37 +112,47 @@ function add_custom_chart_repository() {
112112
}
113113

114114
function ensure_namespace() {
115-
kubectl get namespace "$KUBE_NAMESPACE" || kubectl create namespace "$KUBE_NAMESPACE"
115+
kubectl get namespace "${KUBE_NAMESPACE}" || kubectl create namespace "${KUBE_NAMESPACE}"
116116
}
117117

118118
function write_environment_values_file() {
119119

120120
export GITLAB_CI=${GITLAB_CI:-false}
121121
if test "${GITLAB_CI}" == "true"; then
122-
echo "gitlab: true" >"$AUTO_DEPLOY_ENVIRONMENT_VALUES_FILE"
122+
yq eval --null-input '.gitlab = true' >"${AUTO_DEPLOY_ENVIRONMENT_VALUES_FILE}"
123123
fi
124124

125+
for i in "${APPS[@]}"; do
126+
127+
# shellcheck disable=SC1090
128+
source <(
129+
cat <<EOF
130+
yq eval '.application.${i}_uri = env(${i}_uri)' -i "${AUTO_DEPLOY_ENVIRONMENT_VALUES_FILE}"
131+
EOF
132+
)
133+
done
134+
125135
# Helm 3 does not like `--set image.secrets[0]=""`
126136
if [[ "$CI_PROJECT_VISIBILITY" != "public" ]]; then
127-
echo "image: { secrets: [ { name: gitlab-registry-${CI_PROJECT_PATH_SLUG} } ] }" >>$AUTO_DEPLOY_ENVIRONMENT_VALUES_FILE
137+
yq eval '.image.secrets[0].name = "gitlab-registry-"+env(CI_PROJECT_PATH_SLUG)' -i "${AUTO_DEPLOY_ENVIRONMENT_VALUES_FILE}"
128138
else
129-
echo "image: { secrets: null }" >>$AUTO_DEPLOY_ENVIRONMENT_VALUES_FILE
139+
yq eval '.image.secrets = null' -i "${AUTO_DEPLOY_ENVIRONMENT_VALUES_FILE}"
130140
fi
131141
}
132142

133143
function create_secret() {
134144
echo "Create secret..."
135-
if [[ "$CI_PROJECT_VISIBILITY" == "public" ]]; then
145+
if [[ "${CI_PROJECT_VISIBILITY}" == "public" ]]; then
136146
return
137147
fi
138148

139-
kubectl create secret -n "$KUBE_NAMESPACE" \
149+
kubectl create secret -n "${KUBE_NAMESPACE}" \
140150
docker-registry "gitlab-registry-${CI_PROJECT_PATH_SLUG}" \
141-
--docker-server="$CI_REGISTRY" \
151+
--docker-server="${CI_REGISTRY}" \
142152
--docker-username="${CI_DEPLOY_USER:-$CI_REGISTRY_USER}" \
143153
--docker-password="${CI_DEPLOY_PASSWORD:-$CI_REGISTRY_PASSWORD}" \
144-
--docker-email="$GITLAB_USER_EMAIL" \
145-
-o yaml --dry-run | kubectl replace -n "$KUBE_NAMESPACE" --force -f -
154+
--docker-email="${GITLAB_USER_EMAIL}" \
155+
-o yaml --dry-run | kubectl replace -n "${KUBE_NAMESPACE}" --force -f -
146156
}
147157

148158
function persist_environment_url() {
@@ -151,8 +161,14 @@ function persist_environment_url() {
151161

152162
function auto_database_uri() {
153163

154-
db=$1
155-
case $db in
164+
# this function gets called for a DB only if DB_ENABLED is true
165+
166+
# if DB_ENABLED is true & DB_URI is set by user
167+
# then we will provision the DB
168+
# but DB_URI will still contain the value set by user
169+
170+
db=${1}
171+
case ${db} in
156172

157173
mariadb)
158174
uri="jdbc:mysql://${MARIADB_RELEASE_NAME}:3306/${MARIADB_DB}?username=${MARIADB_USER}&password=${MARIADB_PASSWORD}"
@@ -218,7 +234,7 @@ function install_postgresql() {
218234
--set image.tag="$POSTGRESQL_VERSION" \
219235
"${postgresql_helm_values_args[@]}" \
220236
$POSTGRESQL_HELM_UPGRADE_EXTRA_ARGS \
221-
--namespace="$KUBE_NAMESPACE" \
237+
--namespace="${KUBE_NAMESPACE}" \
222238
"$name" \
223239
bitnami/postgresql
224240
}
@@ -239,15 +255,24 @@ function deploy() {
239255
install_postgresql
240256
fi
241257

242-
validate-chart-version "$(helm list --namespace "$KUBE_NAMESPACE" --output json)" "chart" "$name"
258+
validate-chart-version "$(helm list --namespace "${KUBE_NAMESPACE}" --output json)" "chart" "$name"
243259

244260
for i in "${APPS[@]}"; do
245261

246262
# shellcheck disable=SC1090
247263
source <(
248264
cat <<EOF
249-
local ${i}_uri;
250-
${i}_uri=$(auto_database_uri "${i}")
265+
if [[ \${${i^^}_ENABLED} == "true" ]]; then
266+
${i}_uri=$(auto_database_uri "${i}")
267+
export ${i}_uri;
268+
elif [[ -v ${i^^}_URI ]]; then
269+
# if DB_URI is passed by user then set it in pod
270+
${i}_uri=\${${i^^}_URI}
271+
export ${i}_uri;
272+
fi
273+
# if DB_ENABLED is true & DB_URI is set by user
274+
# then we will provision the DB
275+
# but DB_URI will still contain the value set by user
251276
EOF
252277
)
253278
done
@@ -305,7 +330,7 @@ EOF
305330
# TODO: Over time, migrate all --set values to this file, see https://gitlab.com/gitlab-org/cluster-integration/auto-deploy-image/-/issues/31
306331
write_environment_values_file
307332

308-
if [[ -n "$DB_INITIALIZE" && -z "$(helm ls --namespace "$KUBE_NAMESPACE" -q -f "^$stable_name$")" ]]; then
333+
if [[ -n "$DB_INITIALIZE" && -z "$(helm ls --namespace "${KUBE_NAMESPACE}" -q -f "^$stable_name$")" ]]; then
309334
echo "Initializing service URL and database. No deployment will be created"
310335
# shellcheck disable=SC2086 # HELM_UPGRADE_EXTRA_ARGS -- double quote variables to prevent globbing
311336
helm upgrade --install \
@@ -320,7 +345,6 @@ EOF
320345
--set image.repository="$image_repository" \
321346
--set-string image.tag="$image_tag" \
322347
--set application.track="stable" \
323-
--set application.database_url="$database_url" \
324348
--set application.secretName="$APPLICATION_SECRET_NAME" \
325349
--set application.secretChecksum="$APPLICATION_SECRET_CHECKSUM" \
326350
--set service.commonName="le-$CI_PROJECT_ID.$KUBE_INGRESS_BASE_DOMAIN" \
@@ -333,7 +357,7 @@ EOF
333357
--values "$AUTO_DEPLOY_ENVIRONMENT_VALUES_FILE" \
334358
"${helm_values_args[@]}" \
335359
$HELM_UPGRADE_EXTRA_ARGS \
336-
--namespace="$KUBE_NAMESPACE" \
360+
--namespace="${KUBE_NAMESPACE}" \
337361
"$stable_name" \
338362
chart/
339363
fi
@@ -352,7 +376,6 @@ EOF
352376
--set image.repository="$image_repository" \
353377
--set-string image.tag="$image_tag" \
354378
--set application.track="$track" \
355-
--set application.database_url="$database_url" \
356379
--set application.secretName="$APPLICATION_SECRET_NAME" \
357380
--set application.secretChecksum="$APPLICATION_SECRET_CHECKSUM" \
358381
--set service.commonName="le-$CI_PROJECT_ID.$KUBE_INGRESS_BASE_DOMAIN" \
@@ -366,12 +389,12 @@ EOF
366389
--values "$AUTO_DEPLOY_ENVIRONMENT_VALUES_FILE" \
367390
"${helm_values_args[@]}" \
368391
$HELM_UPGRADE_EXTRA_ARGS \
369-
--namespace="$KUBE_NAMESPACE" \
392+
--namespace="${KUBE_NAMESPACE}" \
370393
"$name" \
371394
chart/
372395

373396
if [[ -z "$ROLLOUT_STATUS_DISABLED" ]]; then
374-
kubectl rollout status -n "$KUBE_NAMESPACE" -w "$ROLLOUT_RESOURCE_TYPE/$name"
397+
kubectl rollout status -n "${KUBE_NAMESPACE}" -w "$ROLLOUT_RESOURCE_TYPE/$name"
375398
fi
376399
}
377400

@@ -384,12 +407,12 @@ function scale() {
384407
local replicas
385408
replicas=$(get_replicas "$track")
386409

387-
if [[ -n "$(helm ls --namespace "$KUBE_NAMESPACE" -q -f "^$name$")" ]]; then
410+
if [[ -n "$(helm ls --namespace "${KUBE_NAMESPACE}" -q -f "^$name$")" ]]; then
388411
helm upgrade --reuse-values \
389412
--wait \
390413
--set replicaCount="$replicas" \
391414
--set ingress.canary.weight="${percentage}" \
392-
--namespace="$KUBE_NAMESPACE" \
415+
--namespace="${KUBE_NAMESPACE}" \
393416
"$name" \
394417
chart/
395418
fi
@@ -398,9 +421,9 @@ function scale() {
398421
function delete_postgresql() {
399422
local name="$POSTGRESQL_RELEASE_NAME"
400423

401-
if [[ -n "$(helm ls --namespace "$KUBE_NAMESPACE" -q -f "^$name$")" ]]; then
402-
helm delete "$name" --namespace "$KUBE_NAMESPACE"
403-
kubectl delete pvc -n "$KUBE_NAMESPACE" -l "release=$POSTGRESQL_RELEASE_NAME"
424+
if [[ -n "$(helm ls --namespace "${KUBE_NAMESPACE}" -q -f "^$name$")" ]]; then
425+
helm delete "$name" --namespace "${KUBE_NAMESPACE}"
426+
kubectl delete pvc -n "${KUBE_NAMESPACE}" -l "release=$POSTGRESQL_RELEASE_NAME"
404427
fi
405428
}
406429

@@ -410,8 +433,8 @@ function delete() {
410433
local name
411434
name=$(deploy_name "$track")
412435

413-
if [[ -n "$(helm ls --namespace "$KUBE_NAMESPACE" -q -f "^$name$")" ]]; then
414-
helm delete "$name" --namespace "$KUBE_NAMESPACE"
436+
if [[ -n "$(helm ls --namespace "${KUBE_NAMESPACE}" -q -f "^$name$")" ]]; then
437+
helm delete "$name" --namespace "${KUBE_NAMESPACE}"
415438
fi
416439

417440
if [[ "$track" == "stable" ]]; then
@@ -421,7 +444,7 @@ function delete() {
421444
local secret_name
422445
secret_name=$(application_secret_name "$track")
423446

424-
kubectl delete secret --ignore-not-found -n "$KUBE_NAMESPACE" "$secret_name"
447+
kubectl delete secret --ignore-not-found -n "${KUBE_NAMESPACE}" "$secret_name"
425448
}
426449

427450
## Helper functions
@@ -450,7 +473,7 @@ function create_application_secret() {
450473

451474
auto-deploy-application-secrets-yaml "$k8s_secrets_file"
452475

453-
kubectl replace -f "$k8s_secrets_file" -n "$KUBE_NAMESPACE" --force
476+
kubectl replace -f "$k8s_secrets_file" -n "${KUBE_NAMESPACE}" --force
454477

455478
# shellcheck disable=SC2002 # useless cat, prefer cmd < file
456479
# shellcheck disable=SC2155 # declare and assign separately to avoid masking return values.

0 commit comments

Comments
 (0)