Make changes such that -o nounset runs

This makes a bunch of variable cleanups that will let -o nounset
function, for the time being we hide nounset behind another setting
variable so that it's not on by default.

Because this is bash, and things are only executed on demand, this
probably only works in the config it was run in. Expect cleaning up
all the paths to be something that takes quite a while.

This also includes a new set of unit tests around the trueorfalse
function, because my change in how it worked, didn't. Tests are good
m'kay.

Change-Id: I71a896623ea9e1f042a73dc0678ce85acf0dc87d
This commit is contained in:
Sean Dague 2014-12-04 19:38:15 -05:00
parent 5f6f43ed9f
commit 537532931d
26 changed files with 265 additions and 121 deletions

View File

@ -18,7 +18,7 @@ source $TOP_DIR/functions
FILES=$TOP_DIR/files FILES=$TOP_DIR/files
# Load local configuration # Load local configuration
source $TOP_DIR/stackrc source $TOP_DIR/openrc
# Get the variables that are set in stack.sh # Get the variables that are set in stack.sh
if [[ -r $TOP_DIR/.stackenv ]]; then if [[ -r $TOP_DIR/.stackenv ]]; then

View File

@ -65,7 +65,7 @@ TUSKARCLIENT_BRANCH=${TUSKARCLIENT_BRANCH:-master}
TUSKAR_DIR=$DEST/tuskar TUSKAR_DIR=$DEST/tuskar
TUSKARCLIENT_DIR=$DEST/python-tuskarclient TUSKARCLIENT_DIR=$DEST/python-tuskarclient
TUSKAR_AUTH_CACHE_DIR=${TUSKAR_AUTH_CACHE_DIR:-/var/cache/tuskar} TUSKAR_AUTH_CACHE_DIR=${TUSKAR_AUTH_CACHE_DIR:-/var/cache/tuskar}
TUSKAR_STANDALONE=`trueorfalse False $TUSKAR_STANDALONE` TUSKAR_STANDALONE=$(trueorfalse False TUSKAR_STANDALONE)
TUSKAR_CONF_DIR=/etc/tuskar TUSKAR_CONF_DIR=/etc/tuskar
TUSKAR_CONF=$TUSKAR_CONF_DIR/tuskar.conf TUSKAR_CONF=$TUSKAR_CONF_DIR/tuskar.conf
TUSKAR_API_HOST=${TUSKAR_API_HOST:-$HOST_IP} TUSKAR_API_HOST=${TUSKAR_API_HOST:-$HOST_IP}

View File

@ -353,7 +353,7 @@ function _ping_check_novanet {
local boot_timeout=$3 local boot_timeout=$3
local expected=${4:-"True"} local expected=${4:-"True"}
local check_command="" local check_command=""
MULTI_HOST=`trueorfalse False $MULTI_HOST` MULTI_HOST=$(trueorfalse False MULTI_HOST)
if [[ "$MULTI_HOST" = "True" && "$from_net" = "$PRIVATE_NETWORK_NAME" ]]; then if [[ "$MULTI_HOST" = "True" && "$from_net" = "$PRIVATE_NETWORK_NAME" ]]; then
return return
fi fi

View File

@ -21,7 +21,6 @@
# #
# The following variables are assumed to be defined by certain functions: # The following variables are assumed to be defined by certain functions:
# #
# - ``GIT_DEPTH``
# - ``ENABLED_SERVICES`` # - ``ENABLED_SERVICES``
# - ``ERROR_ON_CLONE`` # - ``ERROR_ON_CLONE``
# - ``FILES`` # - ``FILES``
@ -43,6 +42,8 @@ declare -A GITREPO
declare -A GITBRANCH declare -A GITBRANCH
declare -A GITDIR declare -A GITDIR
TRACK_DEPENDS=${TRACK_DEPENDS:-False}
# Config Functions # Config Functions
# ================ # ================
@ -243,7 +244,8 @@ function trueorfalse {
local xtrace=$(set +o | grep xtrace) local xtrace=$(set +o | grep xtrace)
set +o xtrace set +o xtrace
local default=$1 local default=$1
local testval=$2 local literal=$2
local testval=${!literal}
[[ -z "$testval" ]] && { echo "$default"; return; } [[ -z "$testval" ]] && { echo "$default"; return; }
[[ "0 no No NO false False FALSE" =~ "$testval" ]] && { echo "False"; return; } [[ "0 no No NO false False FALSE" =~ "$testval" ]] && { echo "False"; return; }
@ -252,6 +254,14 @@ function trueorfalse {
$xtrace $xtrace
} }
function isset {
nounset=$(set +o | grep nounset)
set +o nounset
[[ -n "${!1+x}" ]]
result=$?
$nounset
return $result
}
# Control Functions # Control Functions
# ================= # =================
@ -381,7 +391,11 @@ function warn {
# ``os_UPDATE`` - update: ex. the ``5`` in ``RHEL6.5`` # ``os_UPDATE`` - update: ex. the ``5`` in ``RHEL6.5``
# ``os_PACKAGE`` - package type: ``deb`` or ``rpm`` # ``os_PACKAGE`` - package type: ``deb`` or ``rpm``
# ``os_CODENAME`` - vendor's codename for release: ``snow leopard``, ``trusty`` # ``os_CODENAME`` - vendor's codename for release: ``snow leopard``, ``trusty``
declare os_VENDOR os_RELEASE os_UPDATE os_PACKAGE os_CODENAME os_VENDOR=""
os_RELEASE=""
os_UPDATE=""
os_PACKAGE=""
os_CODENAME=""
# GetOSVersion # GetOSVersion
function GetOSVersion { function GetOSVersion {
@ -577,8 +591,7 @@ function get_release_name_from_branch {
# Set global ``RECLONE=yes`` to simulate a clone when dest-dir exists # Set global ``RECLONE=yes`` to simulate a clone when dest-dir exists
# Set global ``ERROR_ON_CLONE=True`` to abort execution with an error if the git repo # Set global ``ERROR_ON_CLONE=True`` to abort execution with an error if the git repo
# does not exist (default is False, meaning the repo will be cloned). # does not exist (default is False, meaning the repo will be cloned).
# Set global ``GIT_DEPTH=<number>`` to limit the history depth of the git clone # Uses globals ``ERROR_ON_CLONE``, ``OFFLINE``, ``RECLONE``
# Uses globals ``ERROR_ON_CLONE``, ``OFFLINE``, ``RECLONE``, ``GIT_DEPTH``
# git_clone remote dest-dir branch # git_clone remote dest-dir branch
function git_clone { function git_clone {
local git_remote=$1 local git_remote=$1
@ -587,8 +600,7 @@ function git_clone {
local orig_dir=$(pwd) local orig_dir=$(pwd)
local git_clone_flags="" local git_clone_flags=""
RECLONE=$(trueorfalse False $RECLONE) RECLONE=$(trueorfalse False RECLONE)
if [[ -n "${GIT_DEPTH}" ]]; then if [[ -n "${GIT_DEPTH}" ]]; then
git_clone_flags="$git_clone_flags --depth $GIT_DEPTH" git_clone_flags="$git_clone_flags --depth $GIT_DEPTH"
fi fi
@ -978,9 +990,10 @@ function apt_get {
[[ "$(id -u)" = "0" ]] && sudo="env" [[ "$(id -u)" = "0" ]] && sudo="env"
$xtrace $xtrace
$sudo DEBIAN_FRONTEND=noninteractive \ $sudo DEBIAN_FRONTEND=noninteractive \
http_proxy=$http_proxy https_proxy=$https_proxy \ http_proxy=${http_proxy:-} https_proxy=${https_proxy:-} \
no_proxy=$no_proxy \ no_proxy=${no_proxy:-} \
apt-get --option "Dpkg::Options::=--force-confold" --assume-yes "$@" apt-get --option "Dpkg::Options::=--force-confold" --assume-yes "$@"
} }
@ -999,10 +1012,10 @@ function get_packages {
set +o xtrace set +o xtrace
local services=$@ local services=$@
local package_dir=$(_get_package_dir) local package_dir=$(_get_package_dir)
local file_to_parse local file_to_parse=""
local service local service=""
INSTALL_TESTONLY_PACKAGES=$(trueorfalse False $INSTALL_TESTONLY_PACKAGES) INSTALL_TESTONLY_PACKAGES=$(trueorfalse False INSTALL_TESTONLY_PACKAGES)
if [[ -z "$package_dir" ]]; then if [[ -z "$package_dir" ]]; then
echo "No package directory supplied" echo "No package directory supplied"
@ -1112,6 +1125,10 @@ function get_packages {
# Uses globals ``NO_UPDATE_REPOS``, ``REPOS_UPDATED``, ``RETRY_UPDATE`` # Uses globals ``NO_UPDATE_REPOS``, ``REPOS_UPDATED``, ``RETRY_UPDATE``
# install_package package [package ...] # install_package package [package ...]
function update_package_repo { function update_package_repo {
NO_UPDATE_REPOS=${NO_UPDATE_REPOS:-False}
REPOS_UPDATED=${REPOS_UPDATED:-False}
RETRY_UPDATE=${RETRY_UPDATE:-False}
if [[ "$NO_UPDATE_REPOS" = "True" ]]; then if [[ "$NO_UPDATE_REPOS" = "True" ]]; then
return 0 return 0
fi fi
@ -1321,7 +1338,7 @@ function screen_process {
SCREEN_NAME=${SCREEN_NAME:-stack} SCREEN_NAME=${SCREEN_NAME:-stack}
SERVICE_DIR=${SERVICE_DIR:-${DEST}/status} SERVICE_DIR=${SERVICE_DIR:-${DEST}/status}
USE_SCREEN=$(trueorfalse True $USE_SCREEN) USE_SCREEN=$(trueorfalse True USE_SCREEN)
# Append the process to the screen rc file # Append the process to the screen rc file
screen_rc "$name" "$command" screen_rc "$name" "$command"
@ -1394,7 +1411,7 @@ function screen_stop_service {
SCREEN_NAME=${SCREEN_NAME:-stack} SCREEN_NAME=${SCREEN_NAME:-stack}
SERVICE_DIR=${SERVICE_DIR:-${DEST}/status} SERVICE_DIR=${SERVICE_DIR:-${DEST}/status}
USE_SCREEN=$(trueorfalse True $USE_SCREEN) USE_SCREEN=$(trueorfalse True USE_SCREEN)
if is_service_enabled $service; then if is_service_enabled $service; then
# Clean up the screen window # Clean up the screen window
@ -1412,7 +1429,7 @@ function stop_process {
local service=$1 local service=$1
SERVICE_DIR=${SERVICE_DIR:-${DEST}/status} SERVICE_DIR=${SERVICE_DIR:-${DEST}/status}
USE_SCREEN=$(trueorfalse True $USE_SCREEN) USE_SCREEN=$(trueorfalse True USE_SCREEN)
if is_service_enabled $service; then if is_service_enabled $service; then
# Kill via pid if we have one available # Kill via pid if we have one available
@ -1462,7 +1479,7 @@ function tail_log {
local name=$1 local name=$1
local logfile=$2 local logfile=$2
USE_SCREEN=$(trueorfalse True $USE_SCREEN) USE_SCREEN=$(trueorfalse True USE_SCREEN)
if [[ "$USE_SCREEN" = "True" ]]; then if [[ "$USE_SCREEN" = "True" ]]; then
screen_process "$name" "sudo tail -f $logfile" screen_process "$name" "sudo tail -f $logfile"
fi fi
@ -1572,7 +1589,8 @@ function get_python_exec_prefix {
function pip_install { function pip_install {
local xtrace=$(set +o | grep xtrace) local xtrace=$(set +o | grep xtrace)
set +o xtrace set +o xtrace
if [[ "$OFFLINE" = "True" || -z "$@" ]]; then local offline=${OFFLINE:-False}
if [[ "$offline" == "True" || -z "$@" ]]; then
$xtrace $xtrace
return return
fi fi
@ -1601,20 +1619,20 @@ function pip_install {
$xtrace $xtrace
$sudo_pip \ $sudo_pip \
http_proxy=$http_proxy \ http_proxy=${http_proxy:-} \
https_proxy=$https_proxy \ https_proxy=${https_proxy:-} \
no_proxy=$no_proxy \ no_proxy=${no_proxy:-} \
$cmd_pip install \ $cmd_pip install \
$@ $@
INSTALL_TESTONLY_PACKAGES=$(trueorfalse False $INSTALL_TESTONLY_PACKAGES) INSTALL_TESTONLY_PACKAGES=$(trueorfalse False INSTALL_TESTONLY_PACKAGES)
if [[ "$INSTALL_TESTONLY_PACKAGES" == "True" ]]; then if [[ "$INSTALL_TESTONLY_PACKAGES" == "True" ]]; then
local test_req="$@/test-requirements.txt" local test_req="$@/test-requirements.txt"
if [[ -e "$test_req" ]]; then if [[ -e "$test_req" ]]; then
$sudo_pip \ $sudo_pip \
http_proxy=$http_proxy \ http_proxy=${http_proxy:-} \
https_proxy=$https_proxy \ https_proxy=${https_proxy:-} \
no_proxy=$no_proxy \ no_proxy=${no_proxy:-} \
$cmd_pip install \ $cmd_pip install \
-r $test_req -r $test_req
fi fi
@ -2084,13 +2102,13 @@ function cp_it {
# http_proxy=http://proxy.example.com:3128/ no_proxy=repo.example.net ./stack.sh # http_proxy=http://proxy.example.com:3128/ no_proxy=repo.example.net ./stack.sh
function export_proxy_variables { function export_proxy_variables {
if [[ -n "$http_proxy" ]]; then if isset http_proxy ; then
export http_proxy=$http_proxy export http_proxy=$http_proxy
fi fi
if [[ -n "$https_proxy" ]]; then if isset https_proxy ; then
export https_proxy=$https_proxy export https_proxy=$https_proxy
fi fi
if [[ -n "$no_proxy" ]]; then if isset no_proxy ; then
export no_proxy=$no_proxy export no_proxy=$no_proxy
fi fi
} }

View File

@ -75,11 +75,14 @@ CEILOMETER_BACKEND=${CEILOMETER_BACKEND:-mysql}
CEILOMETER_SERVICE_PROTOCOL=http CEILOMETER_SERVICE_PROTOCOL=http
CEILOMETER_SERVICE_HOST=$SERVICE_HOST CEILOMETER_SERVICE_HOST=$SERVICE_HOST
CEILOMETER_SERVICE_PORT=${CEILOMETER_SERVICE_PORT:-8777} CEILOMETER_SERVICE_PORT=${CEILOMETER_SERVICE_PORT:-8777}
CEILOMETER_USE_MOD_WSGI=$(trueorfalse False $CEILOMETER_USE_MOD_WSGI) CEILOMETER_USE_MOD_WSGI=$(trueorfalse False CEILOMETER_USE_MOD_WSGI)
# To enable OSprofiler change value of this variable to "notifications,profiler" # To enable OSprofiler change value of this variable to "notifications,profiler"
CEILOMETER_NOTIFICATION_TOPICS=${CEILOMETER_NOTIFICATION_TOPICS:-notifications} CEILOMETER_NOTIFICATION_TOPICS=${CEILOMETER_NOTIFICATION_TOPICS:-notifications}
CEILOMETER_COORDINATION_URL=${CEILOMETER_COORDINATION_URL:-}
CEILOMETER_PIPELINE_INTERVAL=${CEILOMETER_PIPELINE_INTERVAL:-}
# Tell Tempest this project is present # Tell Tempest this project is present
TEMPEST_SERVICES+=,ceilometer TEMPEST_SERVICES+=,ceilometer

View File

@ -68,7 +68,7 @@ fi
# Maintain this here for backward-compatibility with the old configuration # Maintain this here for backward-compatibility with the old configuration
# DEPRECATED: Use CINDER_ENABLED_BACKENDS instead # DEPRECATED: Use CINDER_ENABLED_BACKENDS instead
# Support for multi lvm backend configuration (default is no support) # Support for multi lvm backend configuration (default is no support)
CINDER_MULTI_LVM_BACKEND=$(trueorfalse False $CINDER_MULTI_LVM_BACKEND) CINDER_MULTI_LVM_BACKEND=$(trueorfalse False CINDER_MULTI_LVM_BACKEND)
# Default backends # Default backends
# The backend format is type:name where type is one of the supported backend # The backend format is type:name where type is one of the supported backend
@ -85,7 +85,7 @@ fi
# Should cinder perform secure deletion of volumes? # Should cinder perform secure deletion of volumes?
# Defaults to true, can be set to False to avoid this bug when testing: # Defaults to true, can be set to False to avoid this bug when testing:
# https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1023755 # https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1023755
CINDER_SECURE_DELETE=`trueorfalse True $CINDER_SECURE_DELETE` CINDER_SECURE_DELETE=$(trueorfalse True CINDER_SECURE_DELETE)
# Cinder reports allocations back to the scheduler on periodic intervals # Cinder reports allocations back to the scheduler on periodic intervals
# it turns out we can get an "out of space" issue when we run tests too # it turns out we can get an "out of space" issue when we run tests too

View File

@ -33,6 +33,7 @@ set +o xtrace
# If ``VOLUME_GROUP`` is set, use it, otherwise we'll build a VG name based # If ``VOLUME_GROUP`` is set, use it, otherwise we'll build a VG name based
# on ``VOLUME_GROUP_NAME`` that includes the backend name # on ``VOLUME_GROUP_NAME`` that includes the backend name
# Grenade doesn't use ``VOLUME_GROUP2`` so it is left out # Grenade doesn't use ``VOLUME_GROUP2`` so it is left out
VOLUME_GROUP=${VOLUME_GROUP:-}
VOLUME_GROUP_NAME=${VOLUME_GROUP:-${VOLUME_GROUP_NAME:-stack-volumes}} VOLUME_GROUP_NAME=${VOLUME_GROUP:-${VOLUME_GROUP_NAME:-stack-volumes}}
# TODO: resurrect backing device...need to know how to set values # TODO: resurrect backing device...need to know how to set values

View File

@ -23,6 +23,7 @@
XTRACE=$(set +o | grep xtrace) XTRACE=$(set +o | grep xtrace)
set +o xtrace set +o xtrace
DATABASE_BACKENDS=""
# Register a database backend # Register a database backend
# #
@ -30,7 +31,7 @@ set +o xtrace
# #
# This is required to be defined before the specific database scripts are sourced # This is required to be defined before the specific database scripts are sourced
function register_database { function register_database {
[ -z "$DATABASE_BACKENDS" ] && DATABASE_BACKENDS=$1 || DATABASE_BACKENDS+=" $1" DATABASE_BACKENDS+=" $1"
} }
# Sourcing the database libs sets DATABASE_BACKENDS with the available list # Sourcing the database libs sets DATABASE_BACKENDS with the available list

View File

@ -14,12 +14,22 @@ set +o xtrace
register_database mysql register_database mysql
# Linux distros, thank you for being incredibly consistent
MYSQL=mysql
if is_fedora; then
if [[ $DISTRO =~ (rhel6) ]]; then
MYSQL=mysqld
else
MYSQL=mariadb
fi
fi
# Functions # Functions
# --------- # ---------
# Get rid of everything enough to cleanly change database backends # Get rid of everything enough to cleanly change database backends
function cleanup_database_mysql { function cleanup_database_mysql {
stop_service $MYSQL
if is_ubuntu; then if is_ubuntu; then
# Get ruthless with mysql # Get ruthless with mysql
stop_service $MYSQL stop_service $MYSQL

View File

@ -26,7 +26,7 @@ TIE_DIR=$DEST/tripleo-image-elements
# NOTE: Setting DIB_APT_SOURCES assumes you will be building # NOTE: Setting DIB_APT_SOURCES assumes you will be building
# Debian/Ubuntu based images. Leave unset for other flavors. # Debian/Ubuntu based images. Leave unset for other flavors.
DIB_APT_SOURCES=${DIB_APT_SOURCES:-""} DIB_APT_SOURCES=${DIB_APT_SOURCES:-""}
DIB_BUILD_OFFLINE=$(trueorfalse False $DIB_BUILD_OFFLINE) DIB_BUILD_OFFLINE=$(trueorfalse False DIB_BUILD_OFFLINE)
DIB_IMAGE_CACHE=$DATA_DIR/diskimage-builder/image-create DIB_IMAGE_CACHE=$DATA_DIR/diskimage-builder/image-create
DIB_PIP_REPO=$DATA_DIR/diskimage-builder/pip-repo DIB_PIP_REPO=$DATA_DIR/diskimage-builder/pip-repo
DIB_PIP_REPO_PORT=${DIB_PIP_REPO_PORT:-8899} DIB_PIP_REPO_PORT=${DIB_PIP_REPO_PORT:-8899}

View File

@ -37,13 +37,13 @@ HEAT_DIR=$DEST/heat
HEAT_CFNTOOLS_DIR=$DEST/heat-cfntools HEAT_CFNTOOLS_DIR=$DEST/heat-cfntools
HEAT_TEMPLATES_REPO_DIR=$DEST/heat-templates HEAT_TEMPLATES_REPO_DIR=$DEST/heat-templates
HEAT_AUTH_CACHE_DIR=${HEAT_AUTH_CACHE_DIR:-/var/cache/heat} HEAT_AUTH_CACHE_DIR=${HEAT_AUTH_CACHE_DIR:-/var/cache/heat}
HEAT_STANDALONE=`trueorfalse False $HEAT_STANDALONE` HEAT_STANDALONE=$(trueorfalse False HEAT_STANDALONE)
HEAT_ENABLE_ADOPT_ABANDON=`trueorfalse False $HEAT_ENABLE_ADOPT_ABANDON` HEAT_ENABLE_ADOPT_ABANDON=$(trueorfalse False HEAT_ENABLE_ADOPT_ABANDON)
HEAT_CONF_DIR=/etc/heat HEAT_CONF_DIR=/etc/heat
HEAT_CONF=$HEAT_CONF_DIR/heat.conf HEAT_CONF=$HEAT_CONF_DIR/heat.conf
HEAT_ENV_DIR=$HEAT_CONF_DIR/environment.d HEAT_ENV_DIR=$HEAT_CONF_DIR/environment.d
HEAT_TEMPLATES_DIR=$HEAT_CONF_DIR/templates HEAT_TEMPLATES_DIR=$HEAT_CONF_DIR/templates
HEAT_STACK_DOMAIN=`trueorfalse True $HEAT_STACK_DOMAIN` HEAT_STACK_DOMAIN=$(trueorfalse True HEAT_STACK_DOMAIN)
HEAT_API_HOST=${HEAT_API_HOST:-$HOST_IP} HEAT_API_HOST=${HEAT_API_HOST:-$HOST_IP}
HEAT_API_PORT=${HEAT_API_PORT:-8004} HEAT_API_PORT=${HEAT_API_PORT:-8004}

View File

@ -173,7 +173,7 @@ function install_horizon {
# Apache installation, because we mark it NOPRIME # Apache installation, because we mark it NOPRIME
install_apache_wsgi install_apache_wsgi
git_clone $HORIZON_REPO $HORIZON_DIR $HORIZON_BRANCH $HORIZON_TAG git_clone $HORIZON_REPO $HORIZON_DIR $HORIZON_BRANCH
} }
# start_horizon() - Start running processes, including screen # start_horizon() - Start running processes, including screen

View File

@ -57,7 +57,7 @@ IRONIC_IPMIINFO_FILE=${IRONIC_IPMIINFO_FILE:-$IRONIC_DATA_DIR/hardware_info}
# Set up defaults for functional / integration testing # Set up defaults for functional / integration testing
IRONIC_SCRIPTS_DIR=${IRONIC_SCRIPTS_DIR:-$TOP_DIR/tools/ironic/scripts} IRONIC_SCRIPTS_DIR=${IRONIC_SCRIPTS_DIR:-$TOP_DIR/tools/ironic/scripts}
IRONIC_TEMPLATES_DIR=${IRONIC_TEMPLATES_DIR:-$TOP_DIR/tools/ironic/templates} IRONIC_TEMPLATES_DIR=${IRONIC_TEMPLATES_DIR:-$TOP_DIR/tools/ironic/templates}
IRONIC_BAREMETAL_BASIC_OPS=$(trueorfalse False $IRONIC_BAREMETAL_BASIC_OPS) IRONIC_BAREMETAL_BASIC_OPS=$(trueorfalse False IRONIC_BAREMETAL_BASIC_OPS)
IRONIC_ENABLED_DRIVERS=${IRONIC_ENABLED_DRIVERS:-fake,pxe_ssh,pxe_ipmitool} IRONIC_ENABLED_DRIVERS=${IRONIC_ENABLED_DRIVERS:-fake,pxe_ssh,pxe_ipmitool}
IRONIC_SSH_USERNAME=${IRONIC_SSH_USERNAME:-`whoami`} IRONIC_SSH_USERNAME=${IRONIC_SSH_USERNAME:-`whoami`}
IRONIC_SSH_KEY_DIR=${IRONIC_SSH_KEY_DIR:-$IRONIC_DATA_DIR/ssh_keys} IRONIC_SSH_KEY_DIR=${IRONIC_SSH_KEY_DIR:-$IRONIC_DATA_DIR/ssh_keys}
@ -84,7 +84,7 @@ IRONIC_VM_LOG_CONSOLE=${IRONIC_VM_LOG_CONSOLE:-True}
IRONIC_VM_LOG_DIR=${IRONIC_VM_LOG_DIR:-$IRONIC_DATA_DIR/logs/} IRONIC_VM_LOG_DIR=${IRONIC_VM_LOG_DIR:-$IRONIC_DATA_DIR/logs/}
# Use DIB to create deploy ramdisk and kernel. # Use DIB to create deploy ramdisk and kernel.
IRONIC_BUILD_DEPLOY_RAMDISK=`trueorfalse True $IRONIC_BUILD_DEPLOY_RAMDISK` IRONIC_BUILD_DEPLOY_RAMDISK=$(trueorfalse True IRONIC_BUILD_DEPLOY_RAMDISK)
# If not use DIB, these files are used as deploy ramdisk/kernel. # If not use DIB, these files are used as deploy ramdisk/kernel.
# (The value must be a absolute path) # (The value must be a absolute path)
IRONIC_DEPLOY_RAMDISK=${IRONIC_DEPLOY_RAMDISK:-} IRONIC_DEPLOY_RAMDISK=${IRONIC_DEPLOY_RAMDISK:-}
@ -113,7 +113,7 @@ IRONIC_HOSTPORT=${IRONIC_HOSTPORT:-$SERVICE_HOST:$IRONIC_SERVICE_PORT}
TEMPEST_SERVICES+=,ironic TEMPEST_SERVICES+=,ironic
# Enable iPXE # Enable iPXE
IRONIC_IPXE_ENABLED=$(trueorfalse False $IRONIC_IPXE_ENABLED) IRONIC_IPXE_ENABLED=$(trueorfalse False IRONIC_IPXE_ENABLED)
IRONIC_HTTP_DIR=${IRONIC_HTTP_DIR:-$IRONIC_DATA_DIR/httpboot} IRONIC_HTTP_DIR=${IRONIC_HTTP_DIR:-$IRONIC_DATA_DIR/httpboot}
IRONIC_HTTP_SERVER=${IRONIC_HTTP_SERVER:-$HOST_IP} IRONIC_HTTP_SERVER=${IRONIC_HTTP_SERVER:-$HOST_IP}
IRONIC_HTTP_PORT=${IRONIC_HTTP_PORT:-8088} IRONIC_HTTP_PORT=${IRONIC_HTTP_PORT:-8088}

View File

@ -71,6 +71,7 @@ KEYSTONE_ASSIGNMENT_BACKEND=${KEYSTONE_ASSIGNMENT_BACKEND:-sql}
# Select Keystone's token format # Select Keystone's token format
# Choose from 'UUID', 'PKI', or 'PKIZ' # Choose from 'UUID', 'PKI', or 'PKIZ'
KEYSTONE_TOKEN_FORMAT=${KEYSTONE_TOKEN_FORMAT:-}
KEYSTONE_TOKEN_FORMAT=$(echo ${KEYSTONE_TOKEN_FORMAT} | tr '[:upper:]' '[:lower:]') KEYSTONE_TOKEN_FORMAT=$(echo ${KEYSTONE_TOKEN_FORMAT} | tr '[:upper:]' '[:lower:]')
# Set Keystone interface configuration # Set Keystone interface configuration

View File

@ -106,7 +106,7 @@ GUEST_INTERFACE_DEFAULT=$(ip link \
# $NOVA_VNC_ENABLED can be used to forcibly enable vnc configuration. # $NOVA_VNC_ENABLED can be used to forcibly enable vnc configuration.
# In multi-node setups allows compute hosts to not run n-novnc. # In multi-node setups allows compute hosts to not run n-novnc.
NOVA_VNC_ENABLED=$(trueorfalse False $NOVA_VNC_ENABLED) NOVA_VNC_ENABLED=$(trueorfalse False NOVA_VNC_ENABLED)
# Get hypervisor configuration # Get hypervisor configuration
# ---------------------------- # ----------------------------
@ -145,11 +145,11 @@ FLAT_INTERFACE=${FLAT_INTERFACE:-$GUEST_INTERFACE_DEFAULT}
# ``MULTI_HOST`` is a mode where each compute node runs its own network node. This # ``MULTI_HOST`` is a mode where each compute node runs its own network node. This
# allows network operations and routing for a VM to occur on the server that is # allows network operations and routing for a VM to occur on the server that is
# running the VM - removing a SPOF and bandwidth bottleneck. # running the VM - removing a SPOF and bandwidth bottleneck.
MULTI_HOST=`trueorfalse False $MULTI_HOST` MULTI_HOST=$(trueorfalse False MULTI_HOST)
# ``NOVA_ALLOW_MOVE_TO_SAME_HOST` can be set to False in multi node devstack, # ``NOVA_ALLOW_MOVE_TO_SAME_HOST` can be set to False in multi node devstack,
# where there are at least two nova-computes. # where there are at least two nova-computes.
NOVA_ALLOW_MOVE_TO_SAME_HOST=`trueorfalse True $NOVA_ALLOW_MOVE_TO_SAME_HOST` NOVA_ALLOW_MOVE_TO_SAME_HOST=$(trueorfalse True NOVA_ALLOW_MOVE_TO_SAME_HOST)
# Test floating pool and range are used for testing. They are defined # Test floating pool and range are used for testing. They are defined
# here until the admin APIs can replace nova-manage # here until the admin APIs can replace nova-manage
@ -657,7 +657,7 @@ function install_nova {
if is_service_enabled n-novnc; then if is_service_enabled n-novnc; then
# a websockets/html5 or flash powered VNC console for vm instances # a websockets/html5 or flash powered VNC console for vm instances
NOVNC_FROM_PACKAGE=`trueorfalse False $NOVNC_FROM_PACKAGE` NOVNC_FROM_PACKAGE=$(trueorfalse False NOVNC_FROM_PACKAGE)
if [ "$NOVNC_FROM_PACKAGE" = "True" ]; then if [ "$NOVNC_FROM_PACKAGE" = "True" ]; then
NOVNC_WEB_DIR=/usr/share/novnc NOVNC_WEB_DIR=/usr/share/novnc
install_package novnc install_package novnc
@ -669,7 +669,7 @@ function install_nova {
if is_service_enabled n-spice; then if is_service_enabled n-spice; then
# a websockets/html5 or flash powered SPICE console for vm instances # a websockets/html5 or flash powered SPICE console for vm instances
SPICE_FROM_PACKAGE=`trueorfalse True $SPICE_FROM_PACKAGE` SPICE_FROM_PACKAGE=$(trueorfalse True SPICE_FROM_PACKAGE)
if [ "$SPICE_FROM_PACKAGE" = "True" ]; then if [ "$SPICE_FROM_PACKAGE" = "True" ]; then
SPICE_WEB_DIR=/usr/share/spice-html5 SPICE_WEB_DIR=/usr/share/spice-html5
install_package spice-html5 install_package spice-html5

View File

@ -15,7 +15,7 @@ set +o xtrace
# -------- # --------
# if we should turn on massive libvirt debugging # if we should turn on massive libvirt debugging
DEBUG_LIBVIRT=$(trueorfalse False $DEBUG_LIBVIRT) DEBUG_LIBVIRT=$(trueorfalse False DEBUG_LIBVIRT)
# Installs required distro-specific libvirt packages. # Installs required distro-specific libvirt packages.
function install_libvirt { function install_libvirt {

View File

@ -54,7 +54,7 @@ function configure_nova_hypervisor {
iniset $NOVA_CONF DEFAULT vnc_enabled "false" iniset $NOVA_CONF DEFAULT vnc_enabled "false"
fi fi
ENABLE_FILE_INJECTION=$(trueorfalse False $ENABLE_FILE_INJECTION) ENABLE_FILE_INJECTION=$(trueorfalse False ENABLE_FILE_INJECTION)
if [[ "$ENABLE_FILE_INJECTION" = "True" ]] ; then if [[ "$ENABLE_FILE_INJECTION" = "True" ]] ; then
# When libguestfs is available for file injection, enable using # When libguestfs is available for file injection, enable using
# libguestfs to inspect the image and figure out the proper # libguestfs to inspect the image and figure out the proper

View File

@ -21,6 +21,11 @@
XTRACE=$(set +o | grep xtrace) XTRACE=$(set +o | grep xtrace)
set +o xtrace set +o xtrace
RPC_MESSAGING_PROTOCOL=${RPC_MESSAGING_PROTOCOL:-0.9}
# TODO(sdague): RPC backend selection is super wonky because we treat
# messaging server as a service, which it really isn't for multi host
QPID_HOST=${QPID_HOST:-}
# Functions # Functions
# --------- # ---------
@ -68,9 +73,6 @@ function check_rpc_backend {
function cleanup_rpc_backend { function cleanup_rpc_backend {
if is_service_enabled rabbit; then if is_service_enabled rabbit; then
# Obliterate rabbitmq-server # Obliterate rabbitmq-server
if [ -n "$RABBIT_USERID" ]; then
sudo rabbitmqctl delete_user "$RABBIT_USERID"
fi
uninstall_package rabbitmq-server uninstall_package rabbitmq-server
sudo killall epmd || sudo killall -9 epmd sudo killall epmd || sudo killall -9 epmd
if is_ubuntu; then if is_ubuntu; then

View File

@ -82,7 +82,7 @@ SWIFT_EXTRAS_MIDDLEWARE=${SWIFT_EXTRAS_MIDDLEWARE:-formpost staticweb}
# Set ``SWIFT_EXTRAS_MIDDLEWARE_LAST`` to extras middlewares that need to be at # Set ``SWIFT_EXTRAS_MIDDLEWARE_LAST`` to extras middlewares that need to be at
# the end of the pipeline. # the end of the pipeline.
SWIFT_EXTRAS_MIDDLEWARE_LAST=${SWIFT_EXTRAS_MIDDLEWARE_LAST} SWIFT_EXTRAS_MIDDLEWARE_LAST=${SWIFT_EXTRAS_MIDDLEWARE_LAST:-}
# Set ``SWIFT_EXTRAS_MIDDLEWARE_NO_AUTH`` to extras middlewares that need to be at # Set ``SWIFT_EXTRAS_MIDDLEWARE_NO_AUTH`` to extras middlewares that need to be at
# the beginning of the pipeline, before authentication middlewares. # the beginning of the pipeline, before authentication middlewares.
@ -127,7 +127,7 @@ ACCOUNT_PORT_BASE=${ACCOUNT_PORT_BASE:-6012}
# Enable tempurl feature # Enable tempurl feature
SWIFT_ENABLE_TEMPURLS=${SWIFT_ENABLE_TEMPURLS:-False} SWIFT_ENABLE_TEMPURLS=${SWIFT_ENABLE_TEMPURLS:-False}
SWIFT_TEMPURL_KEY=${SWIFT_TEMPURL_KEY} SWIFT_TEMPURL_KEY=${SWIFT_TEMPURL_KEY:-}
# Tell Tempest this project is present # Tell Tempest this project is present
TEMPEST_SERVICES+=,swift TEMPEST_SERVICES+=,swift

View File

@ -75,8 +75,8 @@ TEMPEST_DEFAULT_STORAGE_PROTOCOL="iSCSI"
TEMPEST_STORAGE_PROTOCOL=${TEMPEST_STORAGE_PROTOCOL:-$TEMPEST_DEFAULT_STORAGE_PROTOCOL} TEMPEST_STORAGE_PROTOCOL=${TEMPEST_STORAGE_PROTOCOL:-$TEMPEST_DEFAULT_STORAGE_PROTOCOL}
# Neutron/Network variables # Neutron/Network variables
IPV6_ENABLED=$(trueorfalse True $IPV6_ENABLED) IPV6_ENABLED=$(trueorfalse True IPV6_ENABLED)
IPV6_SUBNET_ATTRIBUTES_ENABLED=$(trueorfalse True $IPV6_SUBNET_ATTRIBUTES_ENABLED) IPV6_SUBNET_ATTRIBUTES_ENABLED=$(trueorfalse True IPV6_SUBNET_ATTRIBUTES_ENABLED)
# Functions # Functions
# --------- # ---------

View File

@ -40,6 +40,12 @@ PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin
# Keep track of the devstack directory # Keep track of the devstack directory
TOP_DIR=$(cd $(dirname "$0") && pwd) TOP_DIR=$(cd $(dirname "$0") && pwd)
# Check for uninitialized variables, a big cause of bugs
NOUNSET=${NOUNSET:-}
if [[ -n "$NOUNSET" ]]; then
set -o nounset
fi
# Sanity Checks # Sanity Checks
# ------------- # -------------
@ -79,6 +85,9 @@ fi
# Prepare the environment # Prepare the environment
# ----------------------- # -----------------------
# Initialize variables:
LAST_SPINNER_PID=""
# Import common functions # Import common functions
source $TOP_DIR/functions source $TOP_DIR/functions
@ -172,12 +181,12 @@ export_proxy_variables
disable_negated_services disable_negated_services
# Look for obsolete stuff # Look for obsolete stuff
if [[ ,${ENABLED_SERVICES}, =~ ,"swift", ]]; then # if [[ ,${ENABLED_SERVICES}, =~ ,"swift", ]]; then
echo "FATAL: 'swift' is not supported as a service name" # echo "FATAL: 'swift' is not supported as a service name"
echo "FATAL: Use the actual swift service names to enable them as required:" # echo "FATAL: Use the actual swift service names to enable them as required:"
echo "FATAL: s-proxy s-object s-container s-account" # echo "FATAL: s-proxy s-object s-container s-account"
exit 1 # exit 1
fi # fi
# Configure sudo # Configure sudo
# -------------- # --------------
@ -311,7 +320,7 @@ fi
# ----------------- # -----------------
# Set up logging level # Set up logging level
VERBOSE=$(trueorfalse True $VERBOSE) VERBOSE=$(trueorfalse True VERBOSE)
# Draw a spinner so the user knows something is happening # Draw a spinner so the user knows something is happening
function spinner { function spinner {
@ -482,47 +491,6 @@ set -o errexit
# an error. It is also useful for following along as the install occurs. # an error. It is also useful for following along as the install occurs.
set -o xtrace set -o xtrace
# Common Configuration
# --------------------
# Set ``OFFLINE`` to ``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 fetch repositories.
OFFLINE=`trueorfalse False $OFFLINE`
# Set ``ERROR_ON_CLONE`` to ``True`` to configure ``stack.sh`` to exit if
# the destination git repository does not exist during the ``git_clone``
# operation.
ERROR_ON_CLONE=`trueorfalse False $ERROR_ON_CLONE`
# Whether to enable the debug log level in OpenStack services
ENABLE_DEBUG_LOG_LEVEL=`trueorfalse True $ENABLE_DEBUG_LOG_LEVEL`
# Set fixed and floating range here so we can make sure not to use addresses
# from either range when attempting to guess the IP to use for the host.
# Note that setting FIXED_RANGE may be necessary when running DevStack
# in an OpenStack cloud that uses either of these address ranges internally.
FLOATING_RANGE=${FLOATING_RANGE:-172.24.4.0/24}
FIXED_RANGE=${FIXED_RANGE:-10.0.0.0/24}
FIXED_NETWORK_SIZE=${FIXED_NETWORK_SIZE:-256}
HOST_IP=$(get_default_host_ip $FIXED_RANGE $FLOATING_RANGE "$HOST_IP_IFACE" "$HOST_IP")
if [ "$HOST_IP" == "" ]; then
die $LINENO "Could not determine host ip address. See local.conf for suggestions on setting HOST_IP."
fi
# Allow the use of an alternate hostname (such as localhost/127.0.0.1) for service endpoints.
SERVICE_HOST=${SERVICE_HOST:-$HOST_IP}
# Configure services to use syslog instead of writing to individual log files
SYSLOG=`trueorfalse False $SYSLOG`
SYSLOG_HOST=${SYSLOG_HOST:-$HOST_IP}
SYSLOG_PORT=${SYSLOG_PORT:-516}
# Use color for logging output (only available if syslog is not used)
LOG_COLOR=`trueorfalse True $LOG_COLOR`
# Reset the bundle of CA certificates # Reset the bundle of CA certificates
SSL_BUNDLE_FILE="$DATA_DIR/ca-bundle.pem" SSL_BUNDLE_FILE="$DATA_DIR/ca-bundle.pem"
rm -f $SSL_BUNDLE_FILE rm -f $SSL_BUNDLE_FILE
@ -535,9 +503,6 @@ source $TOP_DIR/lib/rpc_backend
# and the specified rpc backend is available on your platform. # and the specified rpc backend is available on your platform.
check_rpc_backend check_rpc_backend
# Use native SSL for servers in SSL_ENABLED_SERVICES
USE_SSL=$(trueorfalse False $USE_SSL)
# Service to enable with SSL if USE_SSL is True # Service to enable with SSL if USE_SSL is True
SSL_ENABLED_SERVICES="key,nova,cinder,glance,s-proxy,neutron" SSL_ENABLED_SERVICES="key,nova,cinder,glance,s-proxy,neutron"
@ -708,7 +673,7 @@ source $TOP_DIR/tools/install_prereqs.sh
# Configure an appropriate python environment # Configure an appropriate python environment
if [[ "$OFFLINE" != "True" ]]; then if [[ "$OFFLINE" != "True" ]]; then
PYPI_ALTERNATIVE_URL=$PYPI_ALTERNATIVE_URL $TOP_DIR/tools/install_pip.sh PYPI_ALTERNATIVE_URL=${PYPI_ALTERNATIVE_URL:-""} $TOP_DIR/tools/install_pip.sh
fi fi
# Do the ugly hacks for broken packages and distros # Do the ugly hacks for broken packages and distros
@ -944,13 +909,14 @@ fi
# Configure screen # Configure screen
# ---------------- # ----------------
USE_SCREEN=$(trueorfalse True $USE_SCREEN) USE_SCREEN=$(trueorfalse True USE_SCREEN)
if [[ "$USE_SCREEN" == "True" ]]; then if [[ "$USE_SCREEN" == "True" ]]; then
# Create a new named screen to run processes in # Create a new named screen to run processes in
screen -d -m -S $SCREEN_NAME -t shell -s /bin/bash screen -d -m -S $SCREEN_NAME -t shell -s /bin/bash
sleep 1 sleep 1
# Set a reasonable status bar # Set a reasonable status bar
SCREEN_HARDSTATUS=${SCREEN_HARDSTATUS-:}
if [ -z "$SCREEN_HARDSTATUS" ]; then if [ -z "$SCREEN_HARDSTATUS" ]; then
SCREEN_HARDSTATUS='%{= .} %-Lw%{= .}%> %n%f %t*%{= .}%+Lw%< %-=%{g}(%{d}%H/%l%{g})' SCREEN_HARDSTATUS='%{= .} %-Lw%{= .}%> %n%f %t*%{= .}%+Lw%< %-=%{g}(%{d}%H/%l%{g})'
fi fi

62
stackrc
View File

@ -43,9 +43,17 @@ REGION_NAME=${REGION_NAME:-RegionOne}
# enable_service q-meta # enable_service q-meta
# # Optional, to enable tempest configuration as part of devstack # # Optional, to enable tempest configuration as part of devstack
# enable_service tempest # enable_service tempest
function isset {
local nounset=$(set +o | grep nounset)
set +o nounset
[[ -n "${!1+x}" ]]
result=$?
$nounset
return $result
}
# this allows us to pass ENABLED_SERVICES # this allows us to pass ENABLED_SERVICES
if [[ -z "$ENABLED_SERVICES" ]]; then if ! isset ENABLED_SERVICES ; then
# core compute (glance / keystone / nova (+ nova-network)) # core compute (glance / keystone / nova (+ nova-network))
ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-net,n-cond,n-sch,n-xvnc,n-cauth ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-net,n-cond,n-sch,n-xvnc,n-cauth
# cinder # cinder
@ -106,7 +114,7 @@ fi
# This can be used to turn database query logging on and off # This can be used to turn database query logging on and off
# (currently only implemented for MySQL backend) # (currently only implemented for MySQL backend)
DATABASE_QUERY_LOGGING=$(trueorfalse True $DATABASE_QUERY_LOGGING) DATABASE_QUERY_LOGGING=$(trueorfalse True DATABASE_QUERY_LOGGING)
# Set a timeout for git operations. If git is still running when the # Set a timeout for git operations. If git is still running when the
# timeout expires, the command will be retried up to 3 times. This is # timeout expires, the command will be retried up to 3 times. This is
@ -593,7 +601,7 @@ fi
# Staging Area for New Images, have them here for at least 24hrs for nodepool # Staging Area for New Images, have them here for at least 24hrs for nodepool
# to cache them otherwise the failure rates in the gate are too high # to cache them otherwise the failure rates in the gate are too high
PRECACHE_IMAGES=$(trueorfalse False $PRECACHE_IMAGES) PRECACHE_IMAGES=$(trueorfalse False PRECACHE_IMAGES)
if [[ "$PRECACHE_IMAGES" == "True" ]]; then if [[ "$PRECACHE_IMAGES" == "True" ]]; then
# staging in update for nodepool # staging in update for nodepool
IMAGE_URL="https://download.fedoraproject.org/pub/alt/openstack/20/x86_64/Fedora-x86_64-20-20140618-sda.qcow2" IMAGE_URL="https://download.fedoraproject.org/pub/alt/openstack/20/x86_64/Fedora-x86_64-20-20140618-sda.qcow2"
@ -646,6 +654,54 @@ SERVICE_TIMEOUT=${SERVICE_TIMEOUT:-60}
# till we get to the point we need to handle this automatically # till we get to the point we need to handle this automatically
YUM=${YUM:-yum} YUM=${YUM:-yum}
# Common Configuration
# --------------------
# Set ``OFFLINE`` to ``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 fetch repositories.
OFFLINE=$(trueorfalse False OFFLINE)
# Set ``ERROR_ON_CLONE`` to ``True`` to configure ``stack.sh`` to exit if
# the destination git repository does not exist during the ``git_clone``
# operation.
ERROR_ON_CLONE=$(trueorfalse False ERROR_ON_CLONE)
# Whether to enable the debug log level in OpenStack services
ENABLE_DEBUG_LOG_LEVEL=$(trueorfalse True ENABLE_DEBUG_LOG_LEVEL)
# Set fixed and floating range here so we can make sure not to use addresses
# from either range when attempting to guess the IP to use for the host.
# Note that setting FIXED_RANGE may be necessary when running DevStack
# in an OpenStack cloud that uses either of these address ranges internally.
FLOATING_RANGE=${FLOATING_RANGE:-172.24.4.0/24}
FIXED_RANGE=${FIXED_RANGE:-10.0.0.0/24}
FIXED_NETWORK_SIZE=${FIXED_NETWORK_SIZE:-256}
HOST_IP_IFACE=${HOST_IP_IFACE:-}
HOST_IP=${HOST_IP:-}
HOST_IP=$(get_default_host_ip $FIXED_RANGE $FLOATING_RANGE "$HOST_IP_IFACE" "$HOST_IP")
if [ "$HOST_IP" == "" ]; then
die $LINENO "Could not determine host ip address. See local.conf for suggestions on setting HOST_IP."
fi
# Allow the use of an alternate hostname (such as localhost/127.0.0.1) for service endpoints.
SERVICE_HOST=${SERVICE_HOST:-$HOST_IP}
# Configure services to use syslog instead of writing to individual log files
SYSLOG=$(trueorfalse False SYSLOG)
SYSLOG_HOST=${SYSLOG_HOST:-$HOST_IP}
SYSLOG_PORT=${SYSLOG_PORT:-516}
# Use color for logging output (only available if syslog is not used)
LOG_COLOR=$(trueorfalse True LOG_COLOR)
# Set global ``GIT_DEPTH=<number>`` to limit the history depth of the git clone
GIT_DEPTH=${GIT_DEPTH:-1}
# Use native SSL for servers in SSL_ENABLED_SERVICES
USE_SSL=$(trueorfalse False USE_SSL)
# Following entries need to be last items in file # Following entries need to be last items in file
# Local variables: # Local variables:

34
tests/test_functions.sh Executable file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env bash
# Tests for DevStack meta-config functions
TOP=$(cd $(dirname "$0")/.. && pwd)
# Import common functions
source $TOP/functions
source $TOP/tests/unittest.sh
function test_truefalse {
local one=1
local captrue=True
local lowtrue=true
local abrevtrue=t
local zero=0
local capfalse=False
local lowfalse=false
local abrevfalse=f
for against in True False; do
for name in one captrue lowtrue abrevtrue; do
assert_equal "True" $(trueorfalse $against $name) "\$(trueorfalse $against $name)"
done
done
for against in True False; do
for name in zero capfalse lowfalse abrevfalse; do
assert_equal "False" $(trueorfalse $against $name) "\$(trueorfalse $against $name)"
done
done
}
test_truefalse
report_results

39
tests/unittest.sh Normal file
View File

@ -0,0 +1,39 @@
#!/usr/bin/env bash
# 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.
# we always start with no errors
ERROR=0
FAILED_FUNCS=""
function assert_equal {
local lineno=`caller 0 | awk '{print $1}'`
local function=`caller 0 | awk '{print $2}'`
local msg=$3
if [[ "$1" != "$2" ]]; then
FAILED_FUNCS+="$function:L$lineno\n"
echo "ERROR: $1 != $2 in $function:L$lineno!"
echo " $msg"
ERROR=1
else
echo "$function:L$lineno - ok"
fi
}
function report_results {
if [[ $ERROR -eq 1 ]]; then
echo "Tests FAILED"
echo $FAILED_FUNCS
exit 1
fi
}

View File

@ -8,9 +8,15 @@
# #
# -f Force an install run now # -f Force an install run now
if [[ -n "$1" && "$1" = "-f" ]]; then FORCE_PREREQ=0
while getopts ":f" opt; do
case $opt in
f)
FORCE_PREREQ=1 FORCE_PREREQ=1
fi ;;
esac
done
# If TOP_DIR is set we're being sourced rather than running stand-alone # If TOP_DIR is set we're being sourced rather than running stand-alone
# or in a sub-shell # or in a sub-shell

View File

@ -6,11 +6,22 @@
# mysql and rabbit are left running as OpenStack code refreshes # mysql and rabbit are left running as OpenStack code refreshes
# do not require them to be restarted. # do not require them to be restarted.
# #
# Stop all processes by setting ``UNSTACK_ALL`` or specifying ``--all`` # Stop all processes by setting ``UNSTACK_ALL`` or specifying ``-a``
# on the command line # on the command line
UNSTACK_ALL=""
while getopts ":a" opt; do
case $opt in
a)
UNSTACK_ALL=""
;;
esac
done
# Keep track of the current devstack directory. # Keep track of the current devstack directory.
TOP_DIR=$(cd $(dirname "$0") && pwd) TOP_DIR=$(cd $(dirname "$0") && pwd)
FILES=$TOP_DIR/files
# Import common functions # Import common functions
source $TOP_DIR/functions source $TOP_DIR/functions
@ -19,7 +30,7 @@ source $TOP_DIR/functions
source $TOP_DIR/lib/database source $TOP_DIR/lib/database
# Load local configuration # Load local configuration
source $TOP_DIR/stackrc source $TOP_DIR/openrc
# Destination path for service data # Destination path for service data
DATA_DIR=${DATA_DIR:-${DEST}/data} DATA_DIR=${DATA_DIR:-${DEST}/data}
@ -72,10 +83,6 @@ load_plugin_settings
# ``os_RELEASE``, ``os_UPDATE``, ``os_PACKAGE``, ``os_CODENAME`` # ``os_RELEASE``, ``os_UPDATE``, ``os_PACKAGE``, ``os_CODENAME``
GetOSVersion GetOSVersion
if [[ "$1" == "--all" ]]; then
UNSTACK_ALL=${UNSTACK_ALL:-1}
fi
# Run extras # Run extras
# ========== # ==========