Virtual environment groundwork
Introduce the tooling to build virtual environments.
* tools/build_venv.sh: build a venv
* introduce lib/stack to house functionality extracted from stack.sh that
is needed in other places, such as Grenade; start with stack_install_service
to wrap the venv install mechanics
* declare PROJECT_VENV array to track where project venvs should be installed
* create a venv for each project defined in PROJECT_VENV in stack_install_service()
Change-Id: I508588c0e2541b976dd94569d44b61dd2c35c01c
diff --git a/tools/build_venv.sh b/tools/build_venv.sh
new file mode 100755
index 0000000..ad95080
--- /dev/null
+++ b/tools/build_venv.sh
@@ -0,0 +1,59 @@
+#!/usr/bin/env bash
+#
+# **tools/build_venv.sh** - Build a Python Virtual Envirnment
+#
+# build_venv.sh venv-path [package [...]]
+#
+# Assumes:
+# - a useful pip is installed
+# - virtualenv will be installed by pip
+# - installs basic common prereq packages that require compilation
+# to allow quick copying of resulting venv as a baseline
+
+
+VENV_DEST=${1:-.venv}
+shift
+
+MORE_PACKAGES="$@"
+
+# If TOP_DIR is set we're being sourced rather than running stand-alone
+# or in a sub-shell
+if [[ -z "$TOP_DIR" ]]; then
+
+ set -o errexit
+ set -o nounset
+
+ # Keep track of the devstack directory
+ TOP_DIR=$(cd $(dirname "$0")/.. && pwd)
+ FILES=$TOP_DIR/files
+
+ # Import common functions
+ source $TOP_DIR/functions
+
+ GetDistro
+
+ source $TOP_DIR/stackrc
+
+ trap err_trap ERR
+
+fi
+
+# Exit on any errors so that errors don't compound
+function err_trap {
+ local r=$?
+ set +o xtrace
+
+ rm -rf $TMP_VENV_PATH
+
+ exit $r
+}
+
+# Build new venv
+virtualenv $VENV_DEST
+
+# Install modern pip
+$VENV_DEST/bin/pip install -U pip
+
+for pkg in ${MORE_PACKAGES}; do
+ pip_install_venv $VENV_DEST $pkg
+done