grenade/inc/plugin
Luigi Toscano 15e02fec78 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
2020-03-02 18:20:36 +01:00

200 lines
5.5 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 related to grenade plugins
#
# The following variables are assumed to be defined by certain functions:
#
# - ``GRENADE_DIR``
# - ``SAVE_DIR``
# - ``UPGRADE_PROJECTS``
# - ``PLUGIN_DIR``
# - ``BASE_DEVSTACK_DIR``
GRENADE_DB=$SAVE_DIR/grenade_db.ini
function load_settings {
# In tree plugins
local in_tree_plugins=$RC_DIR/projects
for dir in $in_tree_plugins/*; do
local settings=$dir/settings
if [[ -e $settings ]]; then
source $settings
fi
done
# External plugins
local plugins="${GRENADE_PLUGINS}"
local plugin
# short circuit if nothing to do
if [[ -z $plugins ]]; then
return
fi
echo "Loading plugin settings"
for plugin in ${plugins//,/ }; do
local dir=${GITDIR[$plugin]}
# source any known settings
if [[ -f $dir/devstack/upgrade/settings ]]; then
echo "Loading settings for $plugin from $dir/devstack/upgrade/settings"
source $dir/devstack/upgrade/settings
fi
done
export UPGRADE_PROJECTS
}
function reverse_list {
local str=""
local reversed=""
for str in $@; do
reversed="$str $reversed"
done
echo $reversed
}
function shutdown_services {
local projects=""
local project=""
projects=`reverse_list "$UPGRADE_PROJECTS"`
echo "Upgrade projects: $projects"
# iterate in reverse under the theory that we should take down
# services in opposite order
for project in $projects; do
echo "Looking for $project"
local dir=${PLUGIN_DIR[$project]}
if [[ -z "$dir" ]]; then
die $LINENO "Couldn't find project '$project' in plugin list"
fi
local shutdown=$dir/shutdown.sh
if [[ -e $shutdown ]]; then
TOP_DIR=$BASE_DEVSTACK_DIR $shutdown || die $LINENO "Failed to shutdown $project"
fi
done
}
function resources {
# which resource phase are we in
local phase=$1
local side=$2
local project=""
# bail early if we aren't going to do this level of verification.
if [[ "$VERIFY_RESOURCES" != "True" ]]; then
echo "Skipping resource phase ``$phase`` by configuration"
return
fi
local desc=$phase
if [[ -n $side ]]; then
desc="$phase $side"
fi
echo_summary "Running resource phase: ``$desc``"
local projects=$UPGRADE_PROJECTS
if [[ $phase == "destroy" ]];then
projects=`reverse_list "$UPGRADE_PROJECTS"`
fi
for project in $projects; do
local dir=${PLUGIN_DIR[$project]}
if [[ -z "$dir" ]]; then
die $LINENO "Couldn't find project '$project' in plugin list"
fi
local resource=$dir/resources.sh
if [[ -e $resource ]]; then
# NOTE(sdague): we might need to set topdir differently?
TOP_DIR=$BASE_DEVSTACK_DIR LOGDIR=$LOGDIR \
$resource $phase $side || die $LINENO "Failed to run ``$resource $phase $side``"
fi
done
}
# initialize the grenade_db and ensure that it's blank for each run
function init_grenade_db {
mkdir -p $SAVE_DIR
echo "" > $GRENADE_DB
}
function resource_save {
local project=$1
local key=$2
local value=$3
iniset $GRENADE_DB $project $key $value
}
function resource_get {
local project=$1
local key=$2
local value=$(iniget $GRENADE_DB $project $key)
echo $value
}
# External plugin interface for grenade
function enable_grenade_plugin {
local name=$1
local url=$2
local branch=${3:-$TARGET_DEVSTACK_BRANCH}
# the following allows us to set the PLUGIN_DIR for the gate to
# zuul checked out locations.
local plugin_dir=${PLUGIN_DIR:-$STACK_ROOT/plugins}
GRENADE_PLUGINS+=",$name"
# NOTE(sdague): we're intentional namespace colliding with
# devstack to reuse devstack architecture. I don't think this is
# going to get us in trouble, but it might. So here be dragons, or
# at least small fierce lizards of unknown provenance.
GITREPO[$name]=$url
GITDIR[$name]=$plugin_dir/$name
GITBRANCH[$name]=$branch
}
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 where=$1
local path=$(localrc_path $where)
shift
echo "Adding settings to $where at $path"
dsconf setlc_raw $path "# added by $settings_file"
dsconf setlc_raw $path "$@"
}
function fetch_grenade_plugins {
local plugins="${GRENADE_PLUGINS}"
local plugin
# short circuit if nothing to do
if [[ -z $plugins ]]; then
return
fi
echo "Fetching Grenade plugins"
for plugin in ${plugins//,/ }; do
git_clone_by_name $plugin
done
}
# this allows us to expose this late
if [[ -f ${GRENADE_DIR}/pluginrc ]]; then
source ${GRENADE_DIR}/pluginrc
fi