From 047eefb43c88fc2c74f5347446f00a1aaf28d997 Mon Sep 17 00:00:00 2001 From: algattik Date: Wed, 24 Jul 2019 07:12:38 +0200 Subject: [PATCH] Make SQL provisioning scripts fail on error --- components/azure-sql/create-sql.sh | 23 +++++++++++++++++++-- components/azure-sql/provision/provision.sh | 16 +++++++++++++- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/components/azure-sql/create-sql.sh b/components/azure-sql/create-sql.sh index 431f8f6a..7863cffe 100755 --- a/components/azure-sql/create-sql.sh +++ b/components/azure-sql/create-sql.sh @@ -45,7 +45,8 @@ az storage file upload-batch --source ../components/azure-sql/provision \ -o tsv >> log.txt echo 'running provisioning scripts in container instance' -az container create -g $RESOURCE_GROUP -n sqlprovision \ +instanceName="sqlprovision-$(uuidgen | tr A-Z a-z)" +az container create -g $RESOURCE_GROUP -n "$instanceName" \ --image mcr.microsoft.com/mssql-tools:v1 \ --azure-file-volume-account-name $AZURE_STORAGE_ACCOUNT --azure-file-volume-account-key $AZURE_STORAGE_KEY \ --azure-file-volume-share-name sqlprovision --azure-file-volume-mount-path /sqlprovision \ @@ -56,6 +57,24 @@ az container create -g $RESOURCE_GROUP -n sqlprovision \ --restart-policy Never \ -o tsv >> log.txt +TIMEOUT=60 +for i in $(seq 1 $TIMEOUT); do + containerState=$(az container show -g $RESOURCE_GROUP -n "$instanceName" --query instanceView.state -o tsv) + case "state_$containerState" in + state_Pending|state_Running) : ;; + *) break;; + esac +done + +if [ "$containerState" != "Succeeded" ]; then + az container logs -g $RESOURCE_GROUP -n "$instanceName" +fi + echo 'deleting container instance' -az container delete -g $RESOURCE_GROUP -n sqlprovision --yes \ +echo az container delete -g $RESOURCE_GROUP -n "$instanceName" --yes \ -o tsv >> log.txt + +if [ "$containerState" != "Succeeded" ]; then + echo "SQL provisioning FAILED" + exit 1 +fi diff --git a/components/azure-sql/provision/provision.sh b/components/azure-sql/provision/provision.sh index 2def3496..f125ef5f 100644 --- a/components/azure-sql/provision/provision.sh +++ b/components/azure-sql/provision/provision.sh @@ -1,2 +1,16 @@ #!/bin/bash -/opt/mssql-tools/bin/sqlcmd -S "$SQL_SERVER_NAME.database.windows.net" -d "$SQL_DATABASE_NAME" -U serveradmin -P "$SQL_ADMIN_PASS" -i /sqlprovision/provision.sql +function run_sqlcmd { + /opt/mssql-tools/bin/sqlcmd -e -b -S "$SQL_SERVER_NAME.database.windows.net" -d "$SQL_DATABASE_NAME" -U serveradmin -P "$SQL_ADMIN_PASS" "$@" +} + +run_sqlcmd -Q "CREATE TABLE IF NOT EXISTS sqlprovision(script nvarchar(4000))" +for provisioning_script in /sqlprovision/*.sql; do + echo -n "[$provisioning_script] " + already_run=$(run_sqlcmd -Q "SELECT count(*) FROM sqlprovision WHERE script='$(basename $provisioning_script)'") + if [ "$already_run" == "0" ]; then + echo "running sqlcmd" + run_sqlcmd -i /sqlprovision/provision.sql + else + echo "already run" + fi +done