Skip to content

Commit b821c18

Browse files
committed
feat: support for variable only deployments
1 parent 00cae0a commit b821c18

File tree

1 file changed

+126
-48
lines changed

1 file changed

+126
-48
lines changed

legacy/build-deploy-docker-compose.sh

Lines changed: 126 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -243,34 +243,33 @@ touch /tmp/warnings
243243
##############################################
244244

245245
buildStartTime="$(date +"%Y-%m-%d %H:%M:%S")"
246-
247-
# @TODO: uncomment when collector is introduced
248-
# beginBuildStep "Initial Environment Collection" "collectEnvironment"
246+
beginBuildStep "Initial Environment Collection" "collectEnvironment"
249247

250248
##############################################
251249
### COLLECT INFORMATION
252250
##############################################
251+
252+
echo "Collecting information about the environment"
253+
253254
# run the collector
254-
# @TODO: uncomment when collector is introduced
255-
# @TODO: don't run the collector yet, leave this as placeholder to prevent possible introduction of issues
256-
# ENVIRONMENT_DATA=$(build-deploy-tool collect environment)
257-
# echo "$ENVIRONMENT_DATA" | jq -r '.deployments.items[]?.name'
258-
# echo "$ENVIRONMENT_DATA" | jq -r '.cronjobs.items[]?.name'
259-
# echo "$ENVIRONMENT_DATA" | jq -r '.ingress.items[]?.name'
260-
# echo "$ENVIRONMENT_DATA" | jq -r '.services.items[]?.name'
261-
# echo "$ENVIRONMENT_DATA" | jq -r '.secrets.items[]?.name'
262-
# echo "$ENVIRONMENT_DATA" | jq -r '.pvcs.items[]?.name'
263-
# echo "$ENVIRONMENT_DATA" | jq -r '.schedulesv1.items[]?.name'
264-
# echo "$ENVIRONMENT_DATA" | jq -r '.schedulesv1alpha1.items[]?.name'
265-
# echo "$ENVIRONMENT_DATA" | jq -r '.prebackuppodsv1.items[]?.name'
266-
# echo "$ENVIRONMENT_DATA" | jq -r '.prebackuppodsv1alpha1.items[]?.name'
267-
# echo "$ENVIRONMENT_DATA" | jq -r '.mariadbconsumers.items[]?.name'
268-
# echo "$ENVIRONMENT_DATA" | jq -r '.mongodbconsumers.items[]?.name'
269-
# echo "$ENVIRONMENT_DATA" | jq -r '.postgresqlconsumers.items[]?.name'
255+
ENVIRONMENT_DATA=$(build-deploy-tool collect environment)
256+
257+
LAGOON_VARIABLES_ONLY=$(buildEnvVarCheck LAGOON_VARIABLES_ONLY "false")
258+
if [ "${LAGOON_VARIABLES_ONLY}" != "true" ]; then
259+
# do some checks to ensure safety and fail build if required
260+
if kubectl -n ${NAMESPACE} get configmap lagoon-env &> /dev/null; then
261+
# if the environment has a `lagoon-env` configmap present, fail this variable only deployment
262+
# if the configmap is still present, there are other changes required that only a full deployment can achieve
263+
echo "This environment currently doesn't support environment variable only deployments"
264+
echo "You will need to run a full deployment to ensure the environment is up to date"
265+
exit 1
266+
fi
267+
fi
270268

271269
currentStepEnd="$(date +"%Y-%m-%d %H:%M:%S")"
272-
# @TODO: uncomment when collector is introduced
273-
# finalizeBuildStep "${buildStartTime}" "${buildStartTime}" "${currentStepEnd}" "${NAMESPACE}" "collectEnvironment" "Initial Environment Collection" "false"
270+
finalizeBuildStep "${buildStartTime}" "${buildStartTime}" "${currentStepEnd}" "${NAMESPACE}" "collectEnvironment" "Initial Environment Collection" "false"
271+
272+
if [ "${LAGOON_VARIABLES_ONLY}" != "true" ]; then
274273
previousStepEnd=${currentStepEnd}
275274
beginBuildStep "Initial Environment Setup" "initialSetup"
276275
echo "STEP: Preparation started ${previousStepEnd}"
@@ -313,7 +312,7 @@ if kubectl -n ${NAMESPACE} get configmap lagoon-yaml &> /dev/null; then
313312
# if the key does exist, then nuke it and put the new key
314313
kubectl -n ${NAMESPACE} create configmap lagoon-yaml --from-file=pre-deploy=.lagoon.yml -o yaml --dry-run=client | kubectl replace -f -
315314
fi
316-
else
315+
else
317316
# create it
318317
kubectl -n ${NAMESPACE} create configmap lagoon-yaml --from-file=pre-deploy=.lagoon.yml
319318
fi
@@ -384,7 +383,7 @@ if kubectl -n ${NAMESPACE} get configmap docker-compose-yaml &> /dev/null; then
384383
# if the key does exist, then nuke it and put the new key
385384
kubectl -n ${NAMESPACE} create configmap docker-compose-yaml --from-file=pre-deploy="${DOCKER_COMPOSE_YAML}" -o yaml --dry-run=client | kubectl replace -f -
386385
fi
387-
else
386+
else
388387
# create it
389388
kubectl -n ${NAMESPACE} create configmap docker-compose-yaml --from-file=pre-deploy="${DOCKER_COMPOSE_YAML}"
390389
fi
@@ -902,6 +901,7 @@ if [[ "$BUILD_TYPE" == "promote" ]]; then
902901
echo "No images built for promote environments"
903902
fi
904903

904+
if [ "${LAGOON_VARIABLES_ONLY}" != "true" ]; then
905905
##############################################
906906
### PUSH IMAGES TO REGISTRY
907907
##############################################
@@ -1031,6 +1031,7 @@ if [ "${DEPRECATED_IMAGE_WARNINGS}" == "true" ]; then
10311031
finalizeBuildStep "${buildStartTime}" "${previousStepEnd}" "${currentStepEnd}" "${NAMESPACE}" "deprecatedImagesComplete" "Deprecated Image Warnings" "true"
10321032
fi
10331033

1034+
fi
10341035
# set that the image build and push phase has ended
10351036
IMAGE_BUILD_PUSH_COMPLETE="true"
10361037

@@ -1334,6 +1335,7 @@ fi
13341335
# Get list of autogenerated routes
13351336
AUTOGENERATED_ROUTES=$(kubectl -n ${NAMESPACE} get ingress --sort-by='{.metadata.name}' -l "lagoon.sh/autogenerated=true" -o=go-template --template='{{range $indexItems, $ingress := .items}}{{if $indexItems}},{{end}}{{$tls := .spec.tls}}{{range $indexRule, $rule := .spec.rules}}{{if $indexRule}},{{end}}{{if $tls}}https://{{else}}http://{{end}}{{.host}}{{end}}{{end}}')
13361337

1338+
if [ "${LAGOON_VARIABLES_ONLY}" != "true" ]; then
13371339
# loop through created DBAAS templates
13381340
DBAAS=($(build-deploy-tool identify dbaas))
13391341
for DBAAS_ENTRY in "${DBAAS[@]}"
@@ -1354,43 +1356,63 @@ do
13541356
unset IMAGES_PULL[$SERVICE_NAME]
13551357
CONSUMER_TYPE="mariadbconsumer"
13561358
. /kubectl-build-deploy/scripts/exec-kubectl-dbaas-wait.sh
1357-
MARIADB_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(kubectl -n ${NAMESPACE} get mariadbconsumer/${SERVICE_NAME} -o json | jq -r '.spec | @base64')
1359+
MARIADB_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(kubectl -n ${NAMESPACE} get mariadbconsumer/${SERVICE_NAME} -o json | jq -r '. | @base64')
13581360
;;
13591361

13601362
postgres-dbaas)
13611363
# remove the image from images to pull
13621364
unset IMAGES_PULL[$SERVICE_NAME]
13631365
CONSUMER_TYPE="postgresqlconsumer"
13641366
. /kubectl-build-deploy/scripts/exec-kubectl-dbaas-wait.sh
1365-
POSTGRES_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(kubectl -n ${NAMESPACE} get postgresqlconsumer/${SERVICE_NAME} -o json | jq -r '.spec | @base64')
1367+
POSTGRES_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(kubectl -n ${NAMESPACE} get postgresqlconsumer/${SERVICE_NAME} -o json | jq -r '. | @base64')
13661368
;;
13671369

13681370
mongodb-dbaas)
13691371
# remove the image from images to pull
13701372
unset IMAGES_PULL[$SERVICE_NAME]
13711373
CONSUMER_TYPE="mongodbconsumer"
13721374
. /kubectl-build-deploy/scripts/exec-kubectl-dbaas-wait.sh
1373-
MONGODB_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(kubectl -n ${NAMESPACE} get mongodbconsumer/${SERVICE_NAME} -o json | jq -r '.spec | @base64')
1375+
MONGODB_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(kubectl -n ${NAMESPACE} get mongodbconsumer/${SERVICE_NAME} -o json | jq -r '. | @base64')
13741376
;;
13751377

13761378
*)
13771379
echo "DBAAS Type ${SERVICE_TYPE} not implemented"; exit 1;
13781380

13791381
esac
13801382
done
1383+
else
1384+
# variable only deployment
1385+
MARIADB_DBAAS_CONSUMERS=$(echo "$ENVIRONMENT_DATA" | jq -r '.mariadbconsumers.items[]? | @base64')
1386+
for MARIADB_DBAAS_CONSUMER in ${MARIADB_DBAAS_CONSUMERS}; do
1387+
SERVICE_NAME=$(echo ${MARIADB_DBAAS_CONSUMER} | jq -Rr '@base64d | fromjson | .metadata.name')
1388+
MARIADB_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(echo ${MARIADB_DBAAS_CONSUMER} | jq -Rr '@base64d | fromjson | . | @base64')
1389+
done
1390+
MONGODB_DBAAS_CONSUMERS=$(echo "$ENVIRONMENT_DATA" | jq -r '.mongodbconsumers.items[]? | @base64')
1391+
for MONGODB_DBAAS_CONSUMER in ${MONGODB_DBAAS_CONSUMERS}; do
1392+
SERVICE_NAME=$(echo ${MONGODB_DBAAS_CONSUMER} | jq -Rr '@base64d | fromjson | .metadata.name')
1393+
MONGODB_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(echo ${MONGODB_DBAAS_CONSUMER} | jq -Rr '@base64d | fromjson | . | @base64')
1394+
done
1395+
POSTGRES_DBAAS_CONSUMERS=$(echo "$ENVIRONMENT_DATA" | jq -r '.postgresqlconsumers.items[]? | @base64')
1396+
for POSTGRES_DBAAS_CONSUMER in ${POSTGRES_DBAAS_CONSUMERS}; do
1397+
SERVICE_NAME=$(echo ${POSTGRES_DBAAS_CONSUMER} | jq -Rr '@base64d | fromjson | .metadata.name')
1398+
POSTGRES_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(echo ${POSTGRES_DBAAS_CONSUMER} | jq -Rr '@base64d | fromjson | . | @base64')
1399+
done
1400+
# variable only deployment
1401+
fi
13811402

13821403
# convert specs into credential dump for ingestion by build-deploy-tool
13831404
DBAAS_VARIABLES="[]"
13841405
for SERVICE_NAME in "${!MARIADB_DBAAS_CONSUMER_SPECS[@]}"
13851406
do
1407+
SERVICE_NAME=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .metadata.name')
13861408
SERVICE_NAME_UPPERCASE=$(echo "$SERVICE_NAME" | tr '[:lower:]' '[:upper:]' | tr '-' '_')
1387-
DB_HOST=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.services.primary')
1388-
DB_USER=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.username')
1389-
DB_PASSWORD=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.password')
1390-
DB_NAME=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.database')
1391-
DB_PORT=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .provider.port')
1409+
DB_HOST=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.services.primary')
1410+
DB_USER=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.username')
1411+
DB_PASSWORD=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.password')
1412+
DB_NAME=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.database')
1413+
DB_PORT=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.provider.port')
13921414
DB_CONSUMER='{"'${SERVICE_NAME_UPPERCASE}'_HOST":"'${DB_HOST}'", "'${SERVICE_NAME_UPPERCASE}'_USERNAME":"'${DB_USER}'","'${SERVICE_NAME_UPPERCASE}'_PASSWORD":"'${DB_PASSWORD}'","'${SERVICE_NAME_UPPERCASE}'_DATABASE":"'${DB_NAME}'","'${SERVICE_NAME_UPPERCASE}'_PORT":"'${DB_PORT}'"}'
1393-
if DB_READREPLICA_HOSTS=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.services.replicas | .[]' 2>/dev/null); then
1415+
if DB_READREPLICA_HOSTS=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.services.replicas | .[]' 2>/dev/null); then
13941416
if [ "$DB_READREPLICA_HOSTS" != "null" ]; then
13951417
DB_READREPLICA_HOSTS=$(echo "$DB_READREPLICA_HOSTS" | sed 's/^\|$//g' | paste -sd, -)
13961418
DB_CONSUMER=$(echo "${DB_CONSUMER}" | jq '. + {"'${SERVICE_NAME_UPPERCASE}'_READREPLICA_HOSTS":"'${DB_READREPLICA_HOSTS}'"}')
@@ -1401,14 +1423,15 @@ done
14011423

14021424
for SERVICE_NAME in "${!POSTGRES_DBAAS_CONSUMER_SPECS[@]}"
14031425
do
1426+
SERVICE_NAME=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .metadata.name')
14041427
SERVICE_NAME_UPPERCASE=$(echo "$SERVICE_NAME" | tr '[:lower:]' '[:upper:]' | tr '-' '_')
1405-
DB_HOST=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.services.primary')
1406-
DB_USER=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.username')
1407-
DB_PASSWORD=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.password')
1408-
DB_NAME=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.database')
1409-
DB_PORT=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .provider.port')
1428+
DB_HOST=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.services.primary')
1429+
DB_USER=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.username')
1430+
DB_PASSWORD=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.password')
1431+
DB_NAME=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.database')
1432+
DB_PORT=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.provider.port')
14101433
DB_CONSUMER='{"'${SERVICE_NAME_UPPERCASE}'_HOST":"'${DB_HOST}'", "'${SERVICE_NAME_UPPERCASE}'_USERNAME":"'${DB_USER}'","'${SERVICE_NAME_UPPERCASE}'_PASSWORD":"'${DB_PASSWORD}'","'${SERVICE_NAME_UPPERCASE}'_DATABASE":"'${DB_NAME}'","'${SERVICE_NAME_UPPERCASE}'_PORT":"'${DB_PORT}'"}'
1411-
if DB_READREPLICA_HOSTS=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.services.replicas | .[]' 2>/dev/null); then
1434+
if DB_READREPLICA_HOSTS=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.services.replicas | .[]' 2>/dev/null); then
14121435
if [ "$DB_READREPLICA_HOSTS" != "null" ]; then
14131436
DB_READREPLICA_HOSTS=$(echo "$DB_READREPLICA_HOSTS" | sed 's/^\|$//g' | paste -sd, -)
14141437
DB_CONSUMER=$(echo "${DB_CONSUMER}" | jq '. + {"'${SERVICE_NAME_UPPERCASE}'_READREPLICA_HOSTS":"'${DB_READREPLICA_HOSTS}'"}')
@@ -1419,15 +1442,16 @@ done
14191442

14201443
for SERVICE_NAME in "${!MONGODB_DBAAS_CONSUMER_SPECS[@]}"
14211444
do
1445+
SERVICE_NAME=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .metadata.name')
14221446
SERVICE_NAME_UPPERCASE=$(echo "$SERVICE_NAME" | tr '[:lower:]' '[:upper:]' | tr '-' '_')
1423-
DB_HOST=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.services.primary')
1424-
DB_USER=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.username')
1425-
DB_PASSWORD=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.password')
1426-
DB_NAME=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.database')
1427-
DB_PORT=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .provider.port')
1428-
DB_AUTHSOURCE=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .provider.auth.source')
1429-
DB_AUTHMECHANISM=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .provider.auth.mechanism')
1430-
DB_AUTHTLS=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .provider.auth.tls')
1447+
DB_HOST=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.services.primary')
1448+
DB_USER=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.username')
1449+
DB_PASSWORD=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.password')
1450+
DB_NAME=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.database')
1451+
DB_PORT=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.provider.port')
1452+
DB_AUTHSOURCE=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.provider.auth.source')
1453+
DB_AUTHMECHANISM=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.provider.auth.mechanism')
1454+
DB_AUTHTLS=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.provider.auth.tls')
14311455
DB_CONSUMER='{"'${SERVICE_NAME_UPPERCASE}'_HOST":"'${DB_HOST}'", "'${SERVICE_NAME_UPPERCASE}'_USERNAME":"'${DB_USER}'", "'${SERVICE_NAME_UPPERCASE}'_PASSWORD":"'${DB_PASSWORD}'", "'${SERVICE_NAME_UPPERCASE}'_DATABASE":"'${DB_NAME}'", "'${SERVICE_NAME_UPPERCASE}'_PORT":"'${DB_PORT}'", "'${SERVICE_NAME_UPPERCASE}'_AUTHSOURCE":"'${DB_AUTHSOURCE}'", "'${SERVICE_NAME_UPPERCASE}'_AUTHMECHANISM":"'${DB_AUTHMECHANISM}'", "'${SERVICE_NAME_UPPERCASE}'_AUTHTLS":"'${DB_AUTHTLS}'"}'
14321456
DBAAS_VARIABLES=$(echo "$DBAAS_VARIABLES" | jq '. + '$(echo "$DB_CONSUMER" | jq -sMrc)'')
14331457
done
@@ -1803,15 +1827,15 @@ echo "Updating lagoon-yaml configmap with a post-deploy version of the .lagoon.y
18031827
if kubectl -n ${NAMESPACE} get configmap lagoon-yaml &> /dev/null; then
18041828
# replace it, no need to check if the key is different, as that will happen in the pre-deploy phase
18051829
kubectl -n ${NAMESPACE} get configmap lagoon-yaml -o json | jq --arg add "`cat .lagoon.yml`" '.data."post-deploy" = $add' | kubectl apply -f -
1806-
else
1830+
else
18071831
# create it
18081832
kubectl -n ${NAMESPACE} create configmap lagoon-yaml --from-file=post-deploy=.lagoon.yml
18091833
fi
18101834
echo "Updating docker-compose-yaml configmap with a post-deploy version of the docker-compose.yml file"
18111835
if kubectl -n ${NAMESPACE} get configmap docker-compose-yaml &> /dev/null; then
18121836
# replace it, no need to check if the key is different, as that will happen in the pre-deploy phase
18131837
kubectl -n ${NAMESPACE} get configmap docker-compose-yaml -o json | jq --arg add "`cat ${DOCKER_COMPOSE_YAML}`" '.data."post-deploy" = $add' | kubectl apply -f -
1814-
else
1838+
else
18151839
# create it
18161840
kubectl -n ${NAMESPACE} create configmap docker-compose-yaml --from-file=post-deploy="${DOCKER_COMPOSE_YAML}"
18171841
fi
@@ -1861,6 +1885,60 @@ if [ "$(featureFlag INSIGHTS)" = enabled ]; then
18611885
fi
18621886

18631887
fi
1888+
else
1889+
# variable only deployment
1890+
beginBuildStep "Restarting Deployments" "restartingDeployments"
1891+
1892+
##############################################
1893+
### APPLY RESOURCES for variable only deployments
1894+
##############################################
1895+
1896+
# remove any storage calculator pods before restarting deployments to prevent storage binding issues
1897+
STORAGE_CALCULATOR_PODS=$(kubectl -n ${NAMESPACE} get pods -l lagoon.sh/storageCalculator=true --no-headers 2>/dev/null | cut -d " " -f 1 | xargs)
1898+
for STORAGE_CALCULATOR_POD in $STORAGE_CALCULATOR_PODS; do
1899+
kubectl -n ${NAMESPACE} delete pod ${STORAGE_CALCULATOR_POD}
1900+
done
1901+
1902+
# patch the deployments with the changed configmap to force a rollout
1903+
CHANGES_MADE=false
1904+
1905+
DEPLOYMENTS=$(echo "$ENVIRONMENT_DATA" | jq -r '.deployments.items[]? | @base64')
1906+
for DEPLOYMENT in ${DEPLOYMENTS}
1907+
do
1908+
SERVICE_NAME=$(echo ${DEPLOYMENT} | jq -Rr '@base64d | fromjson | .metadata.name')
1909+
CURRENT_SHA=$(echo ${DEPLOYMENT} | jq -Rr '@base64d | fromjson | .spec.template.metadata.annotations."lagoon.sh/configMapSha"')
1910+
if [ "${CONFIG_MAP_SHA}" != "${CURRENT_SHA}" ]; then
1911+
CHANGES_MADE=true
1912+
kubectl -n ${NAMESPACE} patch deployment ${SERVICE_NAME} --type=merge --patch '{"spec":{"template":{"metadata":{"annotations":{"lagoon.sh/configMapSha":"'${CONFIG_MAP_SHA}'"}}}}}'
1913+
fi
1914+
done
1915+
1916+
# wait for the deployments to restart
1917+
for DEPLOYMENT in ${DEPLOYMENTS}
1918+
do
1919+
SERVICE_NAME=$(echo ${DEPLOYMENT} | jq -Rr '@base64d | fromjson | .metadata.name')
1920+
CURRENT_SHA=$(echo ${DEPLOYMENT} | jq -Rr '@base64d | fromjson | .spec.template.metadata.annotations."lagoon.sh/configMapSha"')
1921+
if [ "${CONFIG_MAP_SHA}" != "${CURRENT_SHA}" ]; then
1922+
. /kubectl-build-deploy/scripts/exec-monitor-deploy.sh
1923+
fi
1924+
done
1925+
1926+
if [ "$CHANGES_MADE" == "false" ]; then
1927+
echo "No variables changed, no services restarted"
1928+
fi
1929+
1930+
if kubectl -n ${NAMESPACE} get configmap lagoon-env &> /dev/null; then
1931+
# now delete the configmap after all the lagoon-env and lagoon-platform-env calcs have been done
1932+
# and the deployments have rolled out successfully, this makes less problems rolling back if a build fails
1933+
# somewhere between the new secret being created, and the deployments rolling out
1934+
kubectl -n ${NAMESPACE} delete configmap lagoon-env
1935+
fi
1936+
1937+
currentStepEnd="$(date +"%Y-%m-%d %H:%M:%S")"
1938+
patchBuildStep "${buildStartTime}" "${previousStepEnd}" "${currentStepEnd}" "${NAMESPACE}" "deploymentRestartComplete" "Restarting Deployments" "false"
1939+
previousStepEnd=${currentStepEnd}
1940+
# variable only deployment
1941+
fi
18641942

18651943
EXTRA_WARNINGS=$(cat /tmp/warnings | wc -l)
18661944
BUILD_WARNING_COUNT=$((BUILD_WARNING_COUNT + EXTRA_WARNINGS))

0 commit comments

Comments
 (0)