@@ -112,37 +112,47 @@ function add_custom_chart_repository() {
112112}
113113
114114function 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
118118function 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
133143function 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
148158function persist_environment_url() {
@@ -151,8 +161,14 @@ function persist_environment_url() {
151161
152162function 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
251276EOF
252277 )
253278 done
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 \
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 " \
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
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() {
398421function 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