-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathpackage.sh
executable file
·166 lines (141 loc) · 7.55 KB
/
package.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#!/usr/bin/env bash
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.
PRJ_ROOT="$(cd `dirname "${BASH_SOURCE}"`/../..; pwd)"
ENV_CODE=${1:-$ENV_CODE}
PIPELINE_NAME=${2:-${PIPELINE_NAME:-"custom-vision-model"}}
AI_MODEL_INFRA_TYPE=${3:-${AI_MODEL_INFRA_TYPE:-"batch-account"}} # Currently supported values are aks and batch-account
AI_MODEL_INFRA_RESOURCE_NAME=${4:-$AI_MODEL_INFRA_RESOURCE_NAME}
AI_MODEL_INFRA_RG_NAME=${5:-$AI_MODEL_INFRA_RG_NAME}
AI_MODEL_INFRA_STORAGE_ACCOUNT_NAME=${6:-$AI_MODEL_INFRA_STORAGE_ACCOUNT_NAME}
KEY_VAULT_NAME=${7:-$KEY_VAULT_NAME}
RAW_STORAGE_ACCOUNT_RG=${8:-${RAW_STORAGE_ACCOUNT_RG:-"${ENV_CODE}-data-rg"}}
RAW_STORAGE_ACCOUNT_NAME=${9:-$RAW_STORAGE_ACCOUNT_NAME}
SYNAPSE_WORKSPACE_RG=${10:-${SYNAPSE_WORKSPACE_RG:-"${ENV_CODE}-pipeline-rg"}}
SYNAPSE_WORKSPACE_NAME=${11:-$SYNAPSE_WORKSPACE_NAME}
SYNAPSE_STORAGE_ACCOUNT_NAME=${12:-$SYNAPSE_STORAGE_ACCOUNT_NAME}
SYNAPSE_POOL=${13:-$SYNAPSE_POOL}
DEPLOY_PGSQL=${14:-${DEPLOY_PGSQL:-"true"}}
MODE="$AI_MODEL_INFRA_TYPE$([[ $DEPLOY_PGSQL = "false" ]] && echo ",no-postgres" || echo '')"
set -ex
if [[ "$AI_MODEL_INFRA_TYPE" != "batch-account" ]] && [[ "$AI_MODEL_INFRA_TYPE" != "aks" ]]; then
echo "Invalid value for AI_MODEL_INFRA_TYPE! Supported values are 'aks' and 'batch-account'."
exit 1
fi
if [[ -z "$RAW_STORAGE_ACCOUNT_NAME" ]]; then
RAW_STORAGE_ACCOUNT_NAME=$(az storage account list --query "[?tags.store && tags.store == 'raw'].name" -o tsv -g $RAW_STORAGE_ACCOUNT_RG)
fi
if [[ -z "$SYNAPSE_STORAGE_ACCOUNT_NAME" ]]; then
SYNAPSE_STORAGE_ACCOUNT_NAME=$(az storage account list --query "[?tags.store && tags.store == 'synapse'].name" -o tsv -g $SYNAPSE_WORKSPACE_RG)
fi
if [[ -z "$KEY_VAULT_NAME" ]]; then
KEY_VAULT_NAME=$(az keyvault list --query "[?tags.usage && tags.usage == 'linkedService'].name" -o tsv -g $SYNAPSE_WORKSPACE_RG)
fi
if [[ -z "$SYNAPSE_WORKSPACE_NAME" ]]; then
SYNAPSE_WORKSPACE_NAME=$(az synapse workspace list --query "[?tags.workspaceId && tags.workspaceId == 'default'].name" -o tsv -g $SYNAPSE_WORKSPACE_RG)
SYNAPSE_WORKSPACE_ID=$(az synapse workspace list --query "[?tags.workspaceId && tags.workspaceId == 'default'].id" -o tsv -g $SYNAPSE_WORKSPACE_RG)
else
SYNAPSE_WORKSPACE_ID=$(az synapse workspace list --query "[?name == '${BATCH_ACCOUNT_NAME}'].id" -o tsv -g $SYNAPSE_WORKSPACE_RG)
fi
if [[ -z "$SYNAPSE_POOL" ]]; then
SYNAPSE_POOL=$(az synapse spark pool list --workspace-name $SYNAPSE_WORKSPACE_NAME --resource-group $SYNAPSE_WORKSPACE_RG --query "[?tags.poolId && tags.poolId == 'default'].name" -o tsv)
fi
if [[ "$AI_MODEL_INFRA_TYPE" == "batch-account" ]]; then
echo "Selected AI model processing infra-type: Batch-Account!!!"
BATCH_ACCOUNT_NAME=$AI_MODEL_INFRA_RESOURCE_NAME
BATCH_ACCOUNT_RG_NAME=$AI_MODEL_INFRA_RG_NAME
BATCH_STORAGE_ACCOUNT_NAME=$AI_MODEL_INFRA_STORAGE_ACCOUNT_NAME
if [[ -z "$BATCH_ACCOUNT_NAME" ]] && [[ -z "$BATCH_ACCOUNT_RG_NAME" ]]; then
BATCH_ACCOUNT_RG_NAME="${ENV_CODE}-orc-rg"
fi
if [[ -z "$BATCH_ACCOUNT_NAME" ]]; then
BATCH_ACCOUNT_NAME=$(az batch account list --query "[?tags.type && tags.type == 'batch'].name" -o tsv -g $BATCH_ACCOUNT_RG_NAME)
fi
if [[ -z "$BATCH_ACCOUNT_RG_NAME" ]]; then
BATCH_ACCOUNT_ID=$(az batch account list --query "[?name == '${BATCH_ACCOUNT_NAME}'].id" -o tsv)
BATCH_ACCOUNT_RG_NAME=$(az resource show --ids ${BATCH_ACCOUNT_ID} --query resourceGroup -o tsv)
fi
if [[ -z "$BATCH_STORAGE_ACCOUNT_NAME" ]]; then
BATCH_STORAGE_ACCOUNT_NAME=$(az storage account list --query "[?tags.store && tags.store == 'batch'].name" -o tsv -g $BATCH_ACCOUNT_RG_NAME)
if [[ -z "$BATCH_STORAGE_ACCOUNT_NAME" ]]; then
BATCH_STORAGE_ACCOUNT_NAME=$(az storage account list --resource-group $BATCH_ACCOUNT_RG_NAME --query [0].name -o tsv)
fi
fi
if [[ -z "$BATCH_ACCOUNT_LOCATION" ]]; then
BATCH_ACCOUNT_LOCATION=$(az batch account list --query "[?name == '${BATCH_ACCOUNT_NAME}'].location" -o tsv)
fi
echo 'Retrieved resource from Azure and ready to package'
PACKAGING_SCRIPT="python3 ${PRJ_ROOT}/deploy/scripts/package.py \
--raw_storage_account_name $RAW_STORAGE_ACCOUNT_NAME \
--synapse_storage_account_name $SYNAPSE_STORAGE_ACCOUNT_NAME \
--modes $MODE \
--batch_storage_account_name $BATCH_STORAGE_ACCOUNT_NAME \
--batch_account $BATCH_ACCOUNT_NAME \
--batch_pool_name ${ENV_CODE}-data-cpu-pool \
--linked_key_vault $KEY_VAULT_NAME \
--synapse_pool_name $SYNAPSE_POOL \
--location $BATCH_ACCOUNT_LOCATION \
--pipeline_name $PIPELINE_NAME \
--synapse_workspace $SYNAPSE_WORKSPACE_NAME \
--synapse_workspace_id $SYNAPSE_WORKSPACE_ID"
elif [[ "$AI_MODEL_INFRA_TYPE" == "aks" ]]; then
echo "Selected AI model processing infra-type: AKS!!!"
AKS_ID=$(az aks list -g ${ENV_CODE}-orc-rg --query "[?tags.type && tags.type == 'k8s'].id" -otsv)
counter=0
while [[ ${AKS_ID} == '' ]];
do
if [[ $counter -gt 4 ]]; then
echo "Failed to get AKS ID"
break
fi
sleep 60
AKS_ID=$(az aks list -g ${ENV_CODE}-orc-rg --query "[?tags.type && tags.type == 'k8s'].id" -otsv)
counter=$((counter+1))
done
PERSISTENT_VOLUME_CLAIM="${ENV_CODE}-vision-fileshare"
AKS_MANAGEMENT_REST_URL="https://management.azure.com${AKS_ID}/runCommand?api-version=2022-02-01"
BASE64ENCODEDZIPCONTENT_FUNCTIONAPP_HOST=$(az functionapp list -g ${ENV_CODE}-orc-rg \
--query "[?tags.type && tags.type == 'functionapp'].hostNames[0]" | jq -r '.[0]')
counter=0
while [[ ${BASE64ENCODEDZIPCONTENT_FUNCTIONAPP_HOST} == '' ]];
do
if [[ $counter -gt 4 ]]; then
echo "Failed to get functionapp host"
break
fi
sleep 60
BASE64ENCODEDZIPCONTENT_FUNCTIONAPP_HOST=$(az functionapp list -g ${ENV_CODE}-orc-rg \
--query "[?tags.type && tags.type == 'functionapp'].hostNames[0]" | jq -r '.[0]')
counter=$((counter+1))
done
BASE64ENCODEDZIPCONTENT_FUNCTIONAPP_URL="https://${BASE64ENCODEDZIPCONTENT_FUNCTIONAPP_HOST}"
PACKAGING_SCRIPT="python3 ${PRJ_ROOT}/deploy/scripts/package.py \
--raw_storage_account_name $RAW_STORAGE_ACCOUNT_NAME \
--synapse_storage_account_name $SYNAPSE_STORAGE_ACCOUNT_NAME \
--modes $MODE \
--persistent_volume_claim $PERSISTENT_VOLUME_CLAIM \
--aks_management_rest_url $AKS_MANAGEMENT_REST_URL \
--base64encodedzipcontent_functionapp_url $BASE64ENCODEDZIPCONTENT_FUNCTIONAPP_URL \
--linked_key_vault $KEY_VAULT_NAME \
--synapse_pool_name $SYNAPSE_POOL \
--pipeline_name $PIPELINE_NAME \
--synapse_workspace $SYNAPSE_WORKSPACE_NAME \
--synapse_workspace_id $SYNAPSE_WORKSPACE_ID"
fi
if [[ $DEPLOY_PGSQL == "true" ]]; then
DB_SERVER_NAME=$(az postgres server list --resource-group $RAW_STORAGE_ACCOUNT_RG --query '[].fullyQualifiedDomainName' -o tsv)
echo $DB_SERVER_NAME
DB_NAME=$(az postgres server list --resource-group $RAW_STORAGE_ACCOUNT_RG --query '[].name' -o tsv)
echo $DB_NAME
DB_USERNAME=$(az postgres server list --resource-group $RAW_STORAGE_ACCOUNT_RG --query '[].administratorLogin' -o tsv)@$DB_NAME
echo $DB_USERNAME
if [[ -n $DB_USERNAME ]] && [[ -n $DB_SERVER_NAME ]]; then
PACKAGING_SCRIPT=$(echo $PACKAGING_SCRIPT \
--pg_db_username $DB_USERNAME \
--pg_db_server_name $DB_SERVER_NAME)
fi
fi
echo $PACKAGING_SCRIPT
echo 'Starting packaging script ...'
$PACKAGING_SCRIPT
echo 'Packaging script completed'