Preface
This guide describe how to take a scheduled weekly volumes snapshots from all or some volumes on STC Jeddah cloud and retaining only N weeks. The following steps was tested on ubuntu 16.04 server that has openstack clients installed.
ssh to the server
Install Openstack clients
sudo apt-get update && sudo apt-get install python-dev python-pip -y
sudo pip install python-openstackclient
mkdir /home/ubuntu/volumes-snapshots
cd /home/ubuntu/volumes-snapshots
Createopenrc.sh
file using your favorite editor
nano openrc.sh
Copy the following text to the file and change username, password and project name to yours, then save and exit
export OS_USERNAME='username'
export OS_PASSWORD='password'
export OS_TENANT_NAME='project name'
export OS_AUTH_URL=https://api-jed1-vdc.bluvalt.com/identity/v3
export OS_IDENTITY_API_VERSION=3
export OS_USER_DOMAIN_NAME=jed1
export OS_PROJECT_DOMAIN_NAME=jed1
export OS_VOLUME_API_VERSION=2
List all volumes IDs on the project and save it to volumes-IDs file.
source openrc.sh
openstack volume list |awk -F '|' '{print $2}'|grep -v ID|grep -v -e '^$'>/home/ubuntu/volumes-snapshots/volumes-IDs
You can exclude any volumes from this list by removing its ID from volumes-IDs file.
Create a file named snapshots-creation. sh
nano snapshots-creation.sh
Insert the following script to the file then save and exit**
#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export OS_USERNAME='username'
export OS_PASSWORD='password'
export OS_TENANT_NAME='project name'
export OS_AUTH_URL=https://api-jed1-vdc.bluvalt.com/identity/v3
export OS_IDENTITY_API_VERSION=3
export OS_USER_DOMAIN_NAME=jed1
export OS_PROJECT_DOMAIN_NAME=jed1
export OS_VOLUME_API_VERSION=2
for i in $(cat /home/ubuntu/volumes-snapshots/volumes-IDs); do openstack volume snapshot create --force --volume $i `date +%F`-$i-snapshot |grep -m1 id|awk -F '|' '{print $3}'|grep -v -e '^$'; sleep 20s; done >>/home/ubuntu/volumes-snapshots/`date +%F`-snapshots
Create old snapshots cleaning script that will remove any older than N weeks snapshots which was created by first script (snapshots-creation .sh), change username, password and project name to yours, then save it as old-snapshots-cleaning .sh file
.
nano old-snapshots-cleaning.sh
#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export OS_USERNAME='username'
export OS_PASSWORD='password'
export OS_TENANT_NAME='project name'
export OS_AUTH_URL=https://api-jed1-vdc.bluvalt.com/identity/v3
export OS_IDENTITY_API_VERSION=3
export OS_USER_DOMAIN_NAME=jed1
export OS_PROJECT_DOMAIN_NAME=jed1
export OS_VOLUME_API_VERSION=2
for i in $(cat /home/ubuntu/volumes-snapshots/$(date -d 'now -N weeks' +%F)-snapshots); do openstack volume snapshot delete $i; sleep 10s; done
Note
Replace N in ‘now -N weeks’ in last command with number of weekss you need to retain the created snapshots.THIS SCRIPT ONLY WORKS WITH WEEKLY SNAPSHOTS.
Cronjob
Add a crontab job to execute the scripts at your convenient time Please don’t forget to calculate the needed quota and request to increase storage quota if needed.
chmod a+x /home/ubuntu/volumes-snapshots/snapshots-creation.sh
chmod a+x /home/ubuntu/volumes-snapshots/old-snapshots-cleaning.sh
sudo crontab -e
30 01 * * 5 /home/ubuntu/volumes-snapshots/snapshots-creation.sh
30 18 * * 5 /home/ubuntu/volumes-snapshots/old-snapshots-cleaning.sh