Merge "Don't install openvswitch-datapath-dkms on newer kernels"
diff --git a/files/apts/keystone b/files/apts/keystone
index 57fde80..b7218b7 100644
--- a/files/apts/keystone
+++ b/files/apts/keystone
@@ -11,3 +11,4 @@
python-routes
libldap2-dev
libsasl2-dev
+libkrb5-dev
diff --git a/functions-common b/functions-common
index 613a86c..0bf354f 100644
--- a/functions-common
+++ b/functions-common
@@ -1058,44 +1058,100 @@
echo $!
}
+function _start_in_screen {
+ local service=$1
+ local cmd=$2
+ local screen_name=${SCREEN_NAME:-stack}
+ local status_dir=${SERVICE_DIR:-${DEST}/status}
+ local service_dir="$status_dir/$screen_name"
+ local pid="$service_dir/$service.pid"
+ local failure="$service_dir/$service.failure"
+
+ if [[ -n ${SCREEN_LOGDIR} ]]; then
+ local logfile=${SCREEN_LOGDIR}/screen-${service}.${CURRENT_LOG_TIME}.log
+ local shortlog=${SCREEN_LOGDIR}/screen-${service}.log
+ # this whole dance is done because of slow nodes
+ screen -S $screen_name -p $service -X logfile ${logfile}
+ screen -S $screen_name -p $service -X log on
+ ln -sf ${logfile} ${shortlog}
+ fi
+
+ NL=`echo -ne '\015'`
+ # This fun command does the following:
+ # - the passed server command is backgrounded
+ # - the pid of the background process is saved in the usual place
+ # - the server process is brought back to the foreground
+ # - if the server process exits prematurely the fg command errors
+ # and a message is written to stdout and the service failure file
+ # The pid saved can be used in screen_stop() as a process group
+ # id to kill off all child processes
+ echo "Running: $cmd & echo \$! >$pid; fg || echo \"$service failed to start\" | tee \"$failure\"$NL"
+ screen -S $screen_name -p $service -X stuff "$cmd & echo \$! >$pid; fg || echo \"$service failed to start\" | tee \"$failure\"$NL"
+}
+
+
+function _is_running_in_screen {
+ local service=$1
+ local screen_name=${SCREEN_NAME:-stack}
+ local status_dir=${SERVICE_DIR:-${DEST}/status}
+ local service_dir="$status_dir/$screen_name"
+ local pid="$service_dir/$service.pid"
+ local failure="$service_dir/$service.failure"
+ if [[ ! -e "$pid" && ! -e "$failure" ]]; then
+ # if we don't have a pid or a failure for why, the command may not
+ # have stuffed in there
+ echo "Warning: neither $pid nor $failure exist, $service didn't seem to start"
+ return 1
+ fi
+ if [[ -n ${SCREEN_LOGDIR} ]]; then
+ # if we should be logging, but we don't have a log file, something is wrong
+ local logfile=${SCREEN_LOGDIR}/screen-${service}.${CURRENT_LOG_TIME}.log
+ if [[ ! -e "$logfile" ]]; then
+ echo "Warning: expected logfile $logfile not found, something wrong with starting $service"
+ return 1
+ fi
+ fi
+ return 0
+}
+
# Helper to launch a service in a named screen
# screen_it service "command-line"
function screen_it {
- SCREEN_NAME=${SCREEN_NAME:-stack}
- SERVICE_DIR=${SERVICE_DIR:-${DEST}/status}
- USE_SCREEN=$(trueorfalse True $USE_SCREEN)
+ local service=$1
+ local cmd=$2
+ local screen_name=${SCREEN_NAME:-stack}
+ local status_dir=${SERVICE_DIR:-${DEST}/status}
+ local service_dir="$status_dir/$screen_name"
+ local use_screen=$(trueorfalse True $USE_SCREEN)
+ local pid="$service_dir/$service.pid"
if is_service_enabled $1; then
# Append the service to the screen rc file
- screen_rc "$1" "$2"
+ screen_rc "$service" "$cmd"
- if [[ "$USE_SCREEN" = "True" ]]; then
- screen -S $SCREEN_NAME -X screen -t $1
+ if [[ "$use_screen" = "True" ]]; then
+ screen -S $screen_name -X screen -t $service
- if [[ -n ${SCREEN_LOGDIR} ]]; then
- screen -S $SCREEN_NAME -p $1 -X logfile ${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log
- screen -S $SCREEN_NAME -p $1 -X log on
- ln -sf ${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log ${SCREEN_LOGDIR}/screen-${1}.log
- fi
-
- # sleep to allow bash to be ready to be send the command - we are
- # creating a new window in screen and then sends characters, so if
- # bash isn't running by the time we send the command, nothing happens
- sleep 3
-
- NL=`echo -ne '\015'`
- # This fun command does the following:
- # - the passed server command is backgrounded
- # - the pid of the background process is saved in the usual place
- # - the server process is brought back to the foreground
- # - if the server process exits prematurely the fg command errors
- # and a message is written to stdout and the service failure file
- # The pid saved can be used in screen_stop() as a process group
- # id to kill off all child processes
- screen -S $SCREEN_NAME -p $1 -X stuff "$2 & echo \$! >$SERVICE_DIR/$SCREEN_NAME/$1.pid; fg || echo \"$1 failed to start\" | tee \"$SERVICE_DIR/$SCREEN_NAME/$1.failure\"$NL"
+ # this retry loop brought to you by slow compute nodes, screen raciness,
+ # and frustration in upgrading.
+ local screen_tries=0
+ while [ "$screen_tries" -lt 10 ]; do
+ _start_in_screen "$service" "$cmd"
+ if _is_running_in_screen $service; then
+ screen_tries=10
+ else
+ screen_tries=$[screen_tries + 1]
+ echo "Failed to start service after $screen_tries attempt(s), retrying"
+ if [[ "$screen_tries" -eq 10 ]]; then
+ echo "Too many retries, giving up"
+ exit 1
+ fi
+ sleep 1
+ fi
+ done
else
# Spawn directly without screen
- run_process "$1" "$2" >$SERVICE_DIR/$SCREEN_NAME/$1.pid
+ run_process "$service" "$cmd" >$pid
fi
fi
}
diff --git a/lib/keystone b/lib/keystone
index 69fba0f..41ed4c1 100644
--- a/lib/keystone
+++ b/lib/keystone
@@ -479,7 +479,10 @@
fi
echo "Waiting for keystone to start..."
- if ! timeout $SERVICE_TIMEOUT sh -c "while ! curl --noproxy '*' -k -s $KEYSTONE_AUTH_PROTOCOL://$SERVICE_HOST:$service_port/v$IDENTITY_API_VERSION/ >/dev/null; do sleep 1; done"; then
+ # Check that the keystone service is running. Even if the tls tunnel
+ # should be enabled, make sure the internal port is checked using
+ # unencryted traffic at this point.
+ if ! timeout $SERVICE_TIMEOUT sh -c "while ! curl --noproxy '*' -k -s http://$KEYSTONE_SERVICE_HOST:$service_port/v$IDENTITY_API_VERSION/ >/dev/null; do sleep 1; done"; then
die $LINENO "keystone did not start"
fi
diff --git a/stackrc b/stackrc
index a517fbb..840f3ac 100644
--- a/stackrc
+++ b/stackrc
@@ -366,7 +366,7 @@
PRECACHE_IMAGES=$(trueorfalse False $PRECACHE_IMAGES)
if [[ "$PRECACHE_IMAGES" == "True" ]]; then
# staging in update for nodepool
- IMAGE_URLS+=",https://dl.fedoraproject.org/pub/fedora/linux/updates/20/Images/x86_64/Fedora-x86_64-20-20140407-sda.qcow2"
+ IMAGE_URLS+=",http://dl.fedoraproject.org/pub/alt/openstack/20/x86_64/Fedora-x86_64-20-20140618-sda.qcow2"
fi
# 10Gb default volume backing file size