Skip to content

Commit 5190008

Browse files
committed
feat: support for variable only deployments
1 parent 88fb753 commit 5190008

File tree

3 files changed

+134
-32
lines changed

3 files changed

+134
-32
lines changed

.github/workflows/docker-image.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ on:
1111
branches:
1212
- 'main'
1313
- 'release/*'
14+
- 'collector-vars-only'
15+
- 'k8s-collector'
1416

1517
jobs:
1618
docker:

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,7 @@ build: fmt vet
3030
docker-build:
3131
DOCKER_BUILDKIT=1 docker build --pull --build-arg GO_VER=${GO_VER} --build-arg VERSION=${VERSION} --build-arg BUILD=${BUILD} --rm -f Dockerfile -t lagoon/build-deploy-image:local .
3232
docker run --entrypoint /bin/bash lagoon/build-deploy-image:local -c 'build-deploy-tool version'
33+
34+
tag-and-push:
35+
docker tag lagoon/build-deploy-image:local uselagoon/build-deploy-image:${VERSION}
36+
docker push uselagoon/build-deploy-image:${VERSION}

legacy/build-deploy-docker-compose.sh

Lines changed: 128 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,8 @@ beginBuildStep "Initial Environment Collection" "collectEnvironment"
193193
### COLLECT INFORMATION
194194
##############################################
195195

196+
echo "Collecting information about the environment"
197+
196198
# run the collector
197199
ENVIRONMENT_DATA=$(build-deploy-tool collect environment)
198200
# echo "$ENVIRONMENT_DATA" | jq -r '.deployments.items[]?.name'
@@ -209,8 +211,22 @@ ENVIRONMENT_DATA=$(build-deploy-tool collect environment)
209211
# echo "$ENVIRONMENT_DATA" | jq -r '.mongodbconsumers.items[]?.name'
210212
# echo "$ENVIRONMENT_DATA" | jq -r '.postgresqlconsumers.items[]?.name'
211213

214+
LAGOON_VARIABLES_ONLY=$(buildEnvVarCheck LAGOON_VARIABLES_ONLY "false")
215+
if [ "${LAGOON_VARIABLES_ONLY}" != "true" ]; then
216+
# do some checks to ensure safety and fail build if required
217+
if kubectl -n ${NAMESPACE} get configmap lagoon-env &> /dev/null; then
218+
# if the environment has a `lagoon-env` configmap present, fail this variable only deployment
219+
# if the configmap is still present, there are other changes required that only a full deployment can achieve
220+
echo "This environment currently doesn't support environment variable only deployments"
221+
echo "You will need to run a full deployment to ensure the environment is up to date"
222+
exit 1
223+
fi
224+
fi
225+
212226
currentStepEnd="$(date +"%Y-%m-%d %H:%M:%S")"
213227
patchBuildStep "${buildStartTime}" "${buildStartTime}" "${currentStepEnd}" "${NAMESPACE}" "collectEnvironment" "Initial Environment Collection" "false"
228+
229+
if [ "${LAGOON_VARIABLES_ONLY}" != "true" ]; then
214230
previousStepEnd=${currentStepEnd}
215231
beginBuildStep "Initial Environment Setup" "initialSetup"
216232
echo "STEP: Preparation started ${buildStartTime}"
@@ -252,7 +268,7 @@ if kubectl -n ${NAMESPACE} get configmap lagoon-yaml &> /dev/null; then
252268
# if the key does exist, then nuke it and put the new key
253269
kubectl -n ${NAMESPACE} create configmap lagoon-yaml --from-file=pre-deploy=.lagoon.yml -o yaml --dry-run=client | kubectl replace -f -
254270
fi
255-
else
271+
else
256272
# create it
257273
kubectl -n ${NAMESPACE} create configmap lagoon-yaml --from-file=pre-deploy=.lagoon.yml
258274
fi
@@ -302,7 +318,7 @@ if kubectl -n ${NAMESPACE} get configmap docker-compose-yaml &> /dev/null; then
302318
# if the key does exist, then nuke it and put the new key
303319
kubectl -n ${NAMESPACE} create configmap docker-compose-yaml --from-file=pre-deploy=${DOCKER_COMPOSE_YAML} -o yaml --dry-run=client | kubectl replace -f -
304320
fi
305-
else
321+
else
306322
# create it
307323
kubectl -n ${NAMESPACE} create configmap docker-compose-yaml --from-file=pre-deploy=${DOCKER_COMPOSE_YAML}
308324
fi
@@ -1034,6 +1050,7 @@ if [ "${CURRENT_CHALLENGE_ROUTES[@]}" != "" ]; then
10341050
currentStepEnd="$(date +"%Y-%m-%d %H:%M:%S")"
10351051
patchBuildStep "${buildStartTime}" "${previousStepEnd}" "${currentStepEnd}" "${NAMESPACE}" "staleChallengesComplete" "Route/Ingress Certificate Challenges" "true"
10361052
fi
1053+
fi
10371054
previousStepEnd=${currentStepEnd}
10381055
beginBuildStep "Update Environment Secrets" "updateEnvSecrets"
10391056

@@ -1085,6 +1102,7 @@ fi
10851102
# Get list of autogenerated routes
10861103
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}}')
10871104

1105+
if [ "${LAGOON_VARIABLES_ONLY}" != "true" ]; then
10881106
# loop through created DBAAS templates
10891107
DBAAS=($(build-deploy-tool identify dbaas))
10901108
for DBAAS_ENTRY in "${DBAAS[@]}"
@@ -1105,43 +1123,63 @@ do
11051123
unset IMAGES_PULL[$SERVICE_NAME]
11061124
CONSUMER_TYPE="mariadbconsumer"
11071125
. /kubectl-build-deploy/scripts/exec-kubectl-dbaas-wait.sh
1108-
MARIADB_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(kubectl -n ${NAMESPACE} get mariadbconsumer/${SERVICE_NAME} -o json | jq -r '.spec | @base64')
1126+
MARIADB_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(kubectl -n ${NAMESPACE} get mariadbconsumer/${SERVICE_NAME} -o json | jq -r '. | @base64')
11091127
;;
11101128

11111129
postgres-dbaas)
11121130
# remove the image from images to pull
11131131
unset IMAGES_PULL[$SERVICE_NAME]
11141132
CONSUMER_TYPE="postgresqlconsumer"
11151133
. /kubectl-build-deploy/scripts/exec-kubectl-dbaas-wait.sh
1116-
POSTGRES_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(kubectl -n ${NAMESPACE} get postgresqlconsumer/${SERVICE_NAME} -o json | jq -r '.spec | @base64')
1134+
POSTGRES_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(kubectl -n ${NAMESPACE} get postgresqlconsumer/${SERVICE_NAME} -o json | jq -r '. | @base64')
11171135
;;
11181136

11191137
mongodb-dbaas)
11201138
# remove the image from images to pull
11211139
unset IMAGES_PULL[$SERVICE_NAME]
11221140
CONSUMER_TYPE="mongodbconsumer"
11231141
. /kubectl-build-deploy/scripts/exec-kubectl-dbaas-wait.sh
1124-
MONGODB_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(kubectl -n ${NAMESPACE} get mongodbconsumer/${SERVICE_NAME} -o json | jq -r '.spec | @base64')
1142+
MONGODB_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(kubectl -n ${NAMESPACE} get mongodbconsumer/${SERVICE_NAME} -o json | jq -r '. | @base64')
11251143
;;
11261144

11271145
*)
11281146
echo "DBAAS Type ${SERVICE_TYPE} not implemented"; exit 1;
11291147

11301148
esac
11311149
done
1150+
else
1151+
# variable only deployment
1152+
MARIADB_DBAAS_CONSUMERS=$(echo "$ENVIRONMENT_DATA" | jq -r '.mariadbconsumers.items[]? | @base64')
1153+
for MARIADB_DBAAS_CONSUMER in ${MARIADB_DBAAS_CONSUMERS}; do
1154+
SERVICE_NAME=$(echo ${MARIADB_DBAAS_CONSUMER} | jq -Rr '@base64d | fromjson | .metadata.name')
1155+
MARIADB_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(echo ${MARIADB_DBAAS_CONSUMER} | jq -Rr '@base64d | fromjson | . | @base64')
1156+
done
1157+
MONGODB_DBAAS_CONSUMERS=$(echo "$ENVIRONMENT_DATA" | jq -r '.mongodbconsumers.items[]? | @base64')
1158+
for MONGODB_DBAAS_CONSUMER in ${MONGODB_DBAAS_CONSUMERS}; do
1159+
SERVICE_NAME=$(echo ${MONGODB_DBAAS_CONSUMER} | jq -Rr '@base64d | fromjson | .metadata.name')
1160+
MONGODB_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(echo ${MONGODB_DBAAS_CONSUMER} | jq -Rr '@base64d | fromjson | . | @base64')
1161+
done
1162+
POSTGRES_DBAAS_CONSUMERS=$(echo "$ENVIRONMENT_DATA" | jq -r '.postgresqlconsumers.items[]? | @base64')
1163+
for POSTGRES_DBAAS_CONSUMER in ${POSTGRES_DBAAS_CONSUMERS}; do
1164+
SERVICE_NAME=$(echo ${POSTGRES_DBAAS_CONSUMER} | jq -Rr '@base64d | fromjson | .metadata.name')
1165+
POSTGRES_DBAAS_CONSUMER_SPECS["${SERVICE_NAME}"]=$(echo ${POSTGRES_DBAAS_CONSUMER} | jq -Rr '@base64d | fromjson | . | @base64')
1166+
done
1167+
# variable only deployment
1168+
fi
11321169

11331170
# convert specs into credential dump for ingestion by build-deploy-tool
11341171
DBAAS_VARIABLES="[]"
11351172
for SERVICE_NAME in "${!MARIADB_DBAAS_CONSUMER_SPECS[@]}"
11361173
do
1174+
SERVICE_NAME=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .metadata.name')
11371175
SERVICE_NAME_UPPERCASE=$(echo "$SERVICE_NAME" | tr '[:lower:]' '[:upper:]' | tr '-' '_')
1138-
DB_HOST=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.services.primary')
1139-
DB_USER=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.username')
1140-
DB_PASSWORD=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.password')
1141-
DB_NAME=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.database')
1142-
DB_PORT=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .provider.port')
1176+
DB_HOST=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.services.primary')
1177+
DB_USER=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.username')
1178+
DB_PASSWORD=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.password')
1179+
DB_NAME=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.database')
1180+
DB_PORT=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.provider.port')
11431181
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}'"}'
1144-
if DB_READREPLICA_HOSTS=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.services.replicas | .[]' 2>/dev/null); then
1182+
if DB_READREPLICA_HOSTS=$(echo ${MARIADB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.services.replicas | .[]' 2>/dev/null); then
11451183
if [ "$DB_READREPLICA_HOSTS" != "null" ]; then
11461184
DB_READREPLICA_HOSTS=$(echo "$DB_READREPLICA_HOSTS" | sed 's/^\|$//g' | paste -sd, -)
11471185
DB_CONSUMER=$(echo "${DB_CONSUMER}" | jq '. + {"'${SERVICE_NAME_UPPERCASE}'_READREPLICA_HOSTS":"'${DB_READREPLICA_HOSTS}'"}')
@@ -1152,14 +1190,15 @@ done
11521190

11531191
for SERVICE_NAME in "${!POSTGRES_DBAAS_CONSUMER_SPECS[@]}"
11541192
do
1193+
SERVICE_NAME=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .metadata.name')
11551194
SERVICE_NAME_UPPERCASE=$(echo "$SERVICE_NAME" | tr '[:lower:]' '[:upper:]' | tr '-' '_')
1156-
DB_HOST=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.services.primary')
1157-
DB_USER=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.username')
1158-
DB_PASSWORD=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.password')
1159-
DB_NAME=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.database')
1160-
DB_PORT=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .provider.port')
1195+
DB_HOST=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.services.primary')
1196+
DB_USER=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.username')
1197+
DB_PASSWORD=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.password')
1198+
DB_NAME=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.database')
1199+
DB_PORT=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.provider.port')
11611200
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}'"}'
1162-
if DB_READREPLICA_HOSTS=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.services.replicas | .[]' 2>/dev/null); then
1201+
if DB_READREPLICA_HOSTS=$(echo ${POSTGRES_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.services.replicas | .[]' 2>/dev/null); then
11631202
if [ "$DB_READREPLICA_HOSTS" != "null" ]; then
11641203
DB_READREPLICA_HOSTS=$(echo "$DB_READREPLICA_HOSTS" | sed 's/^\|$//g' | paste -sd, -)
11651204
DB_CONSUMER=$(echo "${DB_CONSUMER}" | jq '. + {"'${SERVICE_NAME_UPPERCASE}'_READREPLICA_HOSTS":"'${DB_READREPLICA_HOSTS}'"}')
@@ -1170,15 +1209,16 @@ done
11701209

11711210
for SERVICE_NAME in "${!MONGODB_DBAAS_CONSUMER_SPECS[@]}"
11721211
do
1212+
SERVICE_NAME=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .metadata.name')
11731213
SERVICE_NAME_UPPERCASE=$(echo "$SERVICE_NAME" | tr '[:lower:]' '[:upper:]' | tr '-' '_')
1174-
DB_HOST=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.services.primary')
1175-
DB_USER=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.username')
1176-
DB_PASSWORD=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.password')
1177-
DB_NAME=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .consumer.database')
1178-
DB_PORT=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .provider.port')
1179-
DB_AUTHSOURCE=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .provider.auth.source')
1180-
DB_AUTHMECHANISM=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .provider.auth.mechanism')
1181-
DB_AUTHTLS=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .provider.auth.tls')
1214+
DB_HOST=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.services.primary')
1215+
DB_USER=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.username')
1216+
DB_PASSWORD=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.password')
1217+
DB_NAME=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.consumer.database')
1218+
DB_PORT=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.provider.port')
1219+
DB_AUTHSOURCE=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.provider.auth.source')
1220+
DB_AUTHMECHANISM=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.provider.auth.mechanism')
1221+
DB_AUTHTLS=$(echo ${MONGODB_DBAAS_CONSUMER_SPECS["$SERVICE_NAME"]} | jq -Rr '@base64d | fromjson | .spec.provider.auth.tls')
11821222
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}'"}'
11831223
DBAAS_VARIABLES=$(echo "$DBAAS_VARIABLES" | jq '. + '$(echo "$DB_CONSUMER" | jq -sMrc)'')
11841224
done
@@ -1297,11 +1337,6 @@ fi
12971337
# and instruct the user to either add the variable to the API, or contact support if they are unsure what the variable is
12981338
# insert warning message generator here?
12991339

1300-
currentStepEnd="$(date +"%Y-%m-%d %H:%M:%S")"
1301-
patchBuildStep "${buildStartTime}" "${previousStepEnd}" "${currentStepEnd}" "${NAMESPACE}" "updateEnvSecretsComplete" "Update Environment Secrets" "false"
1302-
previousStepEnd=${currentStepEnd}
1303-
beginBuildStep "Image Push to Registry" "pushingImages"
1304-
13051340
##############################################
13061341
### REDEPLOY DEPLOYMENTS IF CONFIG MAP CHANGES
13071342
##############################################
@@ -1313,6 +1348,13 @@ LAGOONPLATFORMENV_SHA=$(kubectl --insecure-skip-tls-verify -n ${NAMESPACE} get s
13131348
CONFIG_MAP_SHA=$(echo $LAGOONENV_SHA$LAGOONPLATFORMENV_SHA | sha256sum | awk '{print $1}')
13141349
export CONFIG_MAP_SHA
13151350

1351+
currentStepEnd="$(date +"%Y-%m-%d %H:%M:%S")"
1352+
patchBuildStep "${buildStartTime}" "${previousStepEnd}" "${currentStepEnd}" "${NAMESPACE}" "updateEnvSecretsComplete" "Update Environment Secrets" "false"
1353+
previousStepEnd=${currentStepEnd}
1354+
1355+
if [ "${LAGOON_VARIABLES_ONLY}" != "true" ]; then
1356+
beginBuildStep "Image Push to Registry" "pushingImages"
1357+
13161358
##############################################
13171359
### PUSH IMAGES TO REGISTRY
13181360
##############################################
@@ -1670,15 +1712,15 @@ echo "Updating lagoon-yaml configmap with a post-deploy version of the .lagoon.y
16701712
if kubectl -n ${NAMESPACE} get configmap lagoon-yaml &> /dev/null; then
16711713
# replace it, no need to check if the key is different, as that will happen in the pre-deploy phase
16721714
kubectl -n ${NAMESPACE} get configmap lagoon-yaml -o json | jq --arg add "`cat .lagoon.yml`" '.data."post-deploy" = $add' | kubectl apply -f -
1673-
else
1715+
else
16741716
# create it
16751717
kubectl -n ${NAMESPACE} create configmap lagoon-yaml --from-file=post-deploy=.lagoon.yml
16761718
fi
16771719
echo "Updating docker-compose-yaml configmap with a post-deploy version of the docker-compose.yml file"
16781720
if kubectl -n ${NAMESPACE} get configmap docker-compose-yaml &> /dev/null; then
16791721
# replace it, no need to check if the key is different, as that will happen in the pre-deploy phase
16801722
kubectl -n ${NAMESPACE} get configmap docker-compose-yaml -o json | jq --arg add "`cat ${DOCKER_COMPOSE_YAML}`" '.data."post-deploy" = $add' | kubectl apply -f -
1681-
else
1723+
else
16821724
# create it
16831725
kubectl -n ${NAMESPACE} create configmap docker-compose-yaml --from-file=post-deploy=${DOCKER_COMPOSE_YAML}
16841726
fi
@@ -1737,6 +1779,60 @@ if [ "$(featureFlag INSIGHTS)" = enabled ]; then
17371779
fi
17381780

17391781
fi
1782+
else
1783+
# variable only deployment
1784+
beginBuildStep "Restarting Deployments" "restartingDeployments"
1785+
1786+
##############################################
1787+
### APPLY RESOURCES for variable only deployments
1788+
##############################################
1789+
1790+
# remove any storage calculator pods before restarting deployments to prevent storage binding issues
1791+
STORAGE_CALCULATOR_PODS=$(kubectl -n ${NAMESPACE} get pods -l lagoon.sh/storageCalculator=true --no-headers 2>/dev/null | cut -d " " -f 1 | xargs)
1792+
for STORAGE_CALCULATOR_POD in $STORAGE_CALCULATOR_PODS; do
1793+
kubectl -n ${NAMESPACE} delete pod ${STORAGE_CALCULATOR_POD}
1794+
done
1795+
1796+
# patch the deployments with the changed configmap to force a rollout
1797+
CHANGES_MADE=false
1798+
1799+
DEPLOYMENTS=$(echo "$ENVIRONMENT_DATA" | jq -r '.deployments.items[]? | @base64')
1800+
for DEPLOYMENT in ${DEPLOYMENTS}
1801+
do
1802+
SERVICE_NAME=$(echo ${DEPLOYMENT} | jq -Rr '@base64d | fromjson | .metadata.name')
1803+
CURRENT_SHA=$(echo ${DEPLOYMENT} | jq -Rr '@base64d | fromjson | .spec.template.metadata.annotations."lagoon.sh/configMapSha"')
1804+
if [ "${CONFIG_MAP_SHA}" != "${CURRENT_SHA}" ]; then
1805+
CHANGES_MADE=true
1806+
kubectl -n ${NAMESPACE} patch deployment ${SERVICE_NAME} --type=merge --patch '{"spec":{"template":{"metadata":{"annotations":{"lagoon.sh/configMapSha":"'${CONFIG_MAP_SHA}'"}}}}}'
1807+
fi
1808+
done
1809+
1810+
# wait for the deployments to restart
1811+
for DEPLOYMENT in ${DEPLOYMENTS}
1812+
do
1813+
SERVICE_NAME=$(echo ${DEPLOYMENT} | jq -Rr '@base64d | fromjson | .metadata.name')
1814+
CURRENT_SHA=$(echo ${DEPLOYMENT} | jq -Rr '@base64d | fromjson | .spec.template.metadata.annotations."lagoon.sh/configMapSha"')
1815+
if [ "${CONFIG_MAP_SHA}" != "${CURRENT_SHA}" ]; then
1816+
. /kubectl-build-deploy/scripts/exec-monitor-deploy.sh
1817+
fi
1818+
done
1819+
1820+
if [ "$CHANGES_MADE" == "false" ]; then
1821+
echo "No variables changed, no services restarted"
1822+
fi
1823+
1824+
if kubectl -n ${NAMESPACE} get configmap lagoon-env &> /dev/null; then
1825+
# now delete the configmap after all the lagoon-env and lagoon-platform-env calcs have been done
1826+
# and the deployments have rolled out successfully, this makes less problems rolling back if a build fails
1827+
# somewhere between the new secret being created, and the deployments rolling out
1828+
kubectl -n ${NAMESPACE} delete configmap lagoon-env
1829+
fi
1830+
1831+
currentStepEnd="$(date +"%Y-%m-%d %H:%M:%S")"
1832+
patchBuildStep "${buildStartTime}" "${previousStepEnd}" "${currentStepEnd}" "${NAMESPACE}" "deploymentRestartComplete" "Restarting Deployments" "false"
1833+
previousStepEnd=${currentStepEnd}
1834+
# variable only deployment
1835+
fi
17401836

17411837
if [[ "$BUILD_WARNING_COUNT" -gt 0 ]]; then
17421838
beginBuildStep "Completed With Warnings" "deployCompletedWithWarnings"

0 commit comments

Comments
 (0)