Skip to content

Instantly share code, notes, and snippets.

@mrusme
Created September 6, 2016 20:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrusme/b354c6f0a66363747002db85b8da6bf9 to your computer and use it in GitHub Desktop.
Save mrusme/b354c6f0a66363747002db85b8da6bf9 to your computer and use it in GitHub Desktop.
Stupidly simple db migration script for CQL
#!/bin/bash
usage() { echo "Usage: $0 [-d <up|down>] [-f <directory>] [-v <cql version>] [-h <host>] [-p <port>] (-s <startpoint>)" 1>&2; exit 1; }
while getopts ":d:f:v:h:p:s:" opt; do
case $opt in
d)
MIGRATE_DIRECTION=$OPTARG
;;
f)
MIGRATE_FILESDIR=$OPTARG
;;
v)
MIGRATE_CQLVERSION=$OPTARG
;;
h)
MIGRATE_HOST=$OPTARG
;;
p)
MIGRATE_PORT=$OPTARG
;;
s)
MIGRATE_STARTPOINT=$OPTARG
;;
\?)
echo "Invalid option: -$OPTARG" >&2
echo ""
usage
;;
:)
echo "Option -$OPTARG requires an argument." >&2
echo ""
usage
;;
*)
usage
;;
esac
done
shift $((OPTIND-1))
if [ -z $MIGRATE_DIRECTION ] \
|| [ -z $MIGRATE_FILESDIR ] \
|| [ -z $MIGRATE_CQLVERSION ] \
|| [ -z $MIGRATE_HOST ] \
|| [ -z $MIGRATE_PORT ]; then
usage
fi
if [ $MIGRATE_DIRECTION == "down" ]
then
MIGRATE_SORT="sort -r"
else
MIGRATE_SORT="sort"
fi
MIGRATE_POINTFOUND=0
ls -1 $MIGRATE_FILESDIR/*.$MIGRATE_DIRECTION.cql | xargs basename | eval $MIGRATE_SORT | while read migrationfile
do
if [ $MIGRATE_STARTPOINT ]
then
CURRENT_POINT=$(echo $migrationfile | egrep -o ^[0-9]{10})
if [ $MIGRATE_DIRECTION == "down" ] && [ $MIGRATE_POINTFOUND == 1 ]
then
echo "Not running $migrationfile."
continue
fi
if [ $CURRENT_POINT == $MIGRATE_STARTPOINT ]
then
MIGRATE_POINTFOUND=1
fi
if [ $MIGRATE_DIRECTION == "up" ] && [ $MIGRATE_POINTFOUND == 0 ]
then
echo "Not running $migrationfile."
continue
fi
fi
echo -n "Running $migrationfile ..."
cqlsh --cqlversion=$MIGRATE_CQLVERSION -f $MIGRATE_FILESDIR/$migrationfile $MIGRATE_HOST $MIGRATE_PORT
if [ $? -eq 0 ]; then
echo " OK"
else
echo " FAIL"
exit 1
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment