Add OFFLINE support to allow stack.sh to run cleanly without
Internet access after having initialized /opt/stack with access.
Good for those long flights on a Friday night.
Change-Id: If97c22eef91bbd88aed644f05c56bf815036e78f
diff --git a/stack.sh b/stack.sh
index 838b516..5c97814 100755
--- a/stack.sh
+++ b/stack.sh
@@ -82,6 +82,7 @@
# apt-get wrapper to just get arguments set correctly
function apt_get() {
+ [[ "$OFFLINE" = "True" ]] && return
local sudo="sudo"
[ "$(id -u)" = "0" ] && sudo="env"
$sudo DEBIAN_FRONTEND=noninteractive apt-get \
@@ -147,6 +148,23 @@
sudo mv $TEMPFILE /etc/sudoers.d/stack_sh_nova
fi
+# Normalize config values to True or False
+# VAR=`trueorfalse default-value test-value`
+function trueorfalse() {
+ local default=$1
+ local testval=$2
+
+ [[ -z "$testval" ]] && { echo "$default"; return; }
+ [[ "0 no false False FALSE" =~ "$testval" ]] && { echo "False"; return; }
+ [[ "1 yes true True TRUE" =~ "$testval" ]] && { echo "True"; return; }
+ echo "$default"
+}
+
+# Set True to configure stack.sh to run cleanly without Internet access.
+# stack.sh must have been previously run with Internet access to install
+# prerequisites and initialize $DEST.
+OFFLINE=`trueorfalse False $OFFLINE`
+
# Set the destination directories for openstack projects
NOVA_DIR=$DEST/nova
HORIZON_DIR=$DEST/horizon
@@ -196,18 +214,6 @@
fi
fi
-# Normalize config values to True or False
-# VAR=`trueorfalse default-value test-value`
-function trueorfalse() {
- local default=$1
- local testval=$2
-
- [[ -z "$testval" ]] && { echo "$default"; return; }
- [[ "0 no false False FALSE" =~ "$testval" ]] && { echo "False"; return; }
- [[ "1 yes true True TRUE" =~ "$testval" ]] && { echo "True"; return; }
- echo "$default"
-}
-
# Configure services to syslog instead of writing to individual log files
SYSLOG=`trueorfalse False $SYSLOG`
SYSLOG_HOST=${SYSLOG_HOST:-$HOST_IP}
@@ -460,17 +466,23 @@
done
}
+function pip_install {
+ [[ "$OFFLINE" = "True" ]] && return
+ sudo PIP_DOWNLOAD_CACHE=/var/cache/pip pip install --use-mirrors $@
+}
+
# install apt requirements
apt_get update
apt_get install $(get_packages)
# install python requirements
-sudo PIP_DOWNLOAD_CACHE=/var/cache/pip pip install --use-mirrors `cat $FILES/pips/*`
+pip_install `cat $FILES/pips/* | uniq`
# git clone only if directory doesn't exist already. Since ``DEST`` might not
# be owned by the installation user, we create the directory and change the
# ownership to the proper user.
function git_clone {
+ [[ "$OFFLINE" = "True" ]] && return
GIT_REMOTE=$1
GIT_DEST=$2