#!/bin/sh # Copyright (c) 2013-2018 Wind River Systems, Inc. # # SPDX-License-Identifier: Apache-2.0 # ### BEGIN INIT INFO # Provides: OpenStack Keystone-wsgi # Required-Start: networking # Required-Stop: networking # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: OpenStack Keystone # Description: Openstack Identitiy service running on WSGI compatable gunicorn web server # ### END INIT INFO RETVAL=0 #public 5000 DESC_PUBLIC="openstack-keystone" PIDFILE_PUBLIC="/var/run/$DESC_PUBLIC.pid" PYTHON=`which python` source /etc/keystone/keystone-extra.conf source /etc/platform/platform.conf if [ -n ${@:2:1} ] ; then if [ ${@:2:1}="--public-bind-addr" ] ; then PUBLIC_BIND_ADDR_CMD=${@:3:1} fi fi ### EXEC="/usr/bin/gunicorn" WORKER="eventlet" # Increased timeout to facilitate large image uploads TIMEOUT="200" # Calculate the no of workers based on the number of workers retrieved by # Platform Eng which is retreived from the keystone-extra.conf if [ "$system_type" == "All-in-one" ]; then TIS_WORKERS_FACTOR=1 else TIS_WORKERS_FACTOR=1.5 fi TIS_WORKERS=$(echo "${TIS_WORKERS_FACTOR}*${TIS_PUBLIC_WORKERS}"|bc ) TIS_WORKERS=${TIS_WORKERS%.*} #--max-requests , --max-requests-jitter Configuration #--max-requests = The max number of requests a worker will process before restarting #--max-requests-jitter = The maximum jitter to add to the max_requests setting. MAX_REQUESTS=100000 MAX_REQ_JITTER_CAP_FACTOR=0.5 MAX_REQ_JITTER_PUBLIC=$(echo "${TIS_WORKERS}*${MAX_REQ_JITTER_CAP_FACTOR}+1"|bc) MAX_REQ_JITTER_PUBLIC=${MAX_REQ_JITTER_PUBLIC%.*} start() { # Got proper no of workers . Starting gunicorn now echo -e "Initialising keystone service using gunicorn .. \n" if [ -z "$PUBLIC_BIND_ADDR" ]; then echo "Keystone floating ip not found . Cannot start services. Exiting .." exit 1 fi BIND_PUBLIC=$PUBLIC_BIND_ADDR:5000 if [ -e $PIDFILE_PUBLIC ]; then PIDDIR=/proc/$(cat $PIDFILE_PUBLIC) if [ -d ${PIDDIR} ]; then echo "$DESC_PUBLIC already running." exit 1 else echo "Removing stale PID file $PIDFILE_PUBLIC" rm -f $PIDFILE_PUBLIC fi fi echo -e "Starting $DESC_PUBLIC...\n"; echo -e "Worker is ${WORKER} --workers ${TIS_WORKERS} --timeout ${TIMEOUT} --max_requests ${MAX_REQUESTS} --max_request_jitter public ${MAX_REQ_JITTER_PUBLIC}\n" ; echo -e "Starting keystone process at port 5000 \n" ; start-stop-daemon --start --quiet --background --pidfile ${PIDFILE_PUBLIC} \ --make-pidfile --exec ${PYTHON} -- ${EXEC} --bind ${BIND_PUBLIC} \ --worker-class ${WORKER} --workers ${TIS_WORKERS} --timeout ${TIMEOUT} \ --max-requests ${MAX_REQUESTS} --max-requests-jitter ${MAX_REQ_JITTER_PUBLIC} \ --log-syslog \ --pythonpath '/usr/share/keystone' public:application --name keystone-public RETVAL=$? if [ $RETVAL -eq 0 ]; then echo -e "Keystone started at port 5000... \n" else echo -e "Failed to start Keystone .. \n" fi } stop() { if [ -e $PIDFILE_PUBLIC ]; then start-stop-daemon --stop --quiet --pidfile $PIDFILE_PUBLIC RETVAL_PUBLIC=$? if [ $RETVAL_PUBLIC -eq 0 ]; then echo "Stopped $DESC_PUBLIC." else echo "Stopping failed - $PIDFILE_PUBLIC" fi rm -f $PIDFILE_PUBLIC else echo "Already stopped - $PIDFILE_PUBLIC" fi } status() { pid_public=`cat $PIDFILE_PUBLIC 2>/dev/null` if [ -n "$pid_public" ]; then echo -e "\033[32m $DESC_PUBLIC is running..\033[0m" else echo -e "\033[31m $DESC_PUBLIC is not running..\033[0m" fi } case "$1" in start) start ;; stop) stop ;; restart|force-reload|reload) stop start ;; status) status ;; *) #echo "Usage: $0 {start|stop|force-reload|restart|reload|status} OR {/usr/bin/keystone-all start --public-bind-addr xxx.xxx.xxx}" start #RETVAL=1 ;; esac exit $RETVAL