Merge "Fix doc: API_RATE_LIMIT has been removed"
diff --git a/HACKING.rst b/HACKING.rst
index 3ffe1e2..b7d9a49 100644
--- a/HACKING.rst
+++ b/HACKING.rst
@@ -110,8 +110,8 @@
* Global configuration that may be referenced in ``local.conf``, i.e. ``DEST``, ``DATA_DIR``
* Global service configuration like ``ENABLED_SERVICES``
* Variables used by multiple services that do not have a clear owner, i.e.
- ``VOLUME_BACKING_FILE_SIZE`` (nova-volumes and cinder) or ``PUBLIC_NETWORK_NAME``
- (nova-network and neutron)
+ ``VOLUME_BACKING_FILE_SIZE`` (nova-compute, nova-volumes and cinder) or
+ ``PUBLIC_NETWORK_NAME`` (nova-network and neutron)
* Variables that can not be cleanly declared in a project file due to
dependency ordering, i.e. the order of sourcing the project files can
not be changed for other reasons but the earlier file needs to dereference a
diff --git a/doc/source/guides/neutron.rst b/doc/source/guides/neutron.rst
index 90d4ca3..95cde96 100644
--- a/doc/source/guides/neutron.rst
+++ b/doc/source/guides/neutron.rst
@@ -196,7 +196,7 @@
SEGMENTATION_ID=2010
In this configuration we are defining FIXED_RANGE to be a
-subnet that exists in the private RFC1918 address space - however in
+subnet that exists in the private RFC1918 address space - however
in a real setup FIXED_RANGE would be a public IP address range, so
that you could access your instances from the public internet.
diff --git a/extras.d/70-sahara.sh b/extras.d/70-sahara.sh
index 2a34999..f177766 100644
--- a/extras.d/70-sahara.sh
+++ b/extras.d/70-sahara.sh
@@ -15,6 +15,7 @@
create_sahara_accounts
elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
echo_summary "Initializing sahara"
+ sahara_register_images
start_sahara
fi
diff --git a/extras.d/70-tuskar.sh b/extras.d/70-tuskar.sh
index 38aba34..6e26db2 100644
--- a/extras.d/70-tuskar.sh
+++ b/extras.d/70-tuskar.sh
@@ -131,7 +131,7 @@
function init_tuskar {
# (re)create tuskar database
- recreate_database tuskar utf8
+ recreate_database tuskar
tuskar-dbsync --config-file $TUSKAR_CONF
create_tuskar_cache_dir
diff --git a/functions-common b/functions-common
index 5bca836..f8b8eaf 100644
--- a/functions-common
+++ b/functions-common
@@ -601,7 +601,7 @@
local git_clone_flags=""
RECLONE=$(trueorfalse False RECLONE)
- if [[ -n "${GIT_DEPTH}" ]]; then
+ if [[ "${GIT_DEPTH}" -gt 0 ]]; then
git_clone_flags="$git_clone_flags --depth $GIT_DEPTH"
fi
@@ -919,8 +919,8 @@
# Usage: get_or_add_user_role <role> <user> <project>
function get_or_add_user_role {
# Gets user role id
- local user_role_id=$(openstack user role list \
- $2 \
+ local user_role_id=$(openstack role list \
+ --user $2 \
--project $3 \
--column "ID" \
--column "Name" \
@@ -945,8 +945,8 @@
openstack service show $1 -f value -c id 2>/dev/null ||
# Creates new service if not exists
openstack service create \
- $1 \
- --type=$2 \
+ $2 \
+ --name $1 \
--description="$3" \
-f value -c id
)
@@ -1278,8 +1278,8 @@
exec 6>&-
if [[ -n ${SCREEN_LOGDIR} ]]; then
- exec 1>&${SCREEN_LOGDIR}/screen-${service}.${CURRENT_LOG_TIME}.log 2>&1
- ln -sf ${SCREEN_LOGDIR}/screen-${service}.${CURRENT_LOG_TIME}.log ${SCREEN_LOGDIR}/screen-${service}.log
+ exec 1>&${SCREEN_LOGDIR}/screen-${service}.log.${CURRENT_LOG_TIME} 2>&1
+ ln -sf ${SCREEN_LOGDIR}/screen-${service}.log.${CURRENT_LOG_TIME} ${SCREEN_LOGDIR}/screen-${service}.log
# TODO(dtroyer): Hack to get stdout from the Python interpreter for the logs.
export PYTHONUNBUFFERED=1
@@ -1363,9 +1363,9 @@
screen -S $SCREEN_NAME -X screen -t $name
if [[ -n ${SCREEN_LOGDIR} ]]; then
- screen -S $SCREEN_NAME -p $name -X logfile ${SCREEN_LOGDIR}/screen-${name}.${CURRENT_LOG_TIME}.log
+ screen -S $SCREEN_NAME -p $name -X logfile ${SCREEN_LOGDIR}/screen-${name}.log.${CURRENT_LOG_TIME}
screen -S $SCREEN_NAME -p $name -X log on
- ln -sf ${SCREEN_LOGDIR}/screen-${name}.${CURRENT_LOG_TIME}.log ${SCREEN_LOGDIR}/screen-${name}.log
+ ln -sf ${SCREEN_LOGDIR}/screen-${name}.log.${CURRENT_LOG_TIME} ${SCREEN_LOGDIR}/screen-${name}.log
fi
# sleep to allow bash to be ready to be send the command - we are
@@ -1411,7 +1411,7 @@
echo "stuff \"$2$NL\"" >> $SCREENRC
if [[ -n ${SCREEN_LOGDIR} ]]; then
- echo "logfile ${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log" >>$SCREENRC
+ echo "logfile ${SCREEN_LOGDIR}/screen-${1}.log.${CURRENT_LOG_TIME}" >>$SCREENRC
echo "log on" >>$SCREENRC
fi
fi
@@ -1523,8 +1523,8 @@
exec 6>&-
if [[ -n ${SCREEN_LOGDIR} ]]; then
- exec 1>&${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log 2>&1
- ln -sf ${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log ${SCREEN_LOGDIR}/screen-${1}.log
+ exec 1>&${SCREEN_LOGDIR}/screen-${1}.log.${CURRENT_LOG_TIME} 2>&1
+ ln -sf ${SCREEN_LOGDIR}/screen-${1}.log.${CURRENT_LOG_TIME} ${SCREEN_LOGDIR}/screen-${1}.log
# TODO(dtroyer): Hack to get stdout from the Python interpreter for the logs.
export PYTHONUNBUFFERED=1
diff --git a/lib/ceilometer b/lib/ceilometer
index 98a7e8f..d48751e 100644
--- a/lib/ceilometer
+++ b/lib/ceilometer
@@ -265,7 +265,7 @@
if is_service_enabled mysql postgresql; then
if [ "$CEILOMETER_BACKEND" = 'mysql' ] || [ "$CEILOMETER_BACKEND" = 'postgresql' ] ; then
- recreate_database ceilometer utf8
+ recreate_database ceilometer
$CEILOMETER_BIN_DIR/ceilometer-dbsync
fi
fi
diff --git a/lib/cinder b/lib/cinder
index 7fc6949..6eee880 100644
--- a/lib/cinder
+++ b/lib/cinder
@@ -76,9 +76,9 @@
# configuration and for the volume type name. Multiple backends are
# comma-separated.
if [[ $CINDER_MULTI_LVM_BACKEND == "False" ]]; then
- CINDER_ENABLED_BACKENDS=${CINDER_ENABLED_BACKENDS:-lvm:lvmdriver-1}
+ CINDER_ENABLED_BACKENDS=${CINDER_ENABLED_BACKENDS:-lvm:${DEFAULT_VOLUME_GROUP_NAME##*-}}
else
- CINDER_ENABLED_BACKENDS=${CINDER_ENABLED_BACKENDS:-lvm:lvmdriver-1,lvm:lvmdriver-2}
+ CINDER_ENABLED_BACKENDS=${CINDER_ENABLED_BACKENDS:-lvm:${DEFAULT_VOLUME_GROUP_NAME##*-},lvm:cinder}
fi
@@ -387,7 +387,7 @@
if is_service_enabled $DATABASE_BACKENDS; then
# (Re)create cinder database
- recreate_database cinder utf8
+ recreate_database cinder
# Migrate cinder database
$CINDER_BIN_DIR/cinder-manage db sync
diff --git a/lib/cinder_backends/lvm b/lib/cinder_backends/lvm
index 280baf7..43e13e4 100644
--- a/lib/cinder_backends/lvm
+++ b/lib/cinder_backends/lvm
@@ -14,6 +14,7 @@
# CINDER_CONF
# DATA_DIR
+# VOLUME_GROUP_NAME
# clean_cinder_backend_lvm - called from clean_cinder()
# configure_cinder_backend_lvm - called from configure_cinder()
@@ -25,157 +26,44 @@
set +o xtrace
-# Defaults
-# --------
-
-# Name of the lvm volume groups to use/create for iscsi volumes
-# This monkey-motion is for compatibility with icehouse-generation Grenade
-# If ``VOLUME_GROUP`` is set, use it, otherwise we'll build a VG name based
-# on ``VOLUME_GROUP_NAME`` that includes the backend name
-# 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}}
-
# TODO: resurrect backing device...need to know how to set values
#VOLUME_BACKING_DEVICE=${VOLUME_BACKING_DEVICE:-}
-VOLUME_NAME_PREFIX=${VOLUME_NAME_PREFIX:-volume-}
-
-
# Entry Points
# ------------
-# Compatibility for getting a volume group name from either ``VOLUME_GROUP``
-# or from ``VOLUME_GROUP_NAME`` plus the backend name
-function get_volume_group_name {
- local be_name=$1
-
- # Again with the icehouse-generation compatibility
- local volume_group_name=$VOLUME_GROUP_NAME
- if [[ -z $VOLUME_GROUP ]]; then
- volume_group_name+="-$be_name"
- fi
- echo $volume_group_name
-}
-
+# cleanup_cinder_backend_lvm - Delete volume group and remove backing file
+# cleanup_cinder_backend_lvm $be_name
function cleanup_cinder_backend_lvm {
local be_name=$1
- # Again with the icehouse-generation compatibility
- local volume_group_name=$(get_volume_group_name $be_name)
-
# Campsite rule: leave behind a volume group at least as clean as we found it
- _clean_lvm_lv ${volume_group_name} $VOLUME_NAME_PREFIX
- _clean_lvm_backing_file ${volume_group_name} $DATA_DIR/${volume_group_name}-backing-file
+ clean_lvm_volume_group $VOLUME_GROUP_NAME-$be_name
}
# configure_cinder_backend_lvm - Set config files, create data dirs, etc
-# configure_cinder_backend_lvm $name
+# configure_cinder_backend_lvm $be_name
function configure_cinder_backend_lvm {
local be_name=$1
- # Again with the icehouse-generation compatibility
- local volume_group_name=$(get_volume_group_name $be_name)
-
iniset $CINDER_CONF $be_name volume_backend_name $be_name
iniset $CINDER_CONF $be_name volume_driver "cinder.volume.drivers.lvm.LVMISCSIDriver"
- iniset $CINDER_CONF $be_name volume_group $volume_group_name
+ iniset $CINDER_CONF $be_name volume_group $VOLUME_GROUP_NAME-$be_name
if [[ "$CINDER_SECURE_DELETE" == "False" ]]; then
iniset $CINDER_CONF $be_name volume_clear none
fi
}
-
+# init_cinder_backend_lvm - Initialize volume group
+# init_cinder_backend_lvm $be_name
function init_cinder_backend_lvm {
local be_name=$1
- # Again with the icehouse-generation compatibility
- local volume_group_name=$(get_volume_group_name $be_name)
-
# Start with a clean volume group
- _create_cinder_volume_group ${volume_group_name} $DATA_DIR/${volume_group_name}-backing-file
-
- if is_fedora || is_suse; then
- # service is not started by default
- start_service tgtd
- fi
-
- # Remove iscsi targets
- sudo tgtadm --op show --mode target | grep $VOLUME_NAME_PREFIX | grep Target | cut -f3 -d ' ' | sudo xargs -n1 tgt-admin --delete || true
- _clean_lvm_lv ${volume_group_name} $VOLUME_NAME_PREFIX
+ init_lvm_volume_group $VOLUME_GROUP_NAME-$be_name $VOLUME_BACKING_FILE_SIZE
}
-
-# _clean_lvm_lv removes all cinder LVM volumes
-#
-# Usage: _clean_lvm_lv volume-group-name $VOLUME_NAME_PREFIX
-function _clean_lvm_lv {
- local vg=$1
- local lv_prefix=$2
-
- # Clean out existing volumes
- local lv
- for lv in $(sudo lvs --noheadings -o lv_name $vg 2>/dev/null); do
- # lv_prefix prefixes the LVs we want
- if [[ "${lv#$lv_prefix}" != "$lv" ]]; then
- sudo lvremove -f $vg/$lv
- fi
- done
-}
-
-# _clean_lvm_backing_file() removes the backing file of the
-# volume group used by cinder
-#
-# Usage: _clean_lvm_backing_file() volume-group-name backing-file-name
-function _clean_lvm_backing_file {
- local vg=$1
- local backing_file=$2
-
- # if there is no logical volume left, it's safe to attempt a cleanup
- # of the backing file
- if [[ -z "$(sudo lvs --noheadings -o lv_name $vg 2>/dev/null)" ]]; then
- # if the backing physical device is a loop device, it was probably setup by devstack
- local vg_dev=$(sudo losetup -j $backing_file | awk -F':' '/backing-file/ { print $1}')
- if [[ -n "$vg_dev" ]] && [[ -e "$vg_dev" ]]; then
- sudo losetup -d $vg_dev
- rm -f $backing_file
- fi
- fi
-}
-
-# _create_cinder_volume_group volume-group-name backing-file-name
-function _create_cinder_volume_group {
- # According to the ``CINDER_MULTI_LVM_BACKEND`` value, configure one or two default volumes
- # group called ``stack-volumes`` (and ``stack-volumes2``) for the volume
- # service if it (they) does (do) not yet exist. If you don't wish to use a
- # file backed volume group, create your own volume group called ``stack-volumes``
- # and ``stack-volumes2`` before invoking ``stack.sh``.
- #
- # The two backing files are ``VOLUME_BACKING_FILE_SIZE`` in size, and they are stored in
- # the ``DATA_DIR``.
-
- local vg_name=$1
- local backing_file=$2
-
- if ! sudo vgs $vg_name; then
- # TODO: fix device handling
- if [ -z "$VOLUME_BACKING_DEVICE" ]; then
- # Only create if the file doesn't already exists
- [[ -f $backing_file ]] || truncate -s $VOLUME_BACKING_FILE_SIZE $backing_file
- local vg_dev=`sudo losetup -f --show $backing_file`
-
- # Only create if the loopback device doesn't contain $VOLUME_GROUP
- if ! sudo vgs $vg_name; then
- sudo vgcreate $vg_name $vg_dev
- fi
- else
- sudo vgcreate $vg_name $VOLUME_BACKING_DEVICE
- fi
- fi
-}
-
-
# Restore xtrace
$MY_XTRACE
diff --git a/lib/database b/lib/database
index 896b8e1..b114e9e 100644
--- a/lib/database
+++ b/lib/database
@@ -99,11 +99,9 @@
# Recreate a given database
# $1 The name of the database
-# $2 The character set/encoding of the database
function recreate_database {
local db=$1
- local charset=$2
- recreate_database_$DATABASE_TYPE $db $charset
+ recreate_database_$DATABASE_TYPE $db
}
# Install the database
diff --git a/lib/databases/mysql b/lib/databases/mysql
index 45484c1..2f3b6d4 100644
--- a/lib/databases/mysql
+++ b/lib/databases/mysql
@@ -58,9 +58,8 @@
function recreate_database_mysql {
local db=$1
- local charset=$2
mysql -u$DATABASE_USER -p$DATABASE_PASSWORD -h$MYSQL_HOST -e "DROP DATABASE IF EXISTS $db;"
- mysql -u$DATABASE_USER -p$DATABASE_PASSWORD -h$MYSQL_HOST -e "CREATE DATABASE $db CHARACTER SET $charset;"
+ mysql -u$DATABASE_USER -p$DATABASE_PASSWORD -h$MYSQL_HOST -e "CREATE DATABASE $db CHARACTER SET utf8;"
}
function configure_database_mysql {
@@ -138,10 +137,10 @@
if is_ubuntu; then
# Seed configuration with mysql password so that apt-get install doesn't
# prompt us for a password upon install.
- cat <<MYSQL_PRESEED | sudo debconf-set-selections
-mysql-server-5.1 mysql-server/root_password password $DATABASE_PASSWORD
-mysql-server-5.1 mysql-server/root_password_again password $DATABASE_PASSWORD
-mysql-server-5.1 mysql-server/start_on_boot boolean true
+ sudo debconf-set-selections <<MYSQL_PRESEED
+mysql-server mysql-server/root_password password $DATABASE_PASSWORD
+mysql-server mysql-server/root_password_again password $DATABASE_PASSWORD
+mysql-server mysql-server/start_on_boot boolean true
MYSQL_PRESEED
fi
diff --git a/lib/databases/postgresql b/lib/databases/postgresql
index 76491c4..ad8cdc7 100644
--- a/lib/databases/postgresql
+++ b/lib/databases/postgresql
@@ -37,10 +37,9 @@
function recreate_database_postgresql {
local db=$1
- local charset=$2
# Avoid unsightly error when calling dropdb when the database doesn't exist
psql -h$DATABASE_HOST -U$DATABASE_USER -dtemplate1 -c "DROP DATABASE IF EXISTS $db"
- createdb -h $DATABASE_HOST -U$DATABASE_USER -l C -T template0 -E $charset $db
+ createdb -h $DATABASE_HOST -U$DATABASE_USER -l C -T template0 -E utf8 $db
}
function configure_database_postgresql {
diff --git a/lib/dstat b/lib/dstat
index 73ca279..a17125f 100644
--- a/lib/dstat
+++ b/lib/dstat
@@ -20,7 +20,7 @@
# Defaults
# --------
# for DSTAT logging
-DSTAT_FILE=${DSTAT_FILE:-"dstat.txt"}
+DSTAT_FILE=${DSTAT_FILE:-"dstat.log"}
# start_dstat() - Start running processes, including screen
diff --git a/lib/glance b/lib/glance
index 8cda6be..8768761 100644
--- a/lib/glance
+++ b/lib/glance
@@ -279,7 +279,7 @@
mkdir -p $GLANCE_CACHE_DIR
# (Re)create glance database
- recreate_database glance utf8
+ recreate_database glance
# Migrate glance database
$GLANCE_BIN_DIR/glance-manage db_sync
diff --git a/lib/heat b/lib/heat
index ee3f502..9a28af5 100644
--- a/lib/heat
+++ b/lib/heat
@@ -175,7 +175,7 @@
function init_heat {
# (re)create heat database
- recreate_database heat utf8
+ recreate_database heat
$HEAT_DIR/bin/heat-manage db_sync
create_heat_cache_dir
diff --git a/lib/ironic b/lib/ironic
index d5afa30..2075a9c 100644
--- a/lib/ironic
+++ b/lib/ironic
@@ -386,7 +386,7 @@
# init_ironic() - Initialize databases, etc.
function init_ironic {
# (Re)create ironic database
- recreate_database ironic utf8
+ recreate_database ironic
# Migrate ironic database
$IRONIC_BIN_DIR/ironic-dbsync --config-file=$IRONIC_CONF_FILE
@@ -461,7 +461,11 @@
# intentional sleep to make sure the tag has been set to port
sleep 10
- local tapdev=$(sudo ip netns exec qdhcp-${ironic_net_id} ip link list | grep " tap" | cut -d':' -f2 | cut -b2-)
+ if [[ "$Q_USE_NAMESPACE" = "True" ]]; then
+ local tapdev=$(sudo ip netns exec qdhcp-${ironic_net_id} ip link list | grep " tap" | cut -d':' -f2 | cut -b2-)
+ else
+ local tapdev=$(sudo ip link list | grep " tap" | cut -d':' -f2 | cut -b2-)
+ fi
local tag_id=$(sudo ovs-vsctl show |grep ${tapdev} -A1 -m1 | grep tag | cut -d':' -f2 | cut -b2-)
# make sure veth pair is not existing, otherwise delete its links
diff --git a/lib/keystone b/lib/keystone
index 9bde597..f378547 100644
--- a/lib/keystone
+++ b/lib/keystone
@@ -456,7 +456,7 @@
fi
# (Re)create keystone database
- recreate_database keystone utf8
+ recreate_database keystone
# Initialize keystone database
$KEYSTONE_DIR/bin/keystone-manage db_sync
diff --git a/lib/lvm b/lib/lvm
new file mode 100644
index 0000000..4ef260d
--- /dev/null
+++ b/lib/lvm
@@ -0,0 +1,124 @@
+# lib/lvm
+# Configure the default LVM volume group used by Cinder and Nova
+
+# Dependencies:
+#
+# - ``functions`` file
+# - ``cinder`` configurations
+
+# DATA_DIR
+
+# clean_default_volume_group - called from clean()
+# configure_default_volume_group - called from configure()
+# init_default_volume_group - called from init()
+
+
+# Save trace setting
+MY_XTRACE=$(set +o | grep xtrace)
+set +o xtrace
+
+
+# Defaults
+# --------
+# Name of the lvm volume groups to use/create for iscsi volumes
+# This monkey-motion is for compatibility with icehouse-generation Grenade
+# If ``VOLUME_GROUP`` is set, use it, otherwise we'll build a VG name based
+# on ``VOLUME_GROUP_NAME`` that includes the backend name
+# Grenade doesn't use ``VOLUME_GROUP2`` so it is left out
+VOLUME_GROUP_NAME=${VOLUME_GROUP:-${VOLUME_GROUP_NAME:-stack-volumes}}
+DEFAULT_VOLUME_GROUP_NAME=$VOLUME_GROUP_NAME-default
+
+# Backing file name is of the form $VOLUME_GROUP$BACKING_FILE_SUFFIX
+BACKING_FILE_SUFFIX=-backing-file
+
+
+# Entry Points
+# ------------
+
+# _clean_lvm_volume_group removes all default LVM volumes
+#
+# Usage: clean_lvm_volume_group $vg
+function _clean_lvm_volume_group {
+ local vg=$1
+
+ # Clean out existing volumes
+ sudo lvremove -f $vg
+}
+
+# _clean_lvm_backing_file() removes the backing file of the
+# volume group
+#
+# Usage: _clean_lvm_backing_file() $backing_file
+function _clean_lvm_backing_file {
+ local backing_file=$1
+
+ # if the backing physical device is a loop device, it was probably setup by devstack
+ if [[ -n "$backing_file" ]] && [[ -e "$backing_file" ]]; then
+ local vg_dev=$(sudo losetup -j $backing_file | awk -F':' '/'$BACKING_FILE_SUFFIX'/ { print $1}')
+ sudo losetup -d $vg_dev
+ rm -f $backing_file
+ fi
+}
+
+# clean_lvm_volume_group() cleans up the volume group and removes the
+# backing file
+#
+# Usage: clean_lvm_volume_group $vg
+function clean_lvm_volume_group {
+ local vg=$1
+
+ _clean_lvm_volume_group $vg
+ # if there is no logical volume left, it's safe to attempt a cleanup
+ # of the backing file
+ if [[ -z "$(sudo lvs --noheadings -o lv_name $vg 2>/dev/null)" ]]; then
+ _clean_lvm_backing_file $DATA_DIR/$vg$BACKING_FILE_SUFFIX
+ fi
+}
+
+
+# _create_volume_group creates default volume group
+#
+# Usage: _create_lvm_volume_group() $vg $size
+function _create_lvm_volume_group {
+ local vg=$1
+ local size=$2
+
+ local backing_file=$DATA_DIR/$vg$BACKING_FILE_SUFFIX
+ if ! sudo vgs $vg; then
+ # Only create if the file doesn't already exists
+ [[ -f $DATA_DIR/$backing_file ]] || truncate -s $size $backing_file
+ local vg_dev=`sudo losetup -f --show $backing_file`
+
+ # Only create volume group if it doesn't already exist
+ if ! sudo vgs $vg; then
+ sudo vgcreate $vg $vg_dev
+ fi
+ fi
+}
+
+# init_lvm_volume_group() initializes the volume group creating the backing
+# file if necessary
+#
+# Usage: init_lvm_volume_group() $vg
+function init_lvm_volume_group {
+ local vg=$1
+ local size=$2
+ # Start with a clean volume group
+ _create_lvm_volume_group $vg $size
+
+ if is_fedora || is_suse; then
+ # service is not started by default
+ start_service tgtd
+ fi
+
+ # Remove iscsi targets
+ sudo tgtadm --op show --mode target | grep Target | cut -f3 -d ' ' | sudo xargs -n1 tgt-admin --delete || true
+
+ _clean_lvm_volume_group $vg
+}
+
+# Restore xtrace
+$MY_XTRACE
+
+# mode: shell-script
+# End:
diff --git a/lib/neutron b/lib/neutron
index b4d0b8c..3c6b0db 100755
--- a/lib/neutron
+++ b/lib/neutron
@@ -592,7 +592,7 @@
# init_neutron() - Initialize databases, etc.
function init_neutron {
- recreate_database $Q_DB_NAME utf8
+ recreate_database $Q_DB_NAME
# Run Neutron db migrations
$NEUTRON_BIN_DIR/neutron-db-manage --config-file $NEUTRON_CONF --config-file /$Q_PLUGIN_CONF_FILE upgrade head
for svc in fwaas lbaas vpnaas; do
@@ -699,7 +699,7 @@
run_process q-dhcp "python $AGENT_DHCP_BINARY --config-file $NEUTRON_CONF --config-file=$Q_DHCP_CONF_FILE"
if is_provider_network; then
- sudo ovs-vsctl add-port $OVS_PHYSICAL_BRIDGE $PUBLIC_INTERFACE
+ sudo ovs-vsctl --no-wait -- --may-exist add-port $OVS_PHYSICAL_BRIDGE $PUBLIC_INTERFACE
sudo ip link set $OVS_PHYSICAL_BRIDGE up
sudo ip link set br-int up
sudo ip link set $PUBLIC_INTERFACE up
@@ -837,6 +837,9 @@
# Format logging
if [ "$LOG_COLOR" == "True" ] && [ "$SYSLOG" == "False" ]; then
setup_colorized_logging $NEUTRON_CONF DEFAULT project_id
+ else
+ # Show user_name and project_name by default like in nova
+ iniset $NEUTRON_CONF DEFAULT logging_context_format_string "%(asctime)s.%(msecs)03d %(levelname)s %(name)s [%(request_id)s %(user_name)s %(project_name)s] %(instance)s%(message)s"
fi
if is_service_enabled tls-proxy; then
diff --git a/lib/neutron_plugins/midonet b/lib/neutron_plugins/midonet
index eb27ed6..23ad8b2 100644
--- a/lib/neutron_plugins/midonet
+++ b/lib/neutron_plugins/midonet
@@ -29,6 +29,18 @@
Q_PLUGIN_CONF_PATH=etc/neutron/plugins/midonet
Q_PLUGIN_CONF_FILENAME=midonet.ini
Q_PLUGIN_CLASS="neutron.plugins.midonet.plugin.MidonetPluginV2"
+
+ # MidoNet implements LBaaS API in the plugin, not as an LBaaS driver.
+ # In this model, the plugin references the 'neutron_lbaas' module but
+ # does not require starting an LBaaS service. Devstack, however, clones
+ # 'neutron_lbaas' only if 'lbaas' service is enabled. To get around this,
+ # always clone 'neutron_lbaas' so that it is made available to the plugin.
+ # Also, discontinue if the 'lbaas' service is enabled.
+ if is_service_enabled q-lbaas; then
+ die $LINENO "LBaaS service should be disabled for the MidoNet plugin"
+ fi
+ git_clone $NEUTRON_LBAAS_REPO $NEUTRON_LBAAS_DIR $NEUTRON_LBAAS_BRANCH
+ setup_develop $NEUTRON_LBAAS_DIR
}
function neutron_plugin_configure_debug_command {
diff --git a/lib/nova b/lib/nova
index 0e9282b..76212ed 100644
--- a/lib/nova
+++ b/lib/nova
@@ -547,6 +547,11 @@
iniset $NOVA_CONF DEFAULT ec2_workers "$API_WORKERS"
iniset $NOVA_CONF DEFAULT metadata_workers "$API_WORKERS"
+ if [[ "$NOVA_BACKEND" == "LVM" ]]; then
+ iniset $NOVA_CONF libvirt images_type "lvm"
+ iniset $NOVA_CONF libvirt images_volume_group $DEFAULT_VOLUME_GROUP_NAME
+ fi
+
if is_ssl_enabled_service glance || is_service_enabled tls-proxy; then
iniset $NOVA_CONF DEFAULT glance_protocol https
fi
@@ -623,16 +628,13 @@
# Only do this step once on the API node for an entire cluster.
if is_service_enabled $DATABASE_BACKENDS && is_service_enabled n-api; then
# (Re)create nova database
- # Explicitly use latin1: to avoid lp#829209, nova expects the database to
- # use latin1 by default, and then upgrades the database to utf8 (see the
- # 082_essex.py in nova)
- recreate_database nova latin1
+ recreate_database nova
# Migrate nova database
$NOVA_BIN_DIR/nova-manage db sync
if is_service_enabled n-cell; then
- recreate_database $NOVA_CELLS_DB latin1
+ recreate_database $NOVA_CELLS_DB
fi
fi
diff --git a/lib/nova_plugins/hypervisor-ironic b/lib/nova_plugins/hypervisor-ironic
index 4c2043b..0169d73 100644
--- a/lib/nova_plugins/hypervisor-ironic
+++ b/lib/nova_plugins/hypervisor-ironic
@@ -56,6 +56,8 @@
function install_nova_hypervisor {
if ! is_service_enabled neutron; then
die $LINENO "Neutron should be enabled for usage of the Ironic Nova driver."
+ elif is_ironic_hardware; then
+ return
fi
install_libvirt
if [[ "$IRONIC_VM_LOG_CONSOLE" == "True" ]] && is_ubuntu; then
diff --git a/lib/sahara b/lib/sahara
index c902d38..995935a 100644
--- a/lib/sahara
+++ b/lib/sahara
@@ -11,6 +11,7 @@
# install_sahara
# install_python_saharaclient
# configure_sahara
+# sahara_register_images
# start_sahara
# stop_sahara
# cleanup_sahara
@@ -128,6 +129,9 @@
if is_service_enabled neutron; then
iniset $SAHARA_CONF_FILE DEFAULT use_neutron true
iniset $SAHARA_CONF_FILE DEFAULT use_floating_ips true
+ else
+ iniset $SAHARA_CONF_FILE DEFAULT use_neutron false
+ iniset $SAHARA_CONF_FILE DEFAULT use_floating_ips false
fi
if is_service_enabled heat; then
@@ -143,7 +147,7 @@
setup_colorized_logging $SAHARA_CONF_FILE DEFAULT
fi
- recreate_database sahara utf8
+ recreate_database sahara
$SAHARA_BIN_DIR/sahara-db-manage --config-file $SAHARA_CONF_FILE upgrade head
}
@@ -161,6 +165,17 @@
fi
}
+# sahara_register_images() - Registers images in sahara image registry
+function sahara_register_images {
+ if is_service_enabled heat && [[ ! -z "$HEAT_CFN_IMAGE_URL" ]]; then
+ # Register heat image for Fake plugin
+ local fake_plugin_properties="--property _sahara_tag_0.1=True"
+ fake_plugin_properties+=" --property _sahara_tag_fake=True"
+ fake_plugin_properties+=" --property _sahara_username=fedora"
+ openstack --os-url $GLANCE_SERVICE_PROTOCOL://$GLANCE_HOSTPORT image set $(basename "$HEAT_CFN_IMAGE_URL" ".qcow2") $fake_plugin_properties
+ fi
+}
+
# start_sahara() - Start running processes, including screen
function start_sahara {
run_process sahara "$SAHARA_BIN_DIR/sahara-all --config-file $SAHARA_CONF_FILE"
diff --git a/lib/swift b/lib/swift
index b5577d8..ee4543c 100644
--- a/lib/swift
+++ b/lib/swift
@@ -401,11 +401,10 @@
sed -i "/^pipeline/ { s/tempauth/${swift_pipeline} ${SWIFT_EXTRAS_MIDDLEWARE}/ ;}" ${SWIFT_CONFIG_PROXY_SERVER}
sed -i "/^pipeline/ { s/proxy-server/${SWIFT_EXTRAS_MIDDLEWARE_LAST} proxy-server/ ; }" ${SWIFT_CONFIG_PROXY_SERVER}
- iniuncomment ${SWIFT_CONFIG_PROXY_SERVER} filter:tempauth account_autocreate
+
iniset ${SWIFT_CONFIG_PROXY_SERVER} app:proxy-server account_autocreate true
- iniuncomment ${SWIFT_CONFIG_PROXY_SERVER} filter:tempauth reseller_prefix
- iniset ${SWIFT_CONFIG_PROXY_SERVER} filter:tempauth reseller_prefix "TEMPAUTH"
+
# Configure Crossdomain
iniset ${SWIFT_CONFIG_PROXY_SERVER} filter:crossdomain use "egg:swift#crossdomain"
@@ -422,6 +421,13 @@
iniuncomment ${SWIFT_CONFIG_PROXY_SERVER} filter:keystoneauth operator_roles
iniset ${SWIFT_CONFIG_PROXY_SERVER} filter:keystoneauth operator_roles "Member, admin"
+ # Configure Tempauth. In the sample config file, Keystoneauth is commented
+ # out. Make sure we uncomment Tempauth after we uncomment Keystoneauth
+ # otherwise, this code also sets the reseller_prefix for Keystoneauth.
+ iniuncomment ${SWIFT_CONFIG_PROXY_SERVER} filter:tempauth account_autocreate
+ iniuncomment ${SWIFT_CONFIG_PROXY_SERVER} filter:tempauth reseller_prefix
+ iniset ${SWIFT_CONFIG_PROXY_SERVER} filter:tempauth reseller_prefix "TEMPAUTH"
+
if is_service_enabled swift3; then
cat <<EOF >>${SWIFT_CONFIG_PROXY_SERVER}
# NOTE(chmou): s3token middleware is not updated yet to use only
diff --git a/lib/trove b/lib/trove
index abf4e87..3249ce0 100644
--- a/lib/trove
+++ b/lib/trove
@@ -199,7 +199,7 @@
# init_trove() - Initializes Trove Database as a Service
function init_trove {
# (Re)Create trove db
- recreate_database trove utf8
+ recreate_database trove
# Initialize the trove database
$TROVE_BIN_DIR/trove-manage db_sync
diff --git a/stack.sh b/stack.sh
index 585d1ce..aeaaf60 100755
--- a/stack.sh
+++ b/stack.sh
@@ -379,15 +379,14 @@
fi
if [[ -n "$LOGFILE" ]]; then
- # First clean up old log files. Use the user-specified ``LOGFILE``
- # as the template to search for, appending '.*' to match the date
- # we added on earlier runs.
- LOGDIR=$(dirname "$LOGFILE")
- LOGFILENAME=$(basename "$LOGFILE")
- mkdir -p $LOGDIR
- find $LOGDIR -maxdepth 1 -name $LOGFILENAME.\* -mtime +$LOGDAYS -exec rm {} \;
+ # Clean up old log files. Append '.*' to the user-specified
+ # ``LOGFILE`` to match the date in the search template.
+ LOGFILE_DIR="${LOGFILE%/*}" # dirname
+ LOGFILE_NAME="${LOGFILE##*/}" # basename
+ mkdir -p $LOGFILE_DIR
+ find $LOGFILE_DIR -maxdepth 1 -name $LOGFILE_NAME.\* -mtime +$LOGDAYS -exec rm {} \;
LOGFILE=$LOGFILE.${CURRENT_LOG_TIME}
- SUMFILE=$LOGFILE.${CURRENT_LOG_TIME}.summary
+ SUMFILE=$LOGFILE.summary.${CURRENT_LOG_TIME}
# Redirect output according to config
@@ -408,8 +407,8 @@
echo_summary "stack.sh log $LOGFILE"
# Specified logfile name always links to the most recent log
- ln -sf $LOGFILE $LOGDIR/$LOGFILENAME
- ln -sf $SUMFILE $LOGDIR/$LOGFILENAME.summary
+ ln -sf $LOGFILE $LOGFILE_DIR/$LOGFILE_NAME
+ ln -sf $SUMFILE $LOGFILE_DIR/$LOGFILE_NAME.summary
else
# Set up output redirection without log files
# Set fd 3 to a copy of stdout. So we can set fd 1 without losing
@@ -523,6 +522,7 @@
source $TOP_DIR/lib/infra
source $TOP_DIR/lib/oslo
source $TOP_DIR/lib/stackforge
+source $TOP_DIR/lib/lvm
source $TOP_DIR/lib/horizon
source $TOP_DIR/lib/keystone
source $TOP_DIR/lib/glance
@@ -939,6 +939,10 @@
# A better kind of sysstat, with the top process per time slice
start_dstat
+# Initialize default LVM volume group
+# -----------------------------------
+init_lvm_volume_group $DEFAULT_VOLUME_GROUP_NAME $VOLUME_BACKING_FILE_SIZE
+
# Start Services
# ==============
diff --git a/stackrc b/stackrc
index 2568202..2dd56e8 100644
--- a/stackrc
+++ b/stackrc
@@ -697,7 +697,8 @@
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}
+# Set to 0 to disable shallow cloning
+GIT_DEPTH=${GIT_DEPTH:-0}
# Use native SSL for servers in SSL_ENABLED_SERVICES
USE_SSL=$(trueorfalse False USE_SSL)
diff --git a/tools/xen/build_xva.sh b/tools/xen/build_xva.sh
index 7c8e620..7002e6e 100755
--- a/tools/xen/build_xva.sh
+++ b/tools/xen/build_xva.sh
@@ -119,9 +119,7 @@
chown -R $STACK_USER /opt/stack
- if su -c "/opt/stack/run.sh" $STACK_USER; then
- touch /var/run/devstack.succeeded
- fi
+ su -c "/opt/stack/run.sh" $STACK_USER
# Update /etc/issue
{
@@ -177,8 +175,19 @@
cat <<EOF >$STAGING_DIR/opt/stack/run.sh
#!/bin/bash
set -eux
-cd /opt/stack/devstack
-./unstack.sh || true
-./stack.sh
+(
+ flock -n 9 || exit 1
+
+ [ -e /opt/stack/runsh.succeeded ] && rm /opt/stack/runsh.succeeded
+ echo \$\$ >> /opt/stack/run_sh.pid
+
+ cd /opt/stack/devstack
+ ./unstack.sh || true
+ ./stack.sh
+
+ # Got to the end - success
+ touch /opt/stack/runsh.succeeded
+ rm /opt/stack/run_sh.pid
+) 9> /opt/stack/.runsh_lock
EOF
chmod 755 $STAGING_DIR/opt/stack/run.sh
diff --git a/tools/xen/install_os_domU.sh b/tools/xen/install_os_domU.sh
index 3a63473..546ead6 100755
--- a/tools/xen/install_os_domU.sh
+++ b/tools/xen/install_os_domU.sh
@@ -365,25 +365,27 @@
if [ "$WAIT_TILL_LAUNCH" = "1" ] && [ -e ~/.ssh/id_rsa.pub ] && [ "$COPYENV" = "1" ]; then
set +x
- echo "VM Launched - Waiting for devstack to start"
- while ! ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "service devstack status | grep -q running"; do
+ echo "VM Launched - Waiting for run.sh"
+ while ! ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "test -e /opt/stack/run_sh.pid"; do
sleep 10
done
echo -n "devstack service is running, waiting for stack.sh to start logging..."
- while ! ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "test -e /tmp/devstack/log/stack.log"; do
- sleep 10
- done
+ pid=`ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "cat /opt/stack/run_sh.pid"`
+ if [ -n "$SCREEN_LOGDIR" ]; then
+ while ! ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "test -e ${SCREEN_LOGDIR}/stack.log"; do
+ sleep 10
+ done
+
+ ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "tail --pid $pid -n +1 -f ${SCREEN_LOGDIR}/stack.log"
+ else
+ echo -n "SCREEN_LOGDIR not set; just waiting for process $pid to finish"
+ ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "wait $pid"
+ fi
+
set -x
-
- # Watch devstack's output (which doesn't start until stack.sh is running,
- # but wait for run.sh (which starts stack.sh) to exit as that is what
- # hopefully writes the succeeded cookie.
- pid=`ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS pgrep run.sh`
- ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS "tail --pid $pid -n +1 -f /tmp/devstack/log/stack.log"
-
# Fail if devstack did not succeed
- ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS 'test -e /var/run/devstack.succeeded'
+ ssh_no_check -q stack@$OS_VM_MANAGEMENT_ADDRESS 'test -e /opt/stack/runsh.succeeded'
set +x
echo "################################################################################"
@@ -401,7 +403,7 @@
echo ""
echo "ssh into your domU now: 'ssh stack@$OS_VM_MANAGEMENT_ADDRESS' using your password"
echo "and then do: 'sudo service devstack status' to check if devstack is still running."
- echo "Check that /var/run/devstack.succeeded exists"
+ echo "Check that /opt/stack/runsh.succeeded exists"
echo ""
echo "When devstack completes, you can visit the OpenStack Dashboard"
echo "at http://$OS_VM_SERVICES_ADDRESS, and contact other services at the usual ports."
diff --git a/unstack.sh b/unstack.sh
index bff01d1..b8b7f4a 100755
--- a/unstack.sh
+++ b/unstack.sh
@@ -55,6 +55,7 @@
source $TOP_DIR/lib/infra
source $TOP_DIR/lib/oslo
source $TOP_DIR/lib/stackforge
+source $TOP_DIR/lib/lvm
source $TOP_DIR/lib/horizon
source $TOP_DIR/lib/keystone
source $TOP_DIR/lib/glance
@@ -177,3 +178,5 @@
screen -X -S $SESSION quit
fi
fi
+
+clean_lvm_volume_group $DEFAULT_VOLUME_GROUP_NAME