Add GRENADE_USE_EXTERNAL_DEVSTACK to skip part of the setup

When GRENADE_USE_EXTERNAL_DEVSTACK is set to True,
the initial steps performed by grenade are skipped, namely:
- grabbing and configuring the base and the target devstacks;
- running devstacks on the base target.

This change is required to allow a native Zuul v3 job to use
the existing workflow to setup and run devstack.

Change-Id: I232db8de05141849c81851dd29440959cb0d8533
This commit is contained in:
Luigi Toscano 2019-02-25 21:46:56 +01:00
parent 7f7e515de6
commit 15e02fec78
6 changed files with 73 additions and 28 deletions

View File

@ -241,6 +241,12 @@ devstack localrc files with the ``devstack_localrc`` function.
Which will take all the rest of the stuff on that line and add it to Which will take all the rest of the stuff on that line and add it to
the localrc for either the base or target devstack. the localrc for either the base or target devstack.
Please note that ``devstack_localrc`` only works when grenade
performs the configuration of the devstack settings and runs devstack
against the base target. When GRENADE_USE_EXTERNAL_DEVSTACK is set
to True, as it happens on the Zuul grenade jobs where devstack is
configured and executed before grenade, the function has no effect.
Example settings Example settings
---------------- ----------------

View File

@ -108,6 +108,10 @@ high level version of what that does.
- perform some sanity checking (currently tempest smoke) to ensure - perform some sanity checking (currently tempest smoke) to ensure
everything seems good. everything seems good.
The script skips the first two steps (which take care of setting up the 2
devstack environments and installing the base one) when the value
of GRENADE_USE_EXTERNAL_DEVSTACK is set to True.
Terminology Terminology
----------- -----------

View File

@ -166,9 +166,13 @@ set -o xtrace
# the TARGET devstack functions file, then source the rest of the # the TARGET devstack functions file, then source the rest of the
# grenade settings. This should let us run the bulk of grenade. # grenade settings. This should let us run the bulk of grenade.
# Get both devstack trees, so that BASE_DEVSTACK_DIR, and if [ "${GRENADE_USE_EXTERNAL_DEVSTACK}" != "True" ]; then
# TARGET_DEVSTACK_DIR are now fully populated. # Get both devstack trees, so that BASE_DEVSTACK_DIR, and
fetch_devstacks # TARGET_DEVSTACK_DIR are now fully populated.
fetch_devstacks
else
devstacks_setup_environment
fi
# Source the rest of the Grenade functions. For convenience # Source the rest of the Grenade functions. For convenience
# ``$GRENADE_DIR/functions`` implicitly sources # ``$GRENADE_DIR/functions`` implicitly sources
@ -215,16 +219,17 @@ fetch_grenade_plugins
# when the time is right. # when the time is right.
load_settings load_settings
if [ "${GRENADE_USE_EXTERNAL_DEVSTACK}" != "True" ]; then
# Nova should use singleconductor as Grenade doesn't
# setup multi-cell rabbit for now
devstack_localrc base "CELLSV2_SETUP=singleconductor"
devstack_localrc target "CELLSV2_SETUP=singleconductor"
fi
# And ensure that we setup the target localrc.auto, because stack.sh # And ensure that we setup the target localrc.auto, because stack.sh
# isn't run there. This has to be run after load_settings because # isn't run there. This has to be run after load_settings because
# plugins might change the service list during this phase. # plugins might change the service list during this phase.
# Nova should use singleconductor as Grenade doesn't
# setup multi-cell rabbit for now
devstack_localrc base "CELLSV2_SETUP=singleconductor"
devstack_localrc target "CELLSV2_SETUP=singleconductor"
extract_localrc_section $TARGET_DEVSTACK_DIR/local.conf \ extract_localrc_section $TARGET_DEVSTACK_DIR/local.conf \
$TARGET_DEVSTACK_DIR/localrc \ $TARGET_DEVSTACK_DIR/localrc \
$TARGET_DEVSTACK_DIR/.localrc.auto $TARGET_DEVSTACK_DIR/.localrc.auto
@ -235,26 +240,28 @@ if [[ "$RUN_BASE" == "True" ]]; then
# Initialize grenade_db local storage, used for resource tracking # Initialize grenade_db local storage, used for resource tracking
init_grenade_db init_grenade_db
echo_summary "Running base stack.sh" if [ "${GRENADE_USE_EXTERNAL_DEVSTACK}" != "True" ]; then
cd $BASE_DEVSTACK_DIR echo_summary "Running base stack.sh"
GIT_BASE=$GIT_BASE ./stack.sh cd $BASE_DEVSTACK_DIR
stop $STOP stack.sh 10 GIT_BASE=$GIT_BASE ./stack.sh
stop $STOP stack.sh 10
echo_summary "Running post-stack.sh" echo_summary "Running post-stack.sh"
if [[ -e $GRENADE_DIR/post-stack.sh ]]; then if [[ -e $GRENADE_DIR/post-stack.sh ]]; then
cd $GRENADE_DIR cd $GRENADE_DIR
# By the time we get here the sub nodes are already setup with localrc files # By the time we get here the sub nodes are already setup with localrc files
# as those are transferred in devstack-gate even before grenade.sh is called # as those are transferred in devstack-gate even before grenade.sh is called
# We hack the ./post-stack.sh to inject what we need. if we don't set # We hack the ./post-stack.sh to inject what we need. if we don't set
# CELLSV2_SETUP, the default devstack assumes "superconductor" and fails. # CELLSV2_SETUP, the default devstack assumes "superconductor" and fails.
export SUB_NODE_ENV_VARS="CELLSV2_SETUP=singleconductor" export SUB_NODE_ENV_VARS="CELLSV2_SETUP=singleconductor"
sed -i 's/stdbuf/$SUB_NODE_ENV_VARS stdbuf/' ./post-stack.sh sed -i 's/stdbuf/$SUB_NODE_ENV_VARS stdbuf/' ./post-stack.sh
cat ./post-stack.sh cat ./post-stack.sh
./post-stack.sh ./post-stack.sh
stop $STOP post-stack.sh 15 stop $STOP post-stack.sh 15
echo_summary "Completed post-stack.sh" echo_summary "Completed post-stack.sh"
fi
fi fi
# Cache downloaded instances # Cache downloaded instances

View File

@ -8,6 +8,13 @@ if [ -f $RC_DIR/localrc ]; then
source $RC_DIR/localrc source $RC_DIR/localrc
fi fi
# If True, the setting of the devstack configuration for the base and
# the target and the execution of devstack on the base target
# (if requested) are not performed by grenade, but they must be done
# separately.
# This is the case for example for the native zuul v3 grenade job.
GRENADE_USE_EXTERNAL_DEVSTACK=${GRENADE_USE_EXTERNAL_DEVSTACK:-False}
# Base GIT Repo URL # Base GIT Repo URL
# Another option is http://review.openstack.org/p # Another option is http://review.openstack.org/p
# Another option is https://github.com # Another option is https://github.com

View File

@ -261,6 +261,12 @@ function dump_local_files {
} }
function fetch_devstacks { function fetch_devstacks {
devstacks_clone
devstacks_setup_environment
devstacks_setup_settings
}
function devstacks_clone {
# Fetch Base Devstack # Fetch Base Devstack
# Get DevStack if it doesn't exist # Get DevStack if it doesn't exist
@ -271,7 +277,9 @@ function fetch_devstacks {
if [[ ! -d $TARGET_DEVSTACK_DIR ]]; then if [[ ! -d $TARGET_DEVSTACK_DIR ]]; then
git_clone $TARGET_DEVSTACK_REPO $TARGET_DEVSTACK_DIR $TARGET_DEVSTACK_BRANCH git_clone $TARGET_DEVSTACK_REPO $TARGET_DEVSTACK_DIR $TARGET_DEVSTACK_BRANCH
fi fi
}
function devstacks_setup_environment {
# This depends on REQUIREMENTS_DIR being set in grenaderc, which # This depends on REQUIREMENTS_DIR being set in grenaderc, which
# it needs to be to have gotten this far. # it needs to be to have gotten this far.
source $TARGET_DEVSTACK_DIR/functions-common source $TARGET_DEVSTACK_DIR/functions-common
@ -283,12 +291,21 @@ function fetch_devstacks {
_DEFAULT_PYTHON3_VERSION="$(_get_python_version python3)" _DEFAULT_PYTHON3_VERSION="$(_get_python_version python3)"
export PYTHON3_VERSION=${PYTHON3_VERSION:-${_DEFAULT_PYTHON3_VERSION:-3.5}} export PYTHON3_VERSION=${PYTHON3_VERSION:-${_DEFAULT_PYTHON3_VERSION:-3.5}}
install_devstack_tools
# Load up a copy of the downloaded images if not present # Load up a copy of the downloaded images if not present
if [[ -d ${STACK_ROOT}/images ]]; then if [[ -d ${STACK_ROOT}/images ]]; then
rsync -a ${STACK_ROOT}/images/* $BASE_DEVSTACK_DIR/files rsync -a ${STACK_ROOT}/images/* $BASE_DEVSTACK_DIR/files
fi fi
}
function devstacks_setup_settings {
# dsconf is required only by this function and devstack_localrc
# but only when the base is installed by grenade.
# Moreover, when the deployment of base is not performed by grenade,
# installing devstack-tools just before creating the resources also
# updates pbr (at least from rocky->master) leading to an exception
# in running services using pbr methods (for example nova-conductor)
# probably because they are still looking for the old version.
install_devstack_tools
# Set up base localrc # Set up base localrc

View File

@ -165,6 +165,10 @@ function enable_grenade_plugin {
} }
function devstack_localrc { function devstack_localrc {
if [ "${GRENADE_USE_EXTERNAL_DEVSTACK}" == "True" ]; then
echo "DevStack is configured externally, ignoring \$(devstack_localrc $@)"
return
fi
local settings_file=$(caller | awk '{print $2}') local settings_file=$(caller | awk '{print $2}')
local where=$1 local where=$1
local path=$(localrc_path $where) local path=$(localrc_path $where)