Skip to content

Instantly share code, notes, and snippets.

@frekele
Created December 7, 2016 23:10
Show Gist options
  • Save frekele/b5de4d8efea3784780bce61230acf2b5 to your computer and use it in GitHub Desktop.
Save frekele/b5de4d8efea3784780bce61230acf2b5 to your computer and use it in GitHub Desktop.
#!/bin/bash
### REF: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-using-volumes.html
### http://docs.aws.amazon.com/cli/latest/reference/ec2/attach-volume.html
### http://docs.aws.amazon.com/cli/latest/reference/ec2/detach-volume.html
set -e
#Id do volume, adicionar manualmente aqui.
VOLUME_ID=$PERSISTENT_VOLUME_ID
#Diretorio de montagem.
MOUNT_DIR=/mnt/vol-persistent-tools
#Nome da regiao aws.
REGION=$INSTANCE_REGION
#Id da instancia.
INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
#Cria diretorio para montagem.
createDirectoryMount(){
if [ -d "$MOUNT_DIR" ]; then
echo "Diretorio: $MOUNT_DIR ja existe. OK."
else
echo "Directorio: $MOUNT_DIR nao existe."
echo "Criando diretorio..."
mkdir $MOUNT_DIR
echo "Criado diretorio: $MOUNT_DIR . OK"
fi
}
#Remove volume de outra instancia.
detachVolume(){
echo "Iniciando detach Volume: (aws ec2 detach-volume --volume-id $VOLUME_ID --region $REGION --force)"
local ec2Result=$(aws ec2 detach-volume --volume-id $VOLUME_ID --region $REGION --force)
echo "$ec2Result"
}
#Adiciona volume nesta instancia com montagem em /dev/sdf.
attachVolume(){
echo "Iniciando attach Volume: (aws ec2 attach-volume --volume-id $VOLUME_ID --instance-id $INSTANCE_ID --device /dev/sdf --region $REGION)"
local ec2Result=$(aws ec2 attach-volume --volume-id $VOLUME_ID --instance-id $INSTANCE_ID --device /dev/sdf --region $REGION)
echo "$ec2Result"
}
echo "INIT - MOUNT VOLUME-ID: $VOLUME_ID IN ISNTANCE-ID: $INSTANCE_ID AND MOUNT-DIR: $MOUNT_DIR ON REGION: $REGION"
#Chama funcao para remover volume.
detachVolume || true
sleep 3
#Chama funcao para adicionar volume.
attachVolume || true
sleep 10
#Lista volumes anexado.
lsblk
#Prepara volume para trabalhar com ext4.
## Cuidado isso apaga todos os dados do volume, usar somente na primeira vez para criar o sistema de arquivos ext4.
##mkfs -t ext4 /dev/xvdf
#Chama funcao para cria diretorio para montagem.
createDirectoryMount
#Adiciona permissao para qualquer usuario poder gravar.
##chmod 777 $MOUNT_DIR
#faz backup do fstab original
cp /etc/fstab /etc/fstab.original
#Adiciona configuracao para o fstab montar na inicializacao, mesmo em caso de reboot.
echo "/dev/xvdf $MOUNT_DIR ext4 defaults,nofail 0 2" >> /etc/fstab
#Monta volumes, Opcao -a verifica e monta dos os volumes que nao foram montados ainda.
mount -a
#para o servico docker para poder trocar para o novo volume.
echo "Parando Docker --> service docker stop"
service docker stop && service docker stop && sleep 5
#Move docker diretorio docker original para backup.
echo "Movendo : mv /var/lib/docker --> /var/lib/docker-original"
mv /var/lib/docker /var/lib/docker-original
#Cria link apontando para o volume.
echo "Cria link e apontando para o volume (ln -s $MOUNT_DIR/docker /var/lib/docker)."
ln -s $MOUNT_DIR/docker /var/lib/docker
#Inicia o servico novamente usando link para o novo diretorio no volume.
echo "Iniciando Docker --> service docker start"
systemctl daemon-reload
systemctl enable docker.service
systemctl start --no-block docker.service
systemctl is-active docker
service docker start && sleep 1
docker version
echo "END - MOUNTED IN $MOUNT_DIR"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment