Merge "Update vsphere image filename pattern"
diff --git a/README.md b/README.md
index 93d1396..cb7752d 100644
--- a/README.md
+++ b/README.md
@@ -171,6 +171,7 @@
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
+ enable_service q-metering
enable_service neutron
# Optional, to enable tempest configuration as part of DevStack
enable_service tempest
diff --git a/files/apts/horizon b/files/apts/horizon
index 0865931..8969046 100644
--- a/files/apts/horizon
+++ b/files/apts/horizon
@@ -19,5 +19,3 @@
python-coverage
python-cherrypy3 # why?
python-migrate
-nodejs
-nodejs-legacy # dist:quantal
diff --git a/files/rpms-suse/horizon b/files/rpms-suse/horizon
index 73932ac..d3bde26 100644
--- a/files/rpms-suse/horizon
+++ b/files/rpms-suse/horizon
@@ -1,6 +1,5 @@
apache2 # NOPRIME
apache2-mod_wsgi # NOPRIME
-nodejs
python-CherryPy # why? (coming from apts)
python-Paste
python-PasteDeploy
diff --git a/files/rpms/horizon b/files/rpms/horizon
index 0ca18ca..aa27ab4 100644
--- a/files/rpms/horizon
+++ b/files/rpms/horizon
@@ -3,7 +3,6 @@
gcc
httpd # NOPRIME
mod_wsgi # NOPRIME
-nodejs # NOPRIME
pylint
python-anyjson
python-BeautifulSoup
diff --git a/functions b/functions
index d3de142..6137aaf 100644
--- a/functions
+++ b/functions
@@ -841,6 +841,7 @@
[[ ${service} == "cinder" && ${ENABLED_SERVICES} =~ "c-" ]] && return 0
[[ ${service} == "ceilometer" && ${ENABLED_SERVICES} =~ "ceilometer-" ]] && return 0
[[ ${service} == "glance" && ${ENABLED_SERVICES} =~ "g-" ]] && return 0
+ [[ ${service} == "ironic" && ${ENABLED_SERVICES} =~ "ir-" ]] && return 0
[[ ${service} == "neutron" && ${ENABLED_SERVICES} =~ "q-" ]] && return 0
[[ ${service} == "trove" && ${ENABLED_SERVICES} =~ "tr-" ]] && return 0
[[ ${service} == "swift" && ${ENABLED_SERVICES} =~ "s-" ]] && return 0
@@ -1250,7 +1251,11 @@
# ``pip install -e`` the package, which processes the dependencies
# using pip before running `setup.py develop`
-# Uses globals ``STACK_USER``, ``TRACK_DEPENDS``, ``REQUIREMENTS_DIR``
+#
+# Updates the dependencies in project_dir from the
+# openstack/requirements global list before installing anything.
+#
+# Uses globals ``TRACK_DEPENDS``, ``REQUIREMENTS_DIR``
# setup_develop directory
function setup_develop() {
local project_dir=$1
@@ -1266,9 +1271,7 @@
$SUDO_CMD python update.py $project_dir)
fi
- pip_install -e $project_dir
- # ensure that further actions can do things like setup.py sdist
- safe_chown -R $STACK_USER $1/*.egg-info
+ setup_develop_no_requirements_update $project_dir
# We've just gone and possibly modified the user's source tree in an
# automated way, which is considered bad form if it's a development
@@ -1285,6 +1288,18 @@
fi
}
+# ``pip install -e`` the package, which processes the dependencies
+# using pip before running `setup.py develop`
+# Uses globals ``STACK_USER``
+# setup_develop_no_requirements_update directory
+function setup_develop_no_requirements_update() {
+ local project_dir=$1
+
+ pip_install -e $project_dir
+ # ensure that further actions can do things like setup.py sdist
+ safe_chown -R $STACK_USER $1/*.egg-info
+}
+
# Service wrapper to start services
# start_service service-name
@@ -1337,11 +1352,24 @@
# Create a directory for the downloaded image tarballs.
mkdir -p $FILES/images
- # Downloads the image (uec ami+aki style), then extracts it.
- IMAGE_FNAME=`basename "$image_url"`
- if [[ ! -f $FILES/$IMAGE_FNAME || "$(stat -c "%s" $FILES/$IMAGE_FNAME)" = "0" ]]; then
- wget -c $image_url -O $FILES/$IMAGE_FNAME
- if [[ $? -ne 0 ]]; then
+ if [[ $image_url != file* ]]; then
+ # Downloads the image (uec ami+aki style), then extracts it.
+ IMAGE_FNAME=`basename "$image_url"`
+ if [[ ! -f $FILES/$IMAGE_FNAME || "$(stat -c "%s" $FILES/$IMAGE_FNAME)" = "0" ]]; then
+ wget -c $image_url -O $FILES/$IMAGE_FNAME
+ if [[ $? -ne 0 ]]; then
+ echo "Not found: $image_url"
+ return
+ fi
+ fi
+ IMAGE="$FILES/${IMAGE_FNAME}"
+ else
+ # File based URL (RFC 1738): file://host/path
+ # Remote files are not considered here.
+ # *nix: file:///home/user/path/file
+ # windows: file:///C:/Documents%20and%20Settings/user/path/file
+ IMAGE=$(echo $image_url | sed "s/^file:\/\///g")
+ if [[ ! -f $IMAGE || "$(stat -c "%s" $IMAGE)" == "0" ]]; then
echo "Not found: $image_url"
return
fi
@@ -1349,7 +1377,6 @@
# OpenVZ-format images are provided as .tar.gz, but not decompressed prior to loading
if [[ "$image_url" =~ 'openvz' ]]; then
- IMAGE="$FILES/${IMAGE_FNAME}"
IMAGE_NAME="${IMAGE_FNAME%.tar.gz}"
glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "$IMAGE_NAME" --is-public=True --container-format ami --disk-format ami < "${IMAGE}"
return
@@ -1357,7 +1384,6 @@
# vmdk format images
if [[ "$image_url" =~ '.vmdk' ]]; then
- IMAGE="$FILES/${IMAGE_FNAME}"
IMAGE_NAME="${IMAGE_FNAME%.vmdk}"
# Before we can upload vmdk type images to glance, we need to know it's
@@ -1410,7 +1436,6 @@
# XenServer-vhd-ovf-format images are provided as .vhd.tgz
# and should not be decompressed prior to loading
if [[ "$image_url" =~ '.vhd.tgz' ]]; then
- IMAGE="$FILES/${IMAGE_FNAME}"
IMAGE_NAME="${IMAGE_FNAME%.vhd.tgz}"
glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "$IMAGE_NAME" --is-public=True --container-format=ovf --disk-format=vhd < "${IMAGE}"
return
@@ -1420,7 +1445,6 @@
# and should not be decompressed prior to loading.
# Setting metadata, so PV mode is used.
if [[ "$image_url" =~ '.xen-raw.tgz' ]]; then
- IMAGE="$FILES/${IMAGE_FNAME}"
IMAGE_NAME="${IMAGE_FNAME%.xen-raw.tgz}"
glance \
--os-auth-token $token \
@@ -1458,7 +1482,6 @@
fi
;;
*.img)
- IMAGE="$FILES/$IMAGE_FNAME";
IMAGE_NAME=$(basename "$IMAGE" ".img")
format=$(qemu-img info ${IMAGE} | awk '/^file format/ { print $3; exit }')
if [[ ",qcow2,raw,vdi,vmdk,vpc," =~ ",$format," ]]; then
@@ -1469,20 +1492,17 @@
CONTAINER_FORMAT=bare
;;
*.img.gz)
- IMAGE="$FILES/${IMAGE_FNAME}"
IMAGE_NAME=$(basename "$IMAGE" ".img.gz")
DISK_FORMAT=raw
CONTAINER_FORMAT=bare
UNPACK=zcat
;;
*.qcow2)
- IMAGE="$FILES/${IMAGE_FNAME}"
IMAGE_NAME=$(basename "$IMAGE" ".qcow2")
DISK_FORMAT=qcow2
CONTAINER_FORMAT=bare
;;
*.iso)
- IMAGE="$FILES/${IMAGE_FNAME}"
IMAGE_NAME=$(basename "$IMAGE" ".iso")
DISK_FORMAT=iso
CONTAINER_FORMAT=bare
diff --git a/lib/apache b/lib/apache
index 41d6fcc..8ae78b2 100644
--- a/lib/apache
+++ b/lib/apache
@@ -4,6 +4,10 @@
# Dependencies:
#
# - ``functions`` file
+# -``STACK_USER`` must be defined
+
+# lib/apache exports the following functions:
+#
# - is_apache_enabled_service
# - install_apache_wsgi
# - config_apache_wsgi
@@ -19,7 +23,7 @@
# Allow overriding the default Apache user and group, default to
# current user and his default group.
-APACHE_USER=${APACHE_USER:-$USER}
+APACHE_USER=${APACHE_USER:-$STACK_USER}
APACHE_GROUP=${APACHE_GROUP:-$(id -gn $APACHE_USER)}
diff --git a/lib/ceilometer b/lib/ceilometer
index dcadb07..8e2970c 100644
--- a/lib/ceilometer
+++ b/lib/ceilometer
@@ -67,10 +67,10 @@
setup_develop $CEILOMETER_DIR
[ ! -d $CEILOMETER_CONF_DIR ] && sudo mkdir -m 755 -p $CEILOMETER_CONF_DIR
- sudo chown $USER $CEILOMETER_CONF_DIR
+ sudo chown $STACK_USER $CEILOMETER_CONF_DIR
[ ! -d $CEILOMETER_API_LOG_DIR ] && sudo mkdir -m 755 -p $CEILOMETER_API_LOG_DIR
- sudo chown $USER $CEILOMETER_API_LOG_DIR
+ sudo chown $STACK_USER $CEILOMETER_API_LOG_DIR
iniset_rpc_backend ceilometer $CEILOMETER_CONF DEFAULT
@@ -82,6 +82,10 @@
cp $CEILOMETER_DIR/etc/ceilometer/pipeline.yaml $CEILOMETER_CONF_DIR
iniset $CEILOMETER_CONF DEFAULT policy_file $CEILOMETER_CONF_DIR/policy.json
+ if [ "$CEILOMETER_PIPELINE_INTERVAL" ]; then
+ sed -i "s/interval:.*/interval: ${CEILOMETER_PIPELINE_INTERVAL}/" $CEILOMETER_CONF_DIR/pipeline.yaml
+ fi
+
# the compute and central agents need these credentials in order to
# call out to the public nova and glance APIs
iniset $CEILOMETER_CONF DEFAULT os_username ceilometer
diff --git a/lib/cinder b/lib/cinder
index 20d6e61..96d2505 100644
--- a/lib/cinder
+++ b/lib/cinder
@@ -199,7 +199,7 @@
fi
TEMPFILE=`mktemp`
- echo "$USER ALL=(root) NOPASSWD: $ROOTWRAP_CINDER_SUDOER_CMD" >$TEMPFILE
+ echo "$STACK_USER ALL=(root) NOPASSWD: $ROOTWRAP_CINDER_SUDOER_CMD" >$TEMPFILE
chmod 0440 $TEMPFILE
sudo chown root:root $TEMPFILE
sudo mv $TEMPFILE /etc/sudoers.d/cinder-rootwrap
diff --git a/lib/horizon b/lib/horizon
index 4cb2828..5bff712 100644
--- a/lib/horizon
+++ b/lib/horizon
@@ -153,15 +153,6 @@
# Apache installation, because we mark it NOPRIME
install_apache_wsgi
- # NOTE(sdague) quantal changed the name of the node binary
- if is_ubuntu; then
- if [[ ! -e "/usr/bin/node" ]]; then
- install_package nodejs-legacy
- fi
- elif is_fedora && [[ $DISTRO =~ (rhel6) || "$os_RELEASE" -ge "18" ]]; then
- install_package nodejs
- fi
-
git_clone $HORIZON_REPO $HORIZON_DIR $HORIZON_BRANCH $HORIZON_TAG
}
diff --git a/lib/neutron b/lib/neutron
index 098a589..70417be 100644
--- a/lib/neutron
+++ b/lib/neutron
@@ -4,6 +4,7 @@
# Dependencies:
# ``functions`` file
# ``DEST`` must be defined
+# ``STACK_USER`` must be defined
# ``stack.sh`` calls the entry points in this order:
#
@@ -206,6 +207,12 @@
# Hardcoding for 1 service plugin for now
source $TOP_DIR/lib/neutron_plugins/services/loadbalancer
+# Agent metering service plugin functions
+# -------------------------------------------
+
+# Hardcoding for 1 service plugin for now
+source $TOP_DIR/lib/neutron_plugins/services/metering
+
# VPN service plugin functions
# -------------------------------------------
# Hardcoding for 1 service plugin for now
@@ -235,6 +242,9 @@
if is_service_enabled q-lbaas; then
_configure_neutron_lbaas
fi
+ if is_service_enabled q-metering; then
+ _configure_neutron_metering
+ fi
if is_service_enabled q-vpn; then
_configure_neutron_vpn
fi
@@ -456,6 +466,10 @@
if is_service_enabled q-lbaas; then
screen_it q-lbaas "cd $NEUTRON_DIR && python $AGENT_LBAAS_BINARY --config-file $NEUTRON_CONF --config-file=$LBAAS_AGENT_CONF_FILENAME"
fi
+
+ if is_service_enabled q-metering; then
+ screen_it q-metering "cd $NEUTRON_DIR && python $AGENT_METERING_BINARY --config-file $NEUTRON_CONF --config-file $METERING_AGENT_CONF_FILENAME"
+ fi
}
# stop_neutron() - Stop running processes (non-screen)
@@ -636,6 +650,11 @@
neutron_agent_lbaas_configure_agent
}
+function _configure_neutron_metering() {
+ neutron_agent_metering_configure_common
+ neutron_agent_metering_configure_agent
+}
+
function _configure_neutron_fwaas() {
neutron_fwaas_configure_common
neutron_fwaas_configure_driver
@@ -730,7 +749,7 @@
# Set up the rootwrap sudoers for neutron
TEMPFILE=`mktemp`
- echo "$USER ALL=(root) NOPASSWD: $ROOTWRAP_SUDOER_CMD" >$TEMPFILE
+ echo "$STACK_USER ALL=(root) NOPASSWD: $ROOTWRAP_SUDOER_CMD" >$TEMPFILE
chmod 0440 $TEMPFILE
sudo chown root:root $TEMPFILE
sudo mv $TEMPFILE /etc/sudoers.d/neutron-rootwrap
diff --git a/lib/neutron_plugins/services/metering b/lib/neutron_plugins/services/metering
new file mode 100644
index 0000000..629f3b7
--- /dev/null
+++ b/lib/neutron_plugins/services/metering
@@ -0,0 +1,30 @@
+# Neutron metering plugin
+# ---------------------------
+
+# Save trace setting
+MY_XTRACE=$(set +o | grep xtrace)
+set +o xtrace
+
+
+AGENT_METERING_BINARY="$NEUTRON_BIN_DIR/neutron-metering-agent"
+METERING_PLUGIN="neutron.services.metering.metering_plugin.MeteringPlugin"
+
+function neutron_agent_metering_configure_common() {
+ if [[ $Q_SERVICE_PLUGIN_CLASSES == '' ]]; then
+ Q_SERVICE_PLUGIN_CLASSES=$METERING_PLUGIN
+ else
+ Q_SERVICE_PLUGIN_CLASSES="$Q_SERVICE_PLUGIN_CLASSES,$METERING_PLUGIN"
+ fi
+}
+
+function neutron_agent_metering_configure_agent() {
+ METERING_AGENT_CONF_PATH=/etc/neutron/services/metering
+ mkdir -p $METERING_AGENT_CONF_PATH
+
+ METERING_AGENT_CONF_FILENAME="$METERING_AGENT_CONF_PATH/metering_agent.ini"
+
+ cp $NEUTRON_DIR/etc/metering_agent.ini $METERING_AGENT_CONF_FILENAME
+}
+
+# Restore xtrace
+$MY_XTRACE
diff --git a/lib/nova b/lib/nova
index 5b6f50e..6ab2000 100644
--- a/lib/nova
+++ b/lib/nova
@@ -195,7 +195,7 @@
# Set up the rootwrap sudoers for nova
TEMPFILE=`mktemp`
- echo "$USER ALL=(root) NOPASSWD: $ROOTWRAP_SUDOER_CMD" >$TEMPFILE
+ echo "$STACK_USER ALL=(root) NOPASSWD: $ROOTWRAP_SUDOER_CMD" >$TEMPFILE
chmod 0440 $TEMPFILE
sudo chown root:root $TEMPFILE
sudo mv $TEMPFILE /etc/sudoers.d/nova-rootwrap
diff --git a/lib/nova_plugins/hypervisor-libvirt b/lib/nova_plugins/hypervisor-libvirt
index 6fae0b1..6f90f4a 100644
--- a/lib/nova_plugins/hypervisor-libvirt
+++ b/lib/nova_plugins/hypervisor-libvirt
@@ -7,6 +7,7 @@
# Dependencies:
# ``functions`` file
# ``nova`` configuration
+# ``STACK_USER`` has to be defined
# install_nova_hypervisor - install any external requirements
# configure_nova_hypervisor - make configuration changes, including those to other services
@@ -68,7 +69,7 @@
# with 'unix-group:$group'.
sudo bash -c "cat <<EOF >/etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
[libvirt Management Access]
-Identity=unix-user:$USER
+Identity=unix-user:$STACK_USER
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
diff --git a/lib/stackforge b/lib/stackforge
index 4b79de0..718b818 100644
--- a/lib/stackforge
+++ b/lib/stackforge
@@ -39,10 +39,10 @@
cleanup_stackforge
git_clone $WSME_REPO $WSME_DIR $WSME_BRANCH
- setup_develop $WSME_DIR
+ setup_develop_no_requirements_update $WSME_DIR
git_clone $PECAN_REPO $PECAN_DIR $PECAN_BRANCH
- setup_develop $PECAN_DIR
+ setup_develop_no_requirements_update $PECAN_DIR
}
# cleanup_stackforge() - purge possibly old versions of stackforge libraries
diff --git a/lib/swift b/lib/swift
index 83c4ebb..c103b5b 100644
--- a/lib/swift
+++ b/lib/swift
@@ -225,7 +225,7 @@
swift-init --run-dir=${SWIFT_DATA_DIR}/run all stop || true
sudo mkdir -p ${SWIFT_CONF_DIR}/{object,container,account}-server
- sudo chown -R $USER: ${SWIFT_CONF_DIR}
+ sudo chown -R ${STACK_USER}: ${SWIFT_CONF_DIR}
if [[ "$SWIFT_CONF_DIR" != "/etc/swift" ]]; then
# Some swift tools are hard-coded to use ``/etc/swift`` and are apparently not going to be fixed.
@@ -238,7 +238,7 @@
# setup) we configure it with our version of rsync.
sed -e "
s/%GROUP%/${USER_GROUP}/;
- s/%USER%/$USER/;
+ s/%USER%/${STACK_USER}/;
s,%SWIFT_DATA_DIR%,$SWIFT_DATA_DIR,;
" $FILES/swift/rsyncd.conf | sudo tee /etc/rsyncd.conf
# rsyncd.conf just prepared for 4 nodes
@@ -252,7 +252,7 @@
cp ${SWIFT_DIR}/etc/proxy-server.conf-sample ${SWIFT_CONFIG_PROXY_SERVER}
iniuncomment ${SWIFT_CONFIG_PROXY_SERVER} DEFAULT user
- iniset ${SWIFT_CONFIG_PROXY_SERVER} DEFAULT user ${USER}
+ iniset ${SWIFT_CONFIG_PROXY_SERVER} DEFAULT user ${STACK_USER}
iniuncomment ${SWIFT_CONFIG_PROXY_SERVER} DEFAULT swift_dir
iniset ${SWIFT_CONFIG_PROXY_SERVER} DEFAULT swift_dir ${SWIFT_CONF_DIR}
@@ -266,6 +266,15 @@
iniuncomment ${SWIFT_CONFIG_PROXY_SERVER} DEFAULT bind_port
iniset ${SWIFT_CONFIG_PROXY_SERVER} DEFAULT bind_port ${SWIFT_DEFAULT_BIND_PORT:-8080}
+ # Devstack is commonly run in a small slow environment, so bump the
+ # timeouts up.
+ # node_timeout is how long between read operations a node takes to
+ # respond to the proxy server
+ # conn_timeout is all about how long it takes a connect() system call to
+ # return
+ iniset ${SWIFT_CONFIG_PROXY_SERVER} app:proxy-server node_timeout 120
+ iniset ${SWIFT_CONFIG_PROXY_SERVER} app:proxy-server conn_timeout 20
+
# Configure Ceilometer
if is_service_enabled ceilometer; then
iniset ${SWIFT_CONFIG_PROXY_SERVER} filter:ceilometer use "egg:ceilometer#swift"
@@ -339,7 +348,7 @@
node_path=${SWIFT_DATA_DIR}/${node_number}
iniuncomment ${swift_node_config} DEFAULT user
- iniset ${swift_node_config} DEFAULT user ${USER}
+ iniset ${swift_node_config} DEFAULT user ${STACK_USER}
iniuncomment ${swift_node_config} DEFAULT bind_port
iniset ${swift_node_config} DEFAULT bind_port ${bind_port}
@@ -410,7 +419,7 @@
swift_log_dir=${SWIFT_DATA_DIR}/logs
rm -rf ${swift_log_dir}
mkdir -p ${swift_log_dir}/hourly
- sudo chown -R $USER:adm ${swift_log_dir}
+ sudo chown -R ${STACK_USER}:adm ${swift_log_dir}
sed "s,%SWIFT_LOGDIR%,${swift_log_dir}," $FILES/swift/rsyslog.conf | sudo \
tee /etc/rsyslog.d/10-swift.conf
if is_apache_enabled_service swift; then
@@ -425,9 +434,9 @@
# First do a bit of setup by creating the directories and
# changing the permissions so we can run it as our user.
- USER_GROUP=$(id -g)
+ USER_GROUP=$(id -g ${STACK_USER})
sudo mkdir -p ${SWIFT_DATA_DIR}/{drives,cache,run,logs}
- sudo chown -R $USER:${USER_GROUP} ${SWIFT_DATA_DIR}
+ sudo chown -R ${STACK_USER}:${USER_GROUP} ${SWIFT_DATA_DIR}
# Create a loopback disk and format it to XFS.
if [[ -e ${SWIFT_DISK_IMAGE} ]]; then
@@ -439,7 +448,7 @@
mkdir -p ${SWIFT_DATA_DIR}/drives/images
sudo touch ${SWIFT_DISK_IMAGE}
- sudo chown $USER: ${SWIFT_DISK_IMAGE}
+ sudo chown ${STACK_USER}: ${SWIFT_DISK_IMAGE}
truncate -s ${SWIFT_LOOPBACK_DISK_SIZE} ${SWIFT_DISK_IMAGE}
@@ -462,9 +471,9 @@
node_device=${node}/sdb1
[[ -d $node ]] && continue
[[ -d $drive ]] && continue
- sudo install -o ${USER} -g $USER_GROUP -d $drive
- sudo install -o ${USER} -g $USER_GROUP -d $node_device
- sudo chown -R $USER: ${node}
+ sudo install -o ${STACK_USER} -g $USER_GROUP -d $drive
+ sudo install -o ${STACK_USER} -g $USER_GROUP -d $node_device
+ sudo chown -R ${STACK_USER}: ${node}
done
}
# create_swift_accounts() - Set up standard swift accounts and extra
diff --git a/lib/tempest b/lib/tempest
index ec1fc90..b0fc9f5 100644
--- a/lib/tempest
+++ b/lib/tempest
@@ -73,6 +73,7 @@
local password
local line
local flavors
+ local available_flavors
local flavors_ref
local flavor_lines
local public_network_id
@@ -142,10 +143,15 @@
# If the ``DEFAULT_INSTANCE_TYPE`` not declared, use the new behavior
# Tempest creates instane types for himself
if [[ -z "$DEFAULT_INSTANCE_TYPE" ]]; then
- nova flavor-create m1.nano 42 64 0 1
+ available_flavors=$(nova flavor-list)
+ if [[ ! ( $available_flavors =~ 'm1.nano' ) ]]; then
+ nova flavor-create m1.nano 42 64 0 1
+ fi
flavor_ref=42
boto_instance_type=m1.nano
- nova flavor-create m1.micro 84 128 0 1
+ if [[ ! ( $available_flavors =~ 'm1.micro' ) ]]; then
+ nova flavor-create m1.micro 84 128 0 1
+ fi
flavor_ref_alt=84
else
# Check Nova for existing flavors and, if set, look for the
@@ -300,7 +306,7 @@
iniset $TEMPEST_CONF cli cli_dir $NOVA_BIN_DIR
# service_available
- for service in nova cinder glance neutron swift heat horizon ceilometer; do
+ for service in nova cinder glance neutron swift heat horizon ceilometer ironic; do
if is_service_enabled $service ; then
iniset $TEMPEST_CONF service_available $service "True"
else
diff --git a/tools/build_docs.sh b/tools/build_docs.sh
index 216e557..1c145e2 100755
--- a/tools/build_docs.sh
+++ b/tools/build_docs.sh
@@ -91,8 +91,9 @@
# Assumption is we are now in the DevStack repo workspace to be processed
# Pull the latest docs branch from devstack.org repo
-rm -rf docs || true
-git clone -b gh-pages $GH_PAGES_REPO docs
+if ! [ -d docs ]; then
+ git clone -b gh-pages $GH_PAGES_REPO docs
+fi
# Build list of scripts to process
FILES=""
diff --git a/tools/build_ramdisk.sh b/tools/build_ramdisk.sh
index 3d9f76f..7372555 100755
--- a/tools/build_ramdisk.sh
+++ b/tools/build_ramdisk.sh
@@ -22,7 +22,7 @@
umount $MNTDIR
rmdir $MNTDIR
fi
- if [ -n "$DEV_FILE_TMP" -a -e "$DEV_FILE_TMP "]; then
+ if [ -n "$DEV_FILE_TMP" -a -e "$DEV_FILE_TMP" ]; then
rm -f $DEV_FILE_TMP
fi
if [ -n "$IMG_FILE_TMP" -a -e "$IMG_FILE_TMP" ]; then
diff --git a/tools/fixup_stuff.sh b/tools/fixup_stuff.sh
index 325a6d6..f936230 100755
--- a/tools/fixup_stuff.sh
+++ b/tools/fixup_stuff.sh
@@ -76,8 +76,7 @@
if [[ $DISTRO =~ (rhel6) ]]; then
# Disable selinux to avoid configuring to allow Apache access
- # to Horizon files or run nodejs (LP#1175444)
- # FIXME(dtroyer): see if this can be skipped without node or if Horizon is not enabled
+ # to Horizon files (LP#1175444)
if selinuxenabled; then
sudo setenforce 0
fi
diff --git a/tools/xen/functions b/tools/xen/functions
index b0b077d..563303d 100644
--- a/tools/xen/functions
+++ b/tools/xen/functions
@@ -137,14 +137,14 @@
local name_label
name_label=$1
- ! [ -z $(xe network-list name-label="$name_label" --minimal) ]
+ ! [ -z "$(xe network-list name-label="$name_label" --minimal)" ]
}
function _bridge_exists() {
local bridge
bridge=$1
- ! [ -z $(xe network-list bridge="$bridge" --minimal) ]
+ ! [ -z "$(xe network-list bridge="$bridge" --minimal)" ]
}
function _network_uuid() {
diff --git a/tools/xen/install_os_domU.sh b/tools/xen/install_os_domU.sh
index 33dc26f..6ce334b 100755
--- a/tools/xen/install_os_domU.sh
+++ b/tools/xen/install_os_domU.sh
@@ -111,12 +111,15 @@
fi
if parameter_is_specified "FLAT_NETWORK_BRIDGE"; then
- cat >&2 << EOF
-ERROR: FLAT_NETWORK_BRIDGE is specified in localrc file
-This is considered as an error, as its value will be derived from the
-VM_BRIDGE_OR_NET_NAME variable's value.
+ if [ "$(bridge_for "$VM_BRIDGE_OR_NET_NAME")" != "$(bridge_for "$FLAT_NETWORK_BRIDGE")" ]; then
+ cat >&2 << EOF
+ERROR: FLAT_NETWORK_BRIDGE is specified in localrc file, and either no network
+found on XenServer by searching for networks by that value as name-label or
+bridge name or the network found does not match the network specified by
+VM_BRIDGE_OR_NET_NAME. Please check your localrc file.
EOF
- exit 1
+ exit 1
+ fi
fi
if ! xenapi_is_listening_on "$MGT_BRIDGE_OR_NET_NAME"; then
@@ -310,7 +313,7 @@
"xen_integration_bridge=${XEN_INTEGRATION_BRIDGE}"
fi
-FLAT_NETWORK_BRIDGE=$(bridge_for "$VM_BRIDGE_OR_NET_NAME")
+FLAT_NETWORK_BRIDGE="${FLAT_NETWORK_BRIDGE:-$(bridge_for "$VM_BRIDGE_OR_NET_NAME")}"
append_kernel_cmdline "$GUEST_NAME" "flat_network_bridge=${FLAT_NETWORK_BRIDGE}"
# Add a separate xvdb, if it was requested