#!/bin/bash

################################################################################
#
# do-snapshots.sh - Rafael Carreiro (rafael.oliveira@arcasolutions.com)
#
# Executa snapshot de todas as droplets utilizando a ferramenta doctl.
#
# Ordem de execução:
#  1. Verifica variáveis necessárias para funcionamento;
#  2. Gera lista de droplets existentes e grava em arquivo;
#  3. Lê informações no arquivo criado e realiza snapshots;
#  3.1 Para cada droplet será verificado quantas snapshots já existem e será
#      enviado informações por email.
#
#-------------------------------------------------------------------------------
#
#  Instalação
#  0. Instale e configure a ferramenta doctl:
#     $ https://github.com/digitalocean/doctl
#
#  1. Crie a estrutura de diretórios do scripts (Ex. com as variáveis):
#     $ mkdir -p ${PATH_SCRIPT} ${PATH_LOGS}
#
#  2. Baixe o script em ${PATH_SCRIPT}:
#     $ wget -O ${PATH_SCRIPT}/do-snapshots.sh http://arcafiles.arcasolutions.com/infra/do-snapshots.sh
#
#  3. Dê permissão de execução para o script:
#     $ chmod +x ${PATH_SCRIPT}/do-snapshots.sh
#
#  4. Configure as variáveis de acordo com o seu ambiente:
#     $ PATH_SCRIPT=/opt/arcasolutions/scripts/do-snapshots
#     $ PATH_LOGS=${PATH_SCRIPT}/logs
#     $ LIST_DROPLETS=${PATH_SCRIPT}/all-droplets.txt
#     $ EMAIL=infra@arcasolutions.com
#
#  5. Agende o cron para execução automática diariamente:
#     $ echo "0 0 * * * ${PATH_SCRIPT}/do-snapshots.sh &" >> /var/spool/cron/root
#
#-------------------------------------------------------------------------------
#
#  Histórico
#  v0.1   2018-07-04, Rafael Carreiro: 
#         Base finalizada, ações primárias executando normalmente, mas ainda
#         sem limite de quantidade.
#  
################################################################################

################################################################################
# Variáveis 
################################################################################

PATH_SCRIPT=/opt/arcasolutions/scripts/do-snapshots
PATH_LOGS=${PATH_SCRIPT}/logs
LIST_DROPLETS=${PATH_SCRIPT}/all-droplets.txt
EMAIL=infra@arcasolutions.com

################################################################################
# Gerar lista de droplets
################################################################################

doctl compute droplet list --no-header --format="ID,Name,PublicIPv4" | \
sed 's/\( \)\+/:/g' > ${LIST_DROPLETS}

################################################################################
# Iniciar execução 
################################################################################

while IFS=: read id url ip
do 
	log="${PATH_LOGS}/$(date +%x)-${id}.txt"
	
	# Informar inicio no log geral
	echo -e "[ $(date "+%x %T") ] Iniciando snapshot para $url\n" >> $log

	# Começar criação da snapshot 
	doctl compute da snapshot $id --snapshot-name "$(date +%x) ${url}" >> $log

	# Informar fim da execução 
	echo -e "\n[ $(date "+%x %T") ] Finalizado\n" >> $log

	# Enviar o log por email
	mail -u "root" -s "Digital Ocean - Snapshot $url" $EMAIL < $log

done < ${LIST_DROPLETS}

################################################################################
# Fim
################################################################################
