190 lines
6.4 KiB
Bash
190 lines
6.4 KiB
Bash
#!/bin/bash
|
|
#
|
|
# 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
|
|
#
|
|
# 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.
|
|
#
|
|
#
|
|
# functions - Grenade-specific functions
|
|
#
|
|
# The following variables are assumed to be defined by certain functions:
|
|
#
|
|
# - ``GRENADE_DIR``
|
|
# - ``TARGET_DEVSTACK_DIR``
|
|
# - ``MYSQL_PASSWORD``
|
|
# - ``SAVE_DIR``
|
|
|
|
|
|
# Save trace setting
|
|
_XTRACE_GRENADE_FUNCTIONS=$(set +o | grep xtrace)
|
|
set +o xtrace
|
|
|
|
# Include the common functions
|
|
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
|
|
|
|
# just like source, except turn off tracing, as it just gets in the way
|
|
function source_quiet {
|
|
XTRACE=$(set +o | grep xtrace)
|
|
set +o xtrace
|
|
source $@
|
|
$XTRACE
|
|
}
|
|
|
|
# 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.
|
|
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
|
|
# Dump Console log if ping fails
|
|
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
|
|
}
|
|
|
|
# save_data() dumps service datastores into SAVE_DIR for base or
|
|
# target release.
|
|
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/worlddump.py ]]; then
|
|
$TARGET_DEVSTACK_DIR/tools/worlddump.py $name -d $LOGDIR
|
|
sleep 1
|
|
else
|
|
echo "WARNING: Attempted to worlddump but couldn't find $TARGET_DEVSTACK_DIR/tools/worlddump.py"
|
|
fi
|
|
}
|
|
|
|
|
|
# Setup Exit Traps for debug purposes
|
|
trap exit_trap EXIT
|
|
function exit_trap {
|
|
# really important that this is the *first* line in this
|
|
# function, otherwise we corrupt the exit code
|
|
local r=$?
|
|
|
|
# we don't need tracing during this
|
|
set +o xtrace
|
|
|
|
# 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)
|
|
set +o errexit
|
|
|
|
if [[ $r -ne 0 ]]; then
|
|
# unwind the call stack on failures
|
|
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
|
|
# unset the constraints as it might have been set earlier
|
|
# by base or target test run
|
|
unset TEMPEST_VENV_UPPER_CONSTRAINTS
|
|
# NOTE(yoctozepto): Grenade does not know about
|
|
# TEMPEST_VENV_UPPER_CONSTRAINTS, only DevStack does.
|
|
# This sources that one variable from it.
|
|
TEMPEST_VENV_UPPER_CONSTRAINTS=$(set +o xtrace &&
|
|
source $release_dir/devstack/stackrc &&
|
|
echo $TEMPEST_VENV_UPPER_CONSTRAINTS)
|
|
# 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.
|
|
if [[ "$TEMPEST_VENV_UPPER_CONSTRAINTS" != "master" ]]; then
|
|
echo "Using $TEMPEST_VENV_UPPER_CONSTRAINTS constraints in Tempest virtual env."
|
|
# NOTE: setting both tox env var and once Tempest start using new var
|
|
# TOX_CONSTRAINTS_FILE then we can remove the old one.
|
|
export UPPER_CONSTRAINTS_FILE=$TEMPEST_VENV_UPPER_CONSTRAINTS
|
|
export TOX_CONSTRAINTS_FILE=$TEMPEST_VENV_UPPER_CONSTRAINTS
|
|
else
|
|
# 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
|
|
# https://bugs.launchpad.net/devstack/+bug/2003993
|
|
export UPPER_CONSTRAINTS_FILE=https://releases.openstack.org/constraints/upper/master
|
|
export TOX_CONSTRAINTS_FILE=https://releases.openstack.org/constraints/upper/master
|
|
fi
|
|
tox -esmoke -- --concurrency=$TEMPEST_CONCURRENCY
|
|
}
|
|
|
|
|
|
# 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
|
|
FSSH="ssh -v -o ConnectTimeout=10 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
|
|
|
|
|
|
# Restore xtrace
|
|
$_XTRACE_GRENADE_FUNCTIONS
|