Last active
March 26, 2018 01:47
-
-
Save kiennt/bfde6d483a8ba10d78c10c39934c7141 to your computer and use it in GitHub Desktop.
backup
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
create_backup_account() { | |
PROJECT_NAME=$1 | |
SERVICE_ACCOUNT_NAME=$2 | |
SERVICE_ACCOUNT=${SERVICE_ACCOUNT_NAME}@${PROJECT_NAME}.iam.gserviceaccount.com | |
gcloud iam service-accounts \ | |
create ${SERVICE_ACCOUNT_NAME} \ | |
--display-name "Backup service" | |
gcloud projects add-iam-policy-binding ${PROJECT_NAME} \ | |
--member serviceAccount:${SERVICE_ACCOUNT} \ | |
--role roles/storage.objectCreator \ | |
--role roles/storage.objectViewer \ | |
--role roles/storage.objectAdmin \ | |
--role roles/storage.admin | |
} | |
install() { | |
SERVICE_ACCOUNT_NAME=$2 | |
INSTANCE_NAME=$3 | |
# assign service account to an instance | |
INSTANCE_NAME=redis-backend-prod | |
gcloud compute instances stop $INSTANCE_NAME | |
gcloud compute instances set-service-account $INSTANCE_NAME \ | |
--service-account=${SERVICE_ACCOUNT} \ | |
--scopes=storage-rw | |
gcloud compute instances start $INSTANCE_NAME | |
} | |
case $1 in | |
create_backup_account) | |
create_backup_account $2 $3 | |
;; | |
install) | |
install $2 $3 | |
;; | |
*) | |
echo "gcloud_helper create_backup_account PROJECT_NAME SERVICE_ACCOUNT_NAME" | |
echo "e.g: gcloud_helper create_backup_account tkn backup" | |
echo "gcloud_helper install PROJECT_NAME SERVICE_ACCOUNT_NAME INSTANCE_NAME" | |
echo "e.g: gcloud_helper install backup redis-backend-prod" | |
;; | |
esac |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
HOSTNAME=$(hostname) | |
backup() { | |
GCLOUD_BACKUP_BUCKET=$1 | |
FOLDER=$2 | |
CURRENT_DATE=$(date +"%Y%m%d-%H%M") | |
FILE_NAME=backup.${CURRENT_DATE}.tar.gz | |
cd ${FOLDER} | |
tar -zcf ${FILE_NAME} . | |
gsutil cp ${FILE_NAME} gs://${GCLOUD_BACKUP_BUCKET}/${HOSTNAME}/${FILE_NAME} | |
rm -rf ${FILE_NAME} | |
} | |
restore() { | |
GCLOUD_BACKUP_BUCKET=$1 | |
FOLDER=$2 | |
FILE_NAME=backup.$3.tar.gz | |
cd $FOLDER | |
tar -zcf old.tar.gz . | |
gsutil cp gs://${GCLOUD_BACKUP_BUCKET}/${HOSTNAME}/${FILE_NAME} ${FILE_NAME} | |
tar -xvf ${FILE_NAME} | |
} | |
init() { | |
GCLOUD_BACKUP_BUCKET=$2 | |
FOLDER=$3 | |
CRON_PATTERN=$(echo "$4") | |
COMMAND="$(pwd)/jarvis backup ${GCLOUD_BACKUP_BUCKET} $FOLDER" | |
{ crontab -l; echo "${CRON_PATTERN} ${COMMAND}"; } | crontab - | |
} | |
case $1 in | |
backup) | |
backup $2 $3 | |
;; | |
restore) | |
restore $2 $3 $4 | |
;; | |
init) | |
init "$@" | |
;; | |
*) | |
echo "Backup script" | |
echo "Usage" | |
echo " 1. jarvis init CRON_PATTERN GCLOUD_BACKUP_BUCKET FOLDER" | |
echo " E.g: jarvis init tkn-backup /var/www/redis \"0 19 * * *\"" | |
echo "" | |
echo " 2. jarvis backup GCLOUD_BACKUP_BUCKET FOLDER" | |
echo " E.g jarvis backup tkn-backup /var/www/redis" | |
echo "" | |
echo " 3. jarvis restore GCLOUD_BACKUP_BUCKET FOLDER DATETIME" | |
echo " E.g jarvis restore tkn-backup /var/www/redis 20180302-1212" | |
;; | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment