a42d498ede852e50cfe6f56d714e52ff2b96148c
[music.git] / distribution / cassandra / docker-entrypoint.sh
1 #!/bin/bash
2 set -e
3
4 # first arg is `-f` or `--some-option`
5 # or there are no args
6 if [ "$#" -eq 0 ] || [ "${1#-}" != "$1" ]; then
7     set -- cassandra -f "$@"
8 fi
9
10 # allow the container to be started with `--user`
11 if [ "$1" = 'cassandra' -a "$(id -u)" = '0' ]; then
12     chown -R cassandra /var/lib/cassandra /var/log/cassandra "$CASSANDRA_CONFIG"
13     exec gosu cassandra "$BASH_SOURCE" "$@"
14 fi
15
16 _ip_address() {
17     # scrape the first non-localhost IP address of the container
18     # in Swarm Mode, we often get two IPs -- the container IP, and the (shared) VIP, and the container IP should always be first
19     ip address | awk '
20         $1 == "inet" && $NF != "lo" {
21             gsub(/\/.+$/, "", $2)
22             print $2
23             exit
24         }
25     '
26 }
27
28 if [ "$1" = 'cassandra' ]; then
29     : ${CASSANDRA_RPC_ADDRESS='0.0.0.0'}
30
31     : ${CASSANDRA_LISTEN_ADDRESS='auto'}
32     if [ "$CASSANDRA_LISTEN_ADDRESS" = 'auto' ]; then
33         CASSANDRA_LISTEN_ADDRESS="$(_ip_address)"
34     fi
35
36     : ${CASSANDRA_BROADCAST_ADDRESS="$CASSANDRA_LISTEN_ADDRESS"}
37
38     if [ "$CASSANDRA_BROADCAST_ADDRESS" = 'auto' ]; then
39         CASSANDRA_BROADCAST_ADDRESS="$(_ip_address)"
40     fi
41     : ${CASSANDRA_BROADCAST_RPC_ADDRESS:=$CASSANDRA_BROADCAST_ADDRESS}
42
43     if [ -n "${CASSANDRA_NAME:+1}" ]; then
44         : ${CASSANDRA_SEEDS:="cassandra"}
45     fi
46     : ${CASSANDRA_SEEDS:="$CASSANDRA_BROADCAST_ADDRESS"}
47     
48     sed -ri 's/(- seeds:).*/\1 "'"$CASSANDRA_SEEDS"'"/' "$CASSANDRA_CONFIG/cassandra.yaml"
49
50     for yaml in \
51         broadcast_address \
52         broadcast_rpc_address \
53         cluster_name \
54         endpoint_snitch \
55         listen_address \
56         num_tokens \
57         rpc_address \
58         start_rpc \
59     ; do
60         var="CASSANDRA_${yaml^^}"
61         val="${!var}"
62         if [ "$val" ]; then
63             sed -ri 's/^(# )?('"$yaml"':).*/\2 '"$val"'/' "$CASSANDRA_CONFIG/cassandra.yaml"
64         fi
65     done
66
67     for rackdc in dc rack; do
68         var="CASSANDRA_${rackdc^^}"
69         val="${!var}"
70         if [ "$val" ]; then
71             sed -ri 's/^('"$rackdc"'=).*/\1 '"$val"'/' "$CASSANDRA_CONFIG/cassandra-rackdc.properties"
72         fi
73     done
74 fi
75
76 echo "#############################################"
77 echo "############## Update music.cql #############"
78 echo "#############################################"
79
80 for f in /docker-entrypoint-initdb.d/a_music.cql; do
81     if [ "${MUSIC_REPLICATION_CLASS}" ]; then
82         sed -ri 's/REPLICATION_CLASS/'${MUSIC_REPLICATION_CLASS}'/' "$f"
83     fi
84     if [ "${MUSIC_REPLICATION_FACTOR}" ]; then
85         sed -ri 's/REPLICATION_FACTOR/'${MUSIC_REPLICATION_FACTOR}'/' "$f"
86     fi
87 done
88
89 echo "#############################################"
90 echo "######Updating username and password  #######"
91 echo "#############################################"
92 for f in /docker-entrypoint-initdb.d/b_pw.cql; do
93     if [ "${CASSUSER}" ]; then
94         sed -ri 's/CASSUSER/'${CASSUSER}'/' "$f"
95     fi
96     if [ "${CASSPASS}" ]; then
97         sed -ri 's/CASSPASS/'${CASSPASS}'/' "$f"
98     fi
99 done
100
101 echo "#############################################"
102 echo "############## Let run cql's ################"
103 echo "#############################################"
104 for f in /docker-entrypoint-initdb.d/*; do
105     case "$f" in
106         *zzz*.cql)
107             echo "$0: running $f" && until $AM && cqlsh -u ${CASSUSER} -p ${CASSPASS} -f "$f"; 
108             do >&2 echo "Cassandra is unavailable - sleeping [${f}] $C";let C=C+1; sleep 5; done & ;;
109         *a_music.cql)
110             echo "$0: running $f" && until $PW && cqlsh -u ${CASSUSER} -p ${CASSPASS} -f "$f" && AM=true; 
111             do >&2 echo "Cassandra is unavailable - sleeping [${f}] $D";let D=D+1; sleep 5; done & ;;
112         *b_pw.cql)
113             echo "$0: running $f" && until cqlsh -u cassandra -p cassandra -f "$f" && PW=true;
114             do >&2 echo "Cassandra is unavailable - sleeping [${f}] $E";let E=E+1; sleep 5; done & ;;
115         *)        echo "$0: ignoring $f" ;;
116     esac
117
118     echo
119 done
120
121
122 echo "#############################################"
123 echo "########### Running Password CQL ############"
124 echo "#############################################"
125
126 #echo "$0: running $f" && 
127 #until cqlsh -u cassandra -p cassandra -f /pw.cql; 
128 #do >&2 echo "Cassandra is unavailable - sleeping"; sleep 10; done
129
130 echo "#############################################"
131 echo "########### Cassandra Running ###############"
132 echo "#############################################"
133
134
135 exec "$@"