X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=auth%2Fauth-cass%2Fcass_init%2Fcmd.sh;h=7569440f04249b1e699b2948b00e4895540744fc;hb=083a7eb21620467ae1f7d5ba9341e12f75f9cc41;hp=056faed7b50c4d87f509224855ea9e6b49ab0665;hpb=bc299c00e5a86732c5a063a1d7c7bccf1d4ab21b;p=aaf%2Fauthz.git diff --git a/auth/auth-cass/cass_init/cmd.sh b/auth/auth-cass/cass_init/cmd.sh index 056faed7..7569440f 100644 --- a/auth/auth-cass/cass_init/cmd.sh +++ b/auth/auth-cass/cass_init/cmd.sh @@ -1,89 +1,173 @@ #!/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 + 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 [ "$(/usr/bin/cqlsh -e 'describe keyspaces' | grep authz)" = "" ]; then - 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 - break - fi - done - echo "Initializing Cassandra DB" - if [ "`/usr/bin/cqlsh -e 'describe keyspaces' | grep authz`" == "" ]; then - echo "Docker Installed Basic Cassandra on aaf_cass. Executing the following " + 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" - /usr/bin/cqlsh -f keyspace.cql + cqlsh --request-timeout=100 -f keyspace.cql + status keyspace installed echo " cqlsh -f init.cql" - /usr/bin/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" - fi + 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 + echo "YES" | bash restore.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" - /usr/local/bin/docker-entrypoint.sh + exec -c "/usr/local/bin/docker-entrypoint.sh" ;; - onap) - install_cql + wait) + # Wait for initialization. This can be called from Docker only as a check to make sure it is ready + wait_ready - # Change date expiring dat files to more recent - ID_FILE=/opt/app/aaf/cass_init/sample.identities.dat - if [ -e $ID_FILE ]; then - DATE=$(date "+%Y-%m-%d %H:%M:%S.000+0000" -d "+6 months") - echo $DATE - CRED="/opt/app/aaf/cass_init/dats/cred.dat" - # Enter for People - echo "Default Passwords for Apps" - for ID in $(grep '|a|' $ID_FILE | sed -e "s/|.*//"); do - if [ "$ID" = "aaf" ]; then - DOMAIN="aaf.osaaf.org"; - else - DOMAIN="$ID.onap.org"; - fi - unset FIRST - for D in ${DOMAIN//./ }; do - if [ -z "$FIRST" ]; then - NS="$D" - FIRST="N" - else - NS="$D.$NS" - fi - done - echo "$ID@$DOMAIN|2|${DATE}|0xd993c5617486296f1b99d04de31633332b8ba1a550038e23860f9dbf0b2fcf95|Initial ID|$NS|53344|" >> $CRED - done - - # Enter for People - for ID in $(grep '|e|' $ID_FILE | sed -e "s/|.*//"); do - echo "$ID@people.osaaf.org|2|${DATE}|0xd993c5617486296f1b99d04de31633332b8ba1a550038e23860f9dbf0b2fcf95|Initial ID|org.osaaf.people|53344|" >> $CRED - done - - # Change UserRole - mv dats/user_role.dat tmp - sed "s/\(^.*|\)\(.*|\)\(.*|\)\(.*\)/\1${DATE}|\3\4/" tmp > dats/user_role.dat + ;; + onap) + cd /opt/app/aaf/cass_init + # start install_onap (which calls install_cql first) in background, waiting for process to start + install_onap & - # Remove ID File, which is marker for initializing Creds - rm $ID_FILE - fi - bash push.sh + # 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