Copyright 2015 Hewlett-Packard Development Company, L.P.

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

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.

functions - Grenade-specific functions

The following variables are assumed to be defined by certain functions:

# DIVIDER #!/bin/bash # DIVIDER _XTRACE_GRENADE_FUNCTIONS=$(set +o | grep xtrace) set +o xtrace # DIVIDER GRENADE_DIR=$(cd $(dirname "${BASH_SOURCE:-$0}") && pwd) source ${TARGET_DEVSTACK_DIR}/functions source ${TARGET_DEVSTACK_DIR}/lib/stack source ${GRENADE_DIR}/inc/upgrade source ${GRENADE_DIR}/inc/plugin # DIVIDER function source_quiet { XTRACE=$(set +o | grep xtrace) set +o xtrace source $@ $XTRACE } # DIVIDER function ping_check_public { local ip=$1 local boot_timeout=$2 local expected=${3:-"True"} local check_command="" if [[ "$expected" = "True" ]]; then check_command="while ! ping -c1 -w1 $ip; do sleep 1; done" else check_command="while ping -c1 -w1 $ip; do sleep 1; done" fi if ! timeout $boot_timeout sh -c "$check_command"; then if [[ "$expected" = "True" ]]; then die $LINENO "[Fail] Couldn't ping server" else die $LINENO "[Fail] Could ping server" fi fi } # DIVIDER function save_data { local release=$1 local dir=$2 echo_summary "Dumping $release databases" mkdir -p $SAVE_DIR local db_type=$( set +o xtrace && source $dir/stackrc && echo $DATABASE_TYPE) if [[ "${db_type}" == "mysql" ]]; then save_mysql_dbs $release $dir else echo_summary "TODO: save state for $db_type databases" fi } function worlddump { local name=$1 if [[ -n "$name" ]]; then name="-n $name" fi if [[ -x $TARGET_DEVSTACK_DIR/tools/ ]]; then $TARGET_DEVSTACK_DIR/tools/ $name -d $LOGDIR sleep 1 else echo "WARNING: Attempted to worlddump but couldn't find $TARGET_DEVSTACK_DIR/tools/" fi } # DIVIDER trap exit_trap EXIT function exit_trap { # DIVIDER local r=$? # DIVIDER set +o xtrace # DIVIDER set +o errexit if [[ $r -ne 0 ]]; then # DIVIDER local frame=0 while caller $frame; do ((frame++)); done echo "Exit code: $r" worlddump fi exit $r } # DIVIDER FSSH="ssh -v -o ConnectTimeout=10 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" # DIVIDER $_XTRACE_GRENADE_FUNCTIONS # DIVIDER

Save trace setting

Include the common functions

just like source, except turn off tracing, as it just gets in the way

TODO: we'd really like to use the ping_check_functions that exist in devstack, however they are all wrapped up in lib/neutron-legacy gorp. Until that can be cleanly separated we need to keep our own copy here.

ping_check_public $ip $timeout [False] - ping an machine on a public ip address. Should work with either neutron or nova-net. Also works to ensure the guest is not up if you pass False as last parameter.

save_data() dumps service datastores into SAVE_DIR for base or target release.

Setup Exit Traps for debug purposes

really important that this is the first line in this function, otherwise we corrupt the exit code

we don't need tracing during this

we have to turn off errexit at this point, otherwise we're going to exit from this function early when the while caller ends (with a bad exit)

unwind the call stack on failures

Force a shorter connect timeout, if networking has gone off the rails we could potentially be hanging around for minutes on every ssh attempt due to TCP timeouts/retries.

Don't check or store host keys, which makes it easier for local dev when hosts come and go.

Auto-accept whatever we connect to

Restore xtrace