30d9bf9a6d
We have a *ton* of stuff in devstack that is very linear, specifically the ten-ish minutes we spend loading osc to run a single API command against something. We also generate configs, sync databases, and other things that use one core of our worker and make our runtime longer than it really needs to be. The idea in this patch is to make it super simple to run some things in the background and then wait for them to finish before proceeding to something that will require them to be done. This avoids the interleaving you would expect by redirecting the async tasks to a log file, and then cat'ing that log file synchronously during the wait operation. The per-task log file remains so it's easier to examine it in isolation. Multiple people have reported between 22-30% improvement in the time it takes to stack with this. More can be done, but what is here already makes a significant difference. Change-Id: I270a910b531641b023c13f75dfedca057a1f1031
150 lines
3.3 KiB
Bash
Executable File
150 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# **clean.sh**
|
|
|
|
# ``clean.sh`` does its best to eradicate traces of a Grenade
|
|
# run except for the following:
|
|
# - both base and target code repos are left alone
|
|
# - packages (system and pip) are left alone
|
|
|
|
# This means that all data files are removed. More??
|
|
|
|
# Keep track of the current devstack directory.
|
|
TOP_DIR=$(cd $(dirname "$0") && pwd)
|
|
|
|
# Import common functions
|
|
source $TOP_DIR/functions
|
|
|
|
FILES=$TOP_DIR/files
|
|
|
|
# Load local configuration
|
|
source $TOP_DIR/openrc
|
|
|
|
# Get the variables that are set in stack.sh
|
|
if [[ -r $TOP_DIR/.stackenv ]]; then
|
|
source $TOP_DIR/.stackenv
|
|
fi
|
|
|
|
# Determine what system we are running on. This provides ``os_VENDOR``,
|
|
# ``os_RELEASE``, ``os_PACKAGE``, ``os_CODENAME``
|
|
# and ``DISTRO``
|
|
GetDistro
|
|
|
|
# Import apache functions
|
|
source $TOP_DIR/lib/apache
|
|
source $TOP_DIR/lib/ldap
|
|
|
|
# Import database library
|
|
source $TOP_DIR/lib/database
|
|
source $TOP_DIR/lib/rpc_backend
|
|
|
|
source $TOP_DIR/lib/tls
|
|
|
|
source $TOP_DIR/lib/oslo
|
|
source $TOP_DIR/lib/lvm
|
|
source $TOP_DIR/lib/horizon
|
|
source $TOP_DIR/lib/keystone
|
|
source $TOP_DIR/lib/glance
|
|
source $TOP_DIR/lib/nova
|
|
source $TOP_DIR/lib/placement
|
|
source $TOP_DIR/lib/cinder
|
|
source $TOP_DIR/lib/swift
|
|
source $TOP_DIR/lib/neutron
|
|
source $TOP_DIR/lib/neutron-legacy
|
|
|
|
set -o xtrace
|
|
|
|
# Extras Source
|
|
# --------------
|
|
|
|
# Phase: source
|
|
if [[ -d $TOP_DIR/extras.d ]]; then
|
|
for i in $TOP_DIR/extras.d/*.sh; do
|
|
[[ -r $i ]] && source $i source
|
|
done
|
|
fi
|
|
|
|
# Let unstack.sh do its thing first
|
|
$TOP_DIR/unstack.sh --all
|
|
|
|
# Run extras
|
|
# ==========
|
|
|
|
# Phase: clean
|
|
load_plugin_settings
|
|
run_phase clean
|
|
|
|
if [[ -d $TOP_DIR/extras.d ]]; then
|
|
for i in $TOP_DIR/extras.d/*.sh; do
|
|
[[ -r $i ]] && source $i clean
|
|
done
|
|
fi
|
|
|
|
# Clean projects
|
|
|
|
# BUG: cinder tgt doesn't exit cleanly if it's not running.
|
|
cleanup_cinder || /bin/true
|
|
|
|
cleanup_glance
|
|
cleanup_keystone
|
|
cleanup_nova
|
|
cleanup_placement
|
|
cleanup_neutron
|
|
cleanup_swift
|
|
cleanup_horizon
|
|
|
|
if is_service_enabled ldap; then
|
|
cleanup_ldap
|
|
fi
|
|
|
|
# Do the hypervisor cleanup until this can be moved back into lib/nova
|
|
if is_service_enabled nova && [[ -r $NOVA_PLUGINS/hypervisor-$VIRT_DRIVER ]]; then
|
|
cleanup_nova_hypervisor
|
|
fi
|
|
|
|
# Clean out /etc
|
|
sudo rm -rf /etc/keystone /etc/glance /etc/nova /etc/cinder /etc/swift /etc/neutron /etc/openstack/
|
|
|
|
# Clean out tgt
|
|
sudo rm -f /etc/tgt/conf.d/*
|
|
|
|
# Clean up the message queue
|
|
cleanup_rpc_backend
|
|
cleanup_database
|
|
|
|
# Clean out data and status
|
|
sudo rm -rf $DATA_DIR $DEST/status $DEST/async
|
|
|
|
# Clean out the log file and log directories
|
|
if [[ -n "$LOGFILE" ]] && [[ -f "$LOGFILE" ]]; then
|
|
sudo rm -f $LOGFILE
|
|
fi
|
|
if [[ -n "$LOGDIR" ]] && [[ -d "$LOGDIR" ]]; then
|
|
sudo rm -rf $LOGDIR
|
|
fi
|
|
|
|
# Clean out the systemd unit files.
|
|
sudo find $SYSTEMD_DIR -type f -name '*devstack@*service' -delete
|
|
# Make systemd aware of the deletion.
|
|
$SYSTEMCTL daemon-reload
|
|
|
|
# Clean up venvs
|
|
DIRS_TO_CLEAN="$WHEELHOUSE ${PROJECT_VENV[@]} .config/openstack"
|
|
rm -rf $DIRS_TO_CLEAN
|
|
|
|
# Clean up files
|
|
|
|
FILES_TO_CLEAN=".localrc.auto .localrc.password "
|
|
FILES_TO_CLEAN+="docs/files docs/html shocco/ "
|
|
FILES_TO_CLEAN+="stack-screenrc test*.conf* test.ini* "
|
|
FILES_TO_CLEAN+=".stackenv .prereqs"
|
|
|
|
for file in $FILES_TO_CLEAN; do
|
|
rm -rf $TOP_DIR/$file
|
|
done
|
|
|
|
rm -rf ~/.config/openstack
|
|
|
|
# Clear any fstab entries made
|
|
sudo sed -i '/.*comment=devstack-.*/ d' /etc/fstab
|