Merge "Make changes such that -o nounset runs"

This commit is contained in:
Jenkins 2015-01-17 17:45:29 +00:00 committed by Gerrit Code Review
commit ca5b5485d9
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
@ -995,9 +1007,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 "$@"
} }
@ -1016,10 +1029,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"
@ -1129,6 +1142,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
@ -1338,7 +1355,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"
@ -1411,7 +1428,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
@ -1429,7 +1446,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
@ -1479,7 +1496,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
@ -1589,7 +1606,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
@ -1618,20 +1636,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
@ -2101,13 +2119,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

@ -60,7 +60,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}
@ -87,7 +87,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:-}
@ -116,7 +116,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
TRACK_DEPENDS=${TRACK_DEPENDS:-False} TRACK_DEPENDS=${TRACK_DEPENDS:-False}
@ -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
FORCE_PREREQ=1
fi while getopts ":f" opt; do
case $opt in
f)
FORCE_PREREQ=1
;;
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
# ========== # ==========