Skip to content

Instantly share code, notes, and snippets.

@kiennt
Last active March 26, 2018 01:47
Show Gist options
  • Save kiennt/bfde6d483a8ba10d78c10c39934c7141 to your computer and use it in GitHub Desktop.
Save kiennt/bfde6d483a8ba10d78c10c39934c7141 to your computer and use it in GitHub Desktop.
backup
#!/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
#!/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