X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=cmframework%2Fscripts%2Fstart-cmserver-db.sh;fp=cmframework%2Fscripts%2Fstart-cmserver-db.sh;h=ef80c81a615ebc05d648d68b8acfe231b7bbba13;hb=c389bdee7b3845b55f443dbf04c0ce4083a55886;hp=0000000000000000000000000000000000000000;hpb=5030f0c004701dd422c78c71c014ef60f48139fc;p=ta%2Fconfig-manager.git diff --git a/cmframework/scripts/start-cmserver-db.sh b/cmframework/scripts/start-cmserver-db.sh new file mode 100755 index 0000000..ef80c81 --- /dev/null +++ b/cmframework/scripts/start-cmserver-db.sh @@ -0,0 +1,202 @@ +#! /bin/bash + +# Copyright 2019 Nokia + +# 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. + +DB_PORT=6379 +DB_IP=127.0.0.1 +LOG_BASE_DIR=/srv/deployment/log +DB_LOG=${LOG_BASE_DIR}/redis.log + +CM_PORT=61100 +CM_IP=127.0.0.1 +CM_VALIDATORS=/opt/cmframework/validators +CM_ACTIVATORS=/opt/cmframework/activators +CM_LOG=${LOG_BASE_DIR}/cm.log +USER_CONFIG_HANDLERS=/opt/cmframework/userconfighandlers +INVENTORY_HANDLERS=/opt/cmframework/inventoryhandlers +INVENTORY_DATA=/opt/cmframework/inventory.data + + +BOOTSTRAP_LOG=${LOG_BASE_DIR}/bootstrap.log + +DB_STARTUP_CMD="/bin/redis-server ./redis.conf" +DB_CHECK_CMD="/bin/redis-cli -h $DB_IP --scan --pattern '*'" +CMCLI="/usr/local/bin/cmcli --ip $CM_IP --port $CM_PORT --client-lib cmframework.lib.cmclientimpl.CMClientImpl" +USERCONFIG= + +export CONFIG_PHASE="bootstrapping" + +DB_PID= +CM_PID= + +function log() +{ + priority=$1 + + echo "$(date) ($priority) ${FUNCNAME[2]} ${@:2}" + echo "$(date) ($priority) ${FUNCNAME[2]} ${@:2}" >> $BOOTSTRAP_LOG +} + +function log_info() +{ + log info $@ +} + +function log_error() +{ + log error $@ +} + + +function run_cmd() +{ + log_info "Running $@" + result=$(eval $@ 2>&1) + ret=$? + if [ $ret -ne 0 ]; then + log_error "Failed with error $result" + else + log_info "Command succeeded: $result" + fi + + return $ret +} + +function stop_process() +{ + pid=$1 + log_info "Stopping process $pid" + if ! [ -z $pid ]; then + if [ -d /proc/$pid ]; then + log_info "Shutting down process $pid gracefully" + run_cmd "pkill -TERM -g $pid" + log_info "Waiting for process $pid to exit" + for ((i=0; i<10; i++)); do + if ! [ -d /proc/$pid ]; then + log_info "Process $pid exited" + break + fi + log_info "Process $pid is still running" + sleep 2 + done + + if [ -d /proc/$pid ]; then + log_error "Process $pid is still running, forcefully shutting it down" + run_cmd "pkill -KILL -g $pid" + fi + fi + fi +} + +function cleanup() +{ + log_info "Cleaning up" + #stop_process $DB_PID + systemctl stop redis + stop_process $CM_PID +} + +function start_db() +{ + log_info "Starting redis db using $DB_STARTUP_CMD" + #setsid $DB_STARTUP_CMD & + #export DB_PID=$! + #log_info "DB pid is $DB_PID" + #if ! [ -d /proc/$DB_PID ]; then + # log_error "DB is not running!" + # log_info "Check /var/log/redis.log and $BOOTSTRAP_LOG for details" + # return 1 + #fi + systemctl start redis + log_info "Wait till DB is serving" + dbok=0 + for ((i=0; i<10; i++)); do + run_cmd "$DB_CHECK_CMD" + dbok=$? + if [ $dbok -eq 0 ]; then + break + fi + log_info "DB still not running" + sleep 2 + done + + return $dbok +} + +function start_cm() +{ + log_info "Starting CM server" + setsid /usr/local/bin/cmserver --ip $CM_IP --port $CM_PORT --backend-api cmframework.redisbackend.cmredisdb.CMRedisDB --backend-uri redis://:@$DB_IP:$DB_PORT --activationstate-handler-api cmframework.utils.cmstatedummyhandler.CMStateDummyHandler --activationstate-handler-uri dummy_uri --snapshot-handler-api cmframework.utils.cmstatedummyhandler.CMStateDummyHandler --alarmhandler-api cmframework.lib.cmalarmhandler_dummy.AlarmHandler_Dummy --snapshot-handler-uri dummy_uri --inventory-handlers $INVENTORY_HANDLERS --inventory-data $INVENTORY_DATA --validators $CM_VALIDATORS --activators $CM_ACTIVATORS --disable-remote-activation --log-dest console --log-level debug --verbose 2> $CM_LOG 1>&2 & + export CM_PID=$! + log_info "cmserver pid is $CM_PID" + if ! [ -d /proc/$CM_PID ]; then + log_error "CM server is not running!" + log_info "Check redis.log and $BOOTSTRATP_LOG for details" + return 1 + fi + return 0 +} + +function handle_user_config() +{ + log_info "Handling user configuration from file $USER_CONFIG" + run_cmd "$CMCLI bootstrap --config $USER_CONFIG --plugin_path $USER_CONFIG_HANDLERS" + return $? +} + +function main() +{ + # start the database + start_db + if [ $? -ne 0 ]; then + cleanup + return 1 + fi + + # start the configuration management server + start_cm + if [ $? -ne 0 ]; then + cleanup + return 1 + fi + + echo "============" + jobs -p + + echo "Use CLI $CMCLI" + + while [ 1 ]; do + read -n1 -r -p "Press space to exit..." key + + if [ "$key" = '' ]; then + echo "exiting..." + break + fi + done + + cleanup + return 0 +} + +if [ $# -ne 1 ]; then + echo "Usage:$0 " + exit 1 +fi + +CM_IP=$1 +CMCLI="/usr/local/bin/cmcli --ip $CM_IP --port $CM_PORT --client-lib cmframework.lib.cmclientimpl.CMClientImpl" +mkdir -p ${LOG_BASE_DIR} + +main