summaryrefslogtreecommitdiffstats
path: root/auth/auth-cass/cass_init/cmd.sh
blob: bfd592a368c4d682ad20beab408a61f24bbd091f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#!/bin/bash 
#########
#  ============LICENSE_START====================================================
#  org.onap.aaf
#  ===========================================================================
#  Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
#  ===========================================================================
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#  ============LICENSE_END====================================================
#
#
# Engage normal Cass Init, then check for data installation
#
DIR="/opt/app/aaf/status"
INSTALLED_VERSION=/var/lib/cassandra/AAF_VERSION
AAF_INIT_DATA=/var/lib/cassandra/AAF_INIT_DATA
CQLSH=${CQLSH:=/usr/bin/cqlsh}

if [ ! -e /aaf_cmd ]; then
  ln -s /opt/app/aaf/cass_init/cmd.sh /aaf_cmd
  chmod u+x /aaf_cmd
fi

# Always need startup status...
if [ ! -e "$DIR" ]; then
  mkdir -p "$DIR"
  chmod 777 $DIR
fi

function status {
     echo "$@"
     echo "$@" > $DIR/aaf-cass
}

function wait_start {
    sleep 10
    status wait for cassandra to start
    for CNT in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
      if [ -z "$(grep 'listening for CQL clients' /var/log/cassandra/system.log)" ]; then
        echo "Waiting for Cassandra to start... Sleep 10"
        sleep 10
      else
         status cassandra started
         break
      fi
    done
    # Logs state Cassandra is up.  Now use cqlsh to ensure responsive
    echo "Cassandra started, wait until it is responsive"
    for CNT in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
      if  [ -z "$(cqlsh -e 'describe keyspaces')" ]; then
        echo "Waiting for Cassandra to be responsive... Sleep 10"
        sleep 10
      else
        echo "Cassandra responded"
        status cassandra responsive
	break
      fi
    done 
}


function wait_cql {
   status wait for keyspace to be initialized
   for CNT in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
     if [ -n "$($CQLSH -e 'describe keyspaces' | grep authz)"  ]; then
	break
     else
        echo "Waiting for Keyspaces to be loaded... Sleep 10"
        sleep 10
      fi
    done
}

function wait_ready {
   status wait for cassandra to be fully ready
   for CNT in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
       STATUS="$(cat $DIR/aaf-cass)"
       if [ "$STATUS" = "ready" ]; then
	break
     else
        echo "Waiting for Start, $STATUS... Sleep 10"
        sleep 10
      fi
    done
}

function install_cql {
    wait_start cassandra responsive   
    # Now, make sure data exists
    if [ ! -e $INSTALLED_VERSION ] && [ -n "$($CQLSH -e 'describe keyspaces' | grep authz)" ]; then
      $CQLSH --request-timeout=60 -e 'DROP KEYSPACE authz'
    fi

    if [ -z "$($CQLSH --request-timeout 60 -e 'describe keyspaces' | grep authz)" ]; then
        status install 
        echo "Initializing Cassandra DB" 
        echo "Docker Installed Basic Cassandra on aaf.cass.  Executing the following "
        echo "NOTE: This creator provided is only a Single Instance. For more complex Cassandra, create independently"
        echo ""
        echo " cd /opt/app/aaf/cass_init"
        cd /opt/app/aaf/cass_init
        echo " cqlsh -f keyspace.cql"
        $CQLSH --request-timeout=100 -f keyspace.cql
	status keyspace installed
        echo " cqlsh -f init.cql"
        $CQLSH --request-timeout=100 -f init.cql
	status data initialized
        echo ""
        echo "The following will give you a temporary identity with which to start working, or emergency"
        echo " cqlsh -f temp_identity.cql"
        echo "frankfurt" > $INSTALLED_VERSION
    else 
      echo "Cassandra DB already includes 'authz' keyspace"
    fi
    status $1
}

function install_onap {
    echo " cd /opt/app/aaf/cass_init"
    install_cql initialized
    if [ -e "$AAF_INIT_DATA" ]; then 
       echo "AAF Data already initialized on this Cassandra"
    else 
      status prep data for bootstrapping
      cd /opt/app/aaf/cass_init
      status prep data 
      bash prep.sh
      status push data to cassandra
      # bash push.sh
      bash push.sh
      cd -
      echo $(date) > $AAF_INIT_DATA
    fi
    status ready
}

case "$1" in
  start)
    # start install_cql in background, waiting for process to start
    install_cql ready &

    # Startup like normal
    echo "Cassandra Startup"
    exec -c "/usr/local/bin/docker-entrypoint.sh"
  ;;
  wait)
    # Wait for initialization.  This can be called from Docker only as a check to make sure it is ready
    wait_ready 

  ;;
  onap)
    cd /opt/app/aaf/cass_init
    # start install_onap (which calls install_cql first) in background, waiting for process to start
    install_onap &

    # Startup like normal
    echo "Cassandra Startup"
    if ! cat /etc/cassandra/cassandra.yaml | grep "write_request_timeout_in_ms: 20000"; then
      sed -i 's/write_request_timeout_in_ms: 2000/write_request_timeout_in_ms: 20000/' /etc/cassandra/cassandra.yaml
    fi
    exec /usr/local/bin/docker-entrypoint.sh 
  ;;
esac