-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.sh
More file actions
executable file
·132 lines (110 loc) · 4.14 KB
/
Copy pathdeploy.sh
File metadata and controls
executable file
·132 lines (110 loc) · 4.14 KB
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
#!/bin/bash
# Variables
PREFIX='webmi'
SUFFIX='test'
LOCATION='westeurope'
MANAGED_IDENTITY_TYPE='SystemAssigned' # SystemAssigned or UserAssigned
CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)"
ZIPFILE="planner_website.zip"
# Change the current directory to the script's directory
cd "$CURRENT_DIR" || exit
# Determine environment
if command -v az >/dev/null 2>&1; then
CLOUD_NAME=$(az cloud show --query name --output tsv 2>&1 || echo "")
if [[ "$CLOUD_NAME" == "LocalStack" ]]; then
ENVIRONMENT="LocalStack"
elif [[ "$CLOUD_NAME" == "AzureCloud" ]]; then
ENVIRONMENT="AzureCloud"
else
ENVIRONMENT="AzureCloud"
fi
else
ENVIRONMENT="AzureCloud"
fi
# Run terraform init and apply
if [[ $ENVIRONMENT == "LocalStack" ]]; then
echo "Using tflocal and azlocal for LocalStack emulator environment."
TERRAFORM="tflocal"
# Log Azure auth environment variables before unsetting
echo "[DEBUG] Azure auth env vars before unsetting:"
echo "[DEBUG] ARM_CLIENT_ID=${ARM_CLIENT_ID:-<not set>}"
echo "[DEBUG] ARM_CLIENT_SECRET=${ARM_CLIENT_SECRET:+<set but hidden>}${ARM_CLIENT_SECRET:-<not set>}"
echo "[DEBUG] ARM_TENANT_ID=${ARM_TENANT_ID:-<not set>}"
echo "[DEBUG] ARM_SUBSCRIPTION_ID=${ARM_SUBSCRIPTION_ID:-<not set>}"
echo "[DEBUG] AZURE_CLIENT_ID=${AZURE_CLIENT_ID:-<not set>}"
echo "[DEBUG] AZURE_TENANT_ID=${AZURE_TENANT_ID:-<not set>}"
echo "[DEBUG] Azure auth env vars after unsetting: all cleared"
AZ="azlocal"
else
echo "Using standard terraform and az for AzureCloud environment."
TERRAFORM="terraform"
AZ="az"
fi
echo "[DEBUG] Cloud name: '$CLOUD_NAME', Environment: '$ENVIRONMENT', Tools: TERRAFORM=$TERRAFORM, AZ=$AZ"
echo "[DEBUG] TERRAFORM command location: $(which $TERRAFORM 2>/dev/null || echo 'not found')"
# Enable Terraform debug logging
export TF_LOG=DEBUG
export TF_LOG_PATH="$CURRENT_DIR/terraform-debug.log"
echo "[DEBUG] Checking what tflocal does..."echo "[DEBUG] tflocal version: $($TERRAFORM version 2>&1 | head -1)"echo "[DEBUG] Contents of current directory before init:"ls -la . 2>&1 | head -20
echo "[DEBUG] Terraform debug logging enabled: TF_LOG=DEBUG, TF_LOG_PATH=$TF_LOG_PATH"
echo "Initializing Terraform..."
$TERRAFORM init -upgrade
# Run terraform plan and check for errors
echo "Planning Terraform deployment..."
$TERRAFORM plan -out=tfplan \
-var "prefix=$PREFIX" \
-var "suffix=$SUFFIX" \
-var "location=$LOCATION" \
-var "managed_identity_type=$MANAGED_IDENTITY_TYPE"
if [[ $? != 0 ]]; then
echo "Terraform plan failed. Exiting."
echo "============================================================"
echo "Last 100 lines of Terraform debug log:"
echo "============================================================"
tail -100 "$TF_LOG_PATH" 2>/dev/null || echo "Debug log not found"
echo "============================================================"
exit 1
fi
# Apply the Terraform configuration
echo "Applying Terraform configuration..."
$TERRAFORM apply -auto-approve tfplan
if [[ $? != 0 ]]; then
echo "Terraform apply failed. Exiting."
exit 1
fi
# Get the output values
RESOURCE_GROUP_NAME=$($TERRAFORM output -raw resource_group_name)
STORAGE_ACCOUNT_NAME=$($TERRAFORM output -raw storage_account_name)
WEB_APP_NAME=$($TERRAFORM output -raw web_app_name)
# Check if output values are empty
if [[ -z "$WEB_APP_NAME" || -z "$STORAGE_ACCOUNT_NAME" ]]; then
echo "Web App Name or Storage Account Name is empty. Exiting."
exit 1
fi
# Change current directory to source folder
cd "../src" || exit
# Remove any existing zip package of the web app
if [ -f "$ZIPFILE" ]; then
rm "$ZIPFILE"
fi
# Create the zip package of the web app
echo "Creating zip package of the web app..."
zip -r "$ZIPFILE" app.py activities.py database.py static templates requirements.txt
# Deploy the web app
echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..."
$AZ webapp deploy \
--resource-group "$RESOURCE_GROUP_NAME" \
--name "$WEB_APP_NAME" \
--src-path "$ZIPFILE" \
--type zip \
--async true 1>/dev/null
if [ $? -eq 0 ]; then
echo "Web app [$WEB_APP_NAME] created successfully."
else
echo "Failed to create web app [$WEB_APP_NAME]."
exit 1
fi
# Remove the zip package of the web app
if [ -f "$ZIPFILE" ]; then
rm "$ZIPFILE"
fi