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 # DIVIDER local fip=$(openstack floating ip list --floating-ip-address $ip -f value -c Port) local server=$(openstack port show $fip -f value -c device_id) openstack console log show $server 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 } function run_tempest { local release_dir release_dir=$1 cd $release_dir/tempest # DIVIDER unset TEMPEST_VENV_UPPER_CONSTRAINTS # DIVIDER TEMPEST_VENV_UPPER_CONSTRAINTS=$(set +o xtrace && source $release_dir/devstack/stackrc && echo $TEMPEST_VENV_UPPER_CONSTRAINTS) # DIVIDER if [[ "$TEMPEST_VENV_UPPER_CONSTRAINTS" != "master" ]]; then echo "Using $TEMPEST_VENV_UPPER_CONSTRAINTS constraints in Tempest virtual env." # DIVIDER export UPPER_CONSTRAINTS_FILE=$TEMPEST_VENV_UPPER_CONSTRAINTS export TOX_CONSTRAINTS_FILE=$TEMPEST_VENV_UPPER_CONSTRAINTS else # DIVIDER export UPPER_CONSTRAINTS_FILE= export TOX_CONSTRAINTS_FILE= fi tox -esmoke -- --concurrency=$TEMPEST_CONCURRENCY } # 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 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.

Dump Console log if ping fails

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

unset the constraints as it might have been set earlier by base or target test run

NOTE(yoctozepto): Grenade does not know about TEMPEST_VENV_UPPER_CONSTRAINTS, only DevStack does. This sources that one variable from it.

NOTE(gmann): If gate explicitly set the non master constraints to use for Tempest venv then use the same while running the tests too otherwise, it will recreate the Tempest venv due to constraints mismatch. recreation of Tempest venv can flush the initially installed tempest plugins and their deps.

NOTE: setting both tox env var and once Tempest start using new var TOX_CONSTRAINTS_FILE then we can remove the old one.

NOTE(gmann): we need to set the below env var pointing to master constraints even that is what default in tox.ini. Otherwise it can create the issue for grenade run where old and new devstack can have different tempest (old and master) to install. For detail problem, refer to the

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