@@ -17,6 +17,7 @@ SERVICES_POOL="services"
17
17
WORKSPACES_POOL=" workspaces"
18
18
19
19
K8S_NODE_VM_SIZE=${K8S_NODE_VM_SIZE:= " Standard_D4_v3" }
20
+ BACKUP_SP_NAME=" velero"
20
21
21
22
function check_prerequisites() {
22
23
if [ -z " ${AZURE_SUBSCRIPTION_ID} " ]; then
@@ -123,7 +124,7 @@ function install() {
123
124
--node-osdisk-size " 100" \
124
125
--node-vm-size " ${K8S_NODE_VM_SIZE} " \
125
126
--resource-group " ${RESOURCE_GROUP} "
126
- fi
127
+ fi
127
128
128
129
setup_kubectl
129
130
@@ -141,6 +142,7 @@ function install() {
141
142
setup_managed_dns
142
143
setup_mysql_database
143
144
setup_storage
145
+ setup_backup
144
146
output_config
145
147
}
146
148
@@ -366,6 +368,82 @@ function setup_mysql_database() {
366
368
--start-ip-address " 0.0.0.0"
367
369
}
368
370
371
+ function setup_backup() {
372
+ if [ -n " ${BACKUPS_ENABLED} " ] && [ " ${BACKUPS_ENABLED} " == " true" ]; then
373
+ BACKUP_RESOURCE_GROUP=" $( az aks show --name gitpod -g gitpod --query " nodeResourceGroup" -o tsv) "
374
+
375
+ echo " Configuring backups in ${BACKUP_RESOURCE_GROUP} ..."
376
+
377
+ # Based from https://github.com/vmware-tanzu/velero-plugin-for-microsoft-azure#setup
378
+ BACKUP_ACCOUNT=" ${STORAGE_ACCOUNT_NAME} backup"
379
+ if [ " $( az storage account show --name ${BACKUP_ACCOUNT} --resource-group ${BACKUP_RESOURCE_GROUP} --query " name == '${BACKUP_ACCOUNT} '" || echo " empty" ) " == " true" ]; then
380
+ echo " Backup storage account exists..."
381
+ else
382
+ echo " Create backup storage account..."
383
+ az storage account create \
384
+ --name " ${STORAGE_ACCOUNT_NAME} backup" \
385
+ --resource-group " ${BACKUP_RESOURCE_GROUP} " \
386
+ --location " ${LOCATION} " \
387
+ --sku Standard_GRS \
388
+ --encryption-services blob \
389
+ --https-only true \
390
+ --kind BlobStorage \
391
+ --access-tier Hot
392
+ fi
393
+
394
+ ACCOUNT_KEY=" $( az storage account keys list --resource-group " ${BACKUP_RESOURCE_GROUP} " --account-name " ${BACKUP_ACCOUNT} " --query " [0].value" -o tsv) "
395
+
396
+ BLOB_CONTAINER=" velero"
397
+ if [ " $( az storage container show --account-name ${BACKUP_ACCOUNT} --name ${BLOB_CONTAINER} --account-key=" ${ACCOUNT_KEY} " --query " name == '${BLOB_CONTAINER} '" || echo " empty" ) " == " true" ]; then
398
+ echo " Backup storage container exists..."
399
+ else
400
+ echo " Create backup storage container..."
401
+ az storage container create \
402
+ -n " ${BLOB_CONTAINER} " \
403
+ --account-key=" ${ACCOUNT_KEY} " \
404
+ --public-access off \
405
+ --account-name " ${BACKUP_ACCOUNT} "
406
+ fi
407
+
408
+ echo " Create service principal for Velero"
409
+ AZURE_ROLE=" Contributor"
410
+
411
+ # Delete each time
412
+ az ad sp delete --id $( az ad sp list --display-name " ${BACKUP_SP_NAME} " --query " [].id" -o tsv) || true
413
+
414
+ AZURE_CLIENT_SECRET=$( az ad sp create-for-rbac \
415
+ --display-name " ${BACKUP_SP_NAME} " \
416
+ --role " ${AZURE_ROLE} " \
417
+ --scopes /subscriptions/27ef008d-9475-4fe2-ac63-d15da9362546 \
418
+ --query " password" \
419
+ -o tsv)
420
+
421
+ AZURE_CLIENT_ID=$( az ad sp list --display-name " ${BACKUP_SP_NAME} " --query ' [0].appId' -o tsv)
422
+
423
+ cat << EOF > ./credentials-velero
424
+ AZURE_SUBSCRIPTION_ID=${AZURE_SUBSCRIPTION_ID}
425
+ AZURE_TENANT_ID=${AZURE_TENANT_ID}
426
+ AZURE_CLIENT_ID=${AZURE_CLIENT_ID}
427
+ AZURE_CLIENT_SECRET=${AZURE_CLIENT_SECRET}
428
+ AZURE_RESOURCE_GROUP=${BACKUP_RESOURCE_GROUP}
429
+ AZURE_CLOUD_NAME=AzurePublicCloud
430
+ EOF
431
+
432
+ # Delete to force update to new values
433
+ velero uninstall --force
434
+
435
+ velero install \
436
+ --provider azure \
437
+ --plugins velero/velero-plugin-for-microsoft-azure:v1.4.0 \
438
+ --bucket " ${BLOB_CONTAINER} " \
439
+ --secret-file ./credentials-velero \
440
+ --backup-location-config " resourceGroup=${BACKUP_RESOURCE_GROUP} ,storageAccount=${BACKUP_ACCOUNT} ,subscriptionId=${AZURE_SUBSCRIPTION_ID} " \
441
+ --snapshot-location-config " apiTimeout=2m" \
442
+ --use-restic \
443
+ --wait
444
+ fi
445
+ }
446
+
369
447
function setup_storage() {
370
448
if [ " $( az storage account show --name ${STORAGE_ACCOUNT_NAME} --resource-group ${RESOURCE_GROUP} --query " name == '${STORAGE_ACCOUNT_NAME} '" || echo " empty" ) " == " true" ]; then
371
449
echo " Storage account exists..."
@@ -397,7 +475,7 @@ function setup_storage() {
397
475
function uninstall() {
398
476
check_prerequisites
399
477
400
- read -p " Are you sure you want to delete: Gitpod (y/n )? " -n 1 -r
478
+ read -p " Are you sure you want to delete: Gitpod (y/N )? " -n 1 -r
401
479
if [[ $REPLY =~ ^[Yy]$ ]]; then
402
480
set +e
403
481
@@ -418,6 +496,11 @@ function uninstall() {
418
496
--resource-group " ${RESOURCE_GROUP} " \
419
497
--yes
420
498
499
+ if [ -n " ${BACKUPS_ENABLED} " ] && [ " ${BACKUPS_ENABLED} " == " true" ]; then
500
+ echo " Deleting backup service principal"
501
+ az ad sp delete --id $( az ad sp list --display-name " ${BACKUP_SP_NAME} " --query " [].id" -o tsv) || true
502
+ fi
503
+
421
504
printf " \n%s\n" " Please make sure to delete the resource group ${RESOURCE_GROUP} and services:"
422
505
printf " %s\n" " - https://portal.azure.com/#resource/subscriptions/${AZURE_SUBSCRIPTION_ID} /resourceGroups/${RESOURCE_GROUP} /overview"
423
506
fi
0 commit comments