Merge "Drop keystone eventlet support"
diff --git a/data/devstack-plugins-registry.header b/data/devstack-plugins-registry.header
index 46d5e60..f105fe9 100644
--- a/data/devstack-plugins-registry.header
+++ b/data/devstack-plugins-registry.header
@@ -18,7 +18,3 @@
The following are plugins that a script has found in the openstack/
namespace, which includes but is not limited to official OpenStack
projects.
-
-+----------------------------+-------------------------------------------------------------------------+
-|Plugin Name |URL |
-+----------------------------+-------------------------------------------------------------------------+
diff --git a/doc/source/faq.rst b/doc/source/faq.rst
index cd48915..7793d8e 100644
--- a/doc/source/faq.rst
+++ b/doc/source/faq.rst
@@ -85,7 +85,7 @@
function sourceopenrc {
pushd ~/devstack >/dev/null
- eval $(bash -c ". openrc $1 $2;env|sed -n '/OS_/ { s/^/export /;p}'")
+ eval $(bash -c ". openrc $1 $2 >/dev/null;env|sed -n '/OS_/ { s/^/export /;p}'")
popd >/dev/null
}
diff --git a/doc/source/guides/neutron.rst b/doc/source/guides/neutron.rst
index 4406aa0..6ac3993 100644
--- a/doc/source/guides/neutron.rst
+++ b/doc/source/guides/neutron.rst
@@ -19,6 +19,18 @@
the OpenStack API traffic, and management traffic.
+.. warning::
+
+ When using a single interface networking setup, there will be a
+ temporary network outage as your IP address is moved from the
+ physical NIC of your machine, to the OVS bridge. If you are SSH'd
+ into the machine from another computer, there is a risk of being
+ disconnected from your ssh session (due to arp cache
+ invalidation), which would stop the stack.sh or leave it in an
+ unfinished state. In these cases, start stack.sh inside its own
+ screen session so it can continue to run.
+
+
Physical Network Setup
----------------------
@@ -443,13 +455,18 @@
Non-Standard MTU on the Physical Network
----------------------------------------
-DevStack defaults to assume that the MTU on the physical network
-is 1500. A different MTU can be specified by adding the following to
-the `localrc` part of `local.conf` on each machine.
+Neutron by default uses a MTU of 1500 bytes, which is
+the standard MTU for Ethernet.
+
+A different MTU can be specified by adding the following to
+the Neutron section of `local.conf`. For example,
+if you have network equipment that supports jumbo frames, you could
+set the MTU to 9000 bytes by adding the following
::
- Q_ML2_PLUGIN_PATH_MTU=1500
+ [[post-config|/$Q_PLUGIN_CONF_FILE]]
+ global_physnet_mtu = 9000
Disabling Next Generation Firewall Tools
diff --git a/files/debs/ceilometer-collector b/files/debs/ceilometer-collector
deleted file mode 100644
index d1e9eef..0000000
--- a/files/debs/ceilometer-collector
+++ /dev/null
@@ -1,3 +0,0 @@
-libnspr4-dev
-mongodb-server #NOPRIME
-python-pymongo #NOPRIME
diff --git a/files/rpms-suse/ceilometer-collector b/files/rpms-suse/ceilometer-collector
deleted file mode 100644
index fc75ffa..0000000
--- a/files/rpms-suse/ceilometer-collector
+++ /dev/null
@@ -1,3 +0,0 @@
-# (devel:languages:python and server:database projects)
-mongodb
-# Not available in openSUSE main repositories, but can be fetched from OBS
diff --git a/files/rpms/ceilometer-collector b/files/rpms/ceilometer-collector
deleted file mode 100644
index a8b8118..0000000
--- a/files/rpms/ceilometer-collector
+++ /dev/null
@@ -1,3 +0,0 @@
-mongodb # NOPRIME
-mongodb-server #NOPRIME
-selinux-policy-targeted
diff --git a/functions-common b/functions-common
index 5ae9745..b0352d3 100644
--- a/functions-common
+++ b/functions-common
@@ -2322,8 +2322,9 @@
# Resolution is only in whole seconds, so should be used for long
# running activities.
-declare -A TOTAL_TIME
-declare -A START_TIME
+declare -A _TIME_TOTAL
+declare -A _TIME_START
+declare -r _TIME_BEGIN=$(date +%s)
# time_start $name
#
@@ -2331,11 +2332,11 @@
# already started.
function time_start {
local name=$1
- local start_time=${START_TIME[$name]}
+ local start_time=${_TIME_START[$name]}
if [[ -n "$start_time" ]]; then
die $LINENO "Trying to start the clock on $name, but it's already been started"
fi
- START_TIME[$name]=$(date +%s)
+ _TIME_START[$name]=$(date +%s)
}
# time_stop $name
@@ -2351,32 +2352,53 @@
local start_time
name=$1
- start_time=${START_TIME[$name]}
+ start_time=${_TIME_START[$name]}
if [[ -z "$start_time" ]]; then
die $LINENO "Trying to stop the clock on $name, but it was never started"
fi
end_time=$(date +%s)
elapsed_time=$(($end_time - $start_time))
- total=${TOTAL_TIME[$name]:-0}
+ total=${_TIME_TOTAL[$name]:-0}
# reset the clock so we can start it in the future
- START_TIME[$name]=""
- TOTAL_TIME[$name]=$(($total + $elapsed_time))
+ _TIME_START[$name]=""
+ _TIME_TOTAL[$name]=$(($total + $elapsed_time))
}
# time_totals
-#
-# prints out total time
+# Print out total time summary
function time_totals {
- echo
- echo "========================"
- echo "DevStack Components Timed"
- echo "========================"
- echo
- for t in ${!TOTAL_TIME[*]}; do
- local v=${TOTAL_TIME[$t]}
- echo "$t - $v secs"
+ local elapsed_time
+ local end_time
+ local len=15
+ local xtrace
+
+ end_time=$(date +%s)
+ elapsed_time=$(($end_time - $_TIME_BEGIN))
+
+ # pad 1st column this far
+ for t in ${!_TIME_TOTAL[*]}; do
+ if [[ ${#t} -gt $len ]]; then
+ len=${#t}
+ fi
done
+
+ xtrace=$(set +o | grep xtrace)
+ set +o xtrace
+
+ echo
+ echo "========================="
+ echo "DevStack Component Timing"
+ echo "========================="
+ printf "%-${len}s %3d\n" "Total runtime" "$elapsed_time"
+ echo
+ for t in ${!_TIME_TOTAL[*]}; do
+ local v=${_TIME_TOTAL[$t]}
+ printf "%-${len}s %3d\n" "$t" "$v"
+ done
+ echo "========================="
+
+ $xtrace
}
# Restore xtrace
diff --git a/lib/cinder b/lib/cinder
index 6401f2d..1b6a956 100644
--- a/lib/cinder
+++ b/lib/cinder
@@ -272,6 +272,8 @@
iniset $CINDER_CONF DEFAULT os_region_name "$REGION_NAME"
+ iniset $CINDER_CONF privsep_osbrick helper_command "sudo cinder-rootwrap \$rootwrap_config privsep-helper --config-file $CINDER_CONF"
+
if is_service_enabled c-vol && [[ -n "$CINDER_ENABLED_BACKENDS" ]]; then
local enabled_backends=""
local default_name=""
diff --git a/lib/lvm b/lib/lvm
index ae6023a..b9d7c39 100644
--- a/lib/lvm
+++ b/lib/lvm
@@ -124,7 +124,7 @@
if [ "$CINDER_ISCSI_HELPER" = "lioadm" ]; then
sudo cinder-rtstool get-targets | sudo xargs -rn 1 cinder-rtstool delete
else
- sudo tgtadm --op show --mode target | grep Target | cut -f3 -d ' ' | sudo xargs -n1 tgt-admin --delete || true
+ sudo tgtadm --op show --mode target | awk '/Target/ {print $3}' | sudo xargs -r -n1 tgt-admin --delete
fi
_clean_lvm_volume_group $vg
}
diff --git a/lib/neutron-legacy b/lib/neutron-legacy
index e06a020..34f9840 100644
--- a/lib/neutron-legacy
+++ b/lib/neutron-legacy
@@ -1453,9 +1453,13 @@
function setup_neutron_debug {
if [[ "$Q_USE_DEBUG_COMMAND" == "True" ]]; then
public_net_id=`_get_net_id $PUBLIC_NETWORK_NAME`
- neutron-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-create --device-owner compute $public_net_id
+ if [[ -n $public_net_id ]]; then
+ neutron-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-create --device-owner compute $public_net_id
+ fi
private_net_id=`_get_net_id $PRIVATE_NETWORK_NAME`
- neutron-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-create --device-owner compute $private_net_id
+ if [[ -n $private_net_id ]]; then
+ neutron-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-create --device-owner compute $private_net_id
+ fi
fi
}
diff --git a/lib/neutron_plugins/ml2 b/lib/neutron_plugins/ml2
index 0483ef1..30e1b03 100644
--- a/lib/neutron_plugins/ml2
+++ b/lib/neutron_plugins/ml2
@@ -40,12 +40,6 @@
# L3 Plugin to load for ML2
ML2_L3_PLUGIN=${ML2_L3_PLUGIN:-neutron.services.l3_router.l3_router_plugin.L3RouterPlugin}
-# Underlying path MTU for physical network managing br-tun; use '-' instead of
-# ':-' to allow people to explicitly override this to blank, to disable
-# automatic MTU calculation for tunnelled tenant networks
-Q_ML2_PLUGIN_PATH_MTU=${Q_ML2_PLUGIN_PATH_MTU-1500}
-
-
function populate_ml2_config {
CONF=$1
SECTION=$2
@@ -83,12 +77,6 @@
echo "WARNING - The ml2 plugin is using local tenant networks, with no connectivity between hosts."
fi
- # Enable ml2 mtu calculation mechanism for networks by providing path mtu
- # value for physical devices that are used for br-tun traffic
- if [[ "$ENABLE_TENANT_TUNNELS" == "True" ]] && [[ "$Q_ML2_PLUGIN_PATH_MTU" != "" ]]; then
- iniset /$Q_PLUGIN_CONF_FILE ml2 path_mtu "$Q_ML2_PLUGIN_PATH_MTU"
- fi
-
# Allow for overrding VLAN configuration (for example, to configure provider
# VLANs) by first checking if Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS is set.
if [ "$Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS" == "" ]; then
diff --git a/lib/nova b/lib/nova
index 2b8fefa..ab2bef8 100644
--- a/lib/nova
+++ b/lib/nova
@@ -493,6 +493,8 @@
iniset $NOVA_CONF DEFAULT bindir "/usr/bin"
fi
+ iniset $NOVA_CONF privsep_osbrick helper_command "sudo nova-rootwrap \$rootwrap_config privsep-helper --config-file $NOVA_CONF"
+
if is_service_enabled n-api; then
if is_service_enabled n-api-meta; then
# If running n-api-meta as a separate service
@@ -570,7 +572,7 @@
iniset $NOVA_CONF vnc enabled true
iniset $NOVA_CONF vnc vncserver_listen "$VNCSERVER_LISTEN"
iniset $NOVA_CONF vnc vncserver_proxyclient_address "$VNCSERVER_PROXYCLIENT_ADDRESS"
- iniset $NOVA_CONF DEFAULT novncproxy_host "$NOVA_SERVICE_LISTEN_ADDRESS"
+ iniset $NOVA_CONF vnc novncproxy_host "$NOVA_SERVICE_LISTEN_ADDRESS"
iniset $NOVA_CONF vnc xvpvncproxy_host "$NOVA_SERVICE_LISTEN_ADDRESS"
else
iniset $NOVA_CONF vnc enabled false
@@ -708,6 +710,10 @@
recreate_database $NOVA_API_DB
$NOVA_BIN_DIR/nova-manage api_db sync
+
+ # Run online migrations on the new databases
+ # Needed for flavor conversion
+ $NOVA_BIN_DIR/nova-manage db online_data_migrations
fi
create_nova_cache_dir
diff --git a/lib/tempest b/lib/tempest
index 19b63d1..ed26caf 100644
--- a/lib/tempest
+++ b/lib/tempest
@@ -325,6 +325,24 @@
if [[ "$OFFLINE" != "True" ]]; then
tox -revenv --notest
fi
+
+ # Auth
+ iniset $TEMPEST_CONFIG auth tempest_roles "Member"
+ if [[ $TEMPEST_USE_TEST_ACCOUNTS == "True" ]]; then
+ if [[ $TEMPEST_HAS_ADMIN == "True" ]]; then
+ tempest-account-generator -c $TEMPEST_CONFIG --os-username $admin_username --os-password "$password" --os-tenant-name $admin_tenant_name -r $TEMPEST_CONCURRENCY --with-admin etc/accounts.yaml
+ else
+ tempest-account-generator -c $TEMPEST_CONFIG --os-username $admin_username --os-password "$password" --os-tenant-name $admin_tenant_name -r $TEMPEST_CONCURRENCY etc/accounts.yaml
+ fi
+ iniset $TEMPEST_CONFIG auth use_dynamic_credentials False
+ iniset $TEMPEST_CONFIG auth test_accounts_file "etc/accounts.yaml"
+ elif [[ $TEMPEST_HAS_ADMIN == "False" ]]; then
+ iniset $TEMPEST_CONFIG auth use_dynamic_credentials ${TEMPEST_ALLOW_TENANT_ISOLATION:-False}
+
+ else
+ iniset $TEMPEST_CONFIG auth use_dynamic_credentials ${TEMPEST_ALLOW_TENANT_ISOLATION:-True}
+ fi
+
# NOTE(mtreinish): Respect constraints on tempest verify-config venv
tox -evenv -- pip install -c $REQUIREMENTS_DIR/upper-constraints.txt -r requirements.txt
tox -evenv -- tempest verify-config -uro $tmp_cfg_file
@@ -553,23 +571,6 @@
iniset $TEMPEST_CONFIG service_available cinder "False"
fi
- # Auth
- iniset $TEMPEST_CONFIG auth tempest_roles "Member"
- if [[ $TEMPEST_USE_TEST_ACCOUNTS == "True" ]]; then
- if [[ $TEMPEST_HAS_ADMIN == "True" ]]; then
- tempest-account-generator -c $TEMPEST_CONFIG --os-username $admin_username --os-password "$password" --os-tenant-name $admin_tenant_name -r $TEMPEST_CONCURRENCY --with-admin etc/accounts.yaml
- else
- tempest-account-generator -c $TEMPEST_CONFIG --os-username $admin_username --os-password "$password" --os-tenant-name $admin_tenant_name -r $TEMPEST_CONCURRENCY etc/accounts.yaml
- fi
- iniset $TEMPEST_CONFIG auth use_dynamic_credentials False
- iniset $TEMPEST_CONFIG auth test_accounts_file "etc/accounts.yaml"
- elif [[ $TEMPEST_HAS_ADMIN == "False" ]]; then
- iniset $TEMPEST_CONFIG auth use_dynamic_credentials ${TEMPEST_ALLOW_TENANT_ISOLATION:-False}
-
- else
- iniset $TEMPEST_CONFIG auth use_dynamic_credentials ${TEMPEST_ALLOW_TENANT_ISOLATION:-True}
- fi
-
# Restore IFS
IFS=$ifs
}
diff --git a/lib/tls b/lib/tls
index f4740b8..ca57ed4 100644
--- a/lib/tls
+++ b/lib/tls
@@ -257,6 +257,14 @@
local common_name=$3
local alt_names=$4
+ if [ "$common_name" != "$SERVICE_HOST" ]; then
+ if [[ -z "$alt_names" ]]; then
+ alt_names="DNS:$SERVICE_HOST"
+ else
+ alt_names="$alt_names,DNS:$SERVICE_HOST"
+ fi
+ fi
+
# Only generate the certificate if it doesn't exist yet on the disk
if [ ! -r "$ca_dir/$cert_name.crt" ]; then
# Generate a signing request
diff --git a/stack.sh b/stack.sh
index 5c16f04..793b7dc 100755
--- a/stack.sh
+++ b/stack.sh
@@ -799,7 +799,7 @@
fi
fi
-if is_service_enabled s-proxy; then
+if is_service_enabled swift; then
if is_service_enabled ceilometer; then
install_ceilometermiddleware
fi
@@ -1004,10 +1004,6 @@
bootstrap_keystone
fi
- if is_service_enabled tls-proxy; then
- export OS_CACERT=$INT_CA_DIR/ca-chain.pem
- fi
-
# Rather than just export these, we write them out to a
# intermediate userrc file that can also be used to debug if
# something goes wrong between here and running
@@ -1028,6 +1024,10 @@
EOF
+ if is_service_enabled tls-proxy; then
+ echo "export OS_CACERT=$INT_CA_DIR/ca-chain.pem" >> $TOP_DIR/userrc_early
+ fi
+
source $TOP_DIR/userrc_early
create_keystone_accounts
@@ -1118,7 +1118,7 @@
# Storage Service
# ---------------
-if is_service_enabled s-proxy; then
+if is_service_enabled swift; then
echo_summary "Configuring Swift"
init_swift
fi
@@ -1172,7 +1172,7 @@
# Only run the services specified in ``ENABLED_SERVICES``
# Launch Swift Services
-if is_service_enabled s-proxy; then
+if is_service_enabled swift; then
echo_summary "Starting Swift"
start_swift
fi
diff --git a/tools/generate-devstack-plugins-list.py b/tools/generate-devstack-plugins-list.py
index 1fa5501..aeec4dd 100644
--- a/tools/generate-devstack-plugins-list.py
+++ b/tools/generate-devstack-plugins-list.py
@@ -23,9 +23,12 @@
# working directory
# * network access to https://git.openstack.org/cgit
+import logging
import json
import requests
+logging.basicConfig(level=logging.DEBUG)
+
url = 'https://review.openstack.org/projects/'
# This is what a project looks like
@@ -37,6 +40,8 @@
'''
def is_in_openstack_namespace(proj):
+ # only interested in openstack namespace (e.g. not retired
+ # stackforge, etc)
return proj.startswith('openstack/')
# Rather than returning a 404 for a nonexistent file, cgit delivers a
@@ -50,10 +55,13 @@
else:
False
+logging.debug("Getting project list from %s" % url)
r = requests.get(url)
projects = sorted(filter(is_in_openstack_namespace, json.loads(r.text[4:])))
+logging.debug("Found %d projects" % len(projects))
found_plugins = filter(has_devstack_plugin, projects)
for project in found_plugins:
+ # strip of openstack/
print project[10:]
diff --git a/tools/generate-devstack-plugins-list.sh b/tools/generate-devstack-plugins-list.sh
index be3f60a..82486f5 100644
--- a/tools/generate-devstack-plugins-list.sh
+++ b/tools/generate-devstack-plugins-list.sh
@@ -38,6 +38,17 @@
# current working directory, it will be prepended or appended to
# the generated reStructuredText plugins table respectively.
+# Print the title underline for a RST table. Argument is the length
+# of the first column, second column is assumed to be "URL"
+function title_underline {
+ local len=$1
+ while [[ $len -gt 0 ]]; do
+ printf "="
+ len=$(( len - 1))
+ done
+ printf " ===\n"
+}
+
(
declare -A plugins
@@ -47,11 +58,24 @@
sorted_plugins=$(python tools/generate-devstack-plugins-list.py)
-for k in ${sorted_plugins}; do
- project=${k:0:28}
- giturl="git://git.openstack.org/openstack/${k:0:26}"
- printf "|%-28s|%-73s|\n" "${project}" "${giturl}"
- printf "+----------------------------+-------------------------------------------------------------------------+\n"
+# find the length of the name column & pad
+name_col_len=$(echo "${sorted_plugins}" | wc -L)
+name_col_len=$(( name_col_len + 2 ))
+
+# ====================== ===
+# Plugin Name URL
+# ====================== ===
+# foobar `git://... <http://...>`__
+# ...
+
+title_underline ${name_col_len}
+printf "%-${name_col_len}s %s\n" "Plugin Name" "URL"
+title_underline ${name_col_len}
+
+for plugin in ${sorted_plugins}; do
+ giturl="git://git.openstack.org/openstack/${plugin}"
+ gitlink="https://git.openstack.org/cgit/openstack/${plugin}"
+ printf "%-${name_col_len}s %s\n" "${p}" "\`${giturl} <${gitlink}>\`__"
done
if [[ -r data/devstack-plugins-registry.footer ]]; then
diff --git a/tools/install_pip.sh b/tools/install_pip.sh
index 87660a6..dfa4f42 100755
--- a/tools/install_pip.sh
+++ b/tools/install_pip.sh
@@ -2,12 +2,9 @@
# **install_pip.sh**
-# install_pip.sh [--pip-version <version>] [--use-get-pip] [--force]
-#
# Update pip and friends to a known common version
# Assumptions:
-# - update pip to $INSTALL_PIP_VERSION
# - if USE_PYTHON3=True, PYTHON3_VERSION refers to a version already installed
set -o errexit
diff --git a/tox.ini b/tox.ini
index 3dfc377..4ec2939 100644
--- a/tox.ini
+++ b/tox.ini
@@ -18,6 +18,7 @@
-not \( -type d -name .?\* -prune \) \
-not \( -type d -name doc -prune \) \
-not \( -type d -name shocco -prune \) \
+ -not \( -type f -name localrc -prune \) \
-type f \
-not -name \*~ \
-not -name \*.md \
diff --git a/unstack.sh b/unstack.sh
index 7a7c945..83703ec 100755
--- a/unstack.sh
+++ b/unstack.sh
@@ -175,10 +175,6 @@
stop_dstat
fi
-if is_service_enabled zookeeper; then
- stop_zookeeper
-fi
-
# Clean up the remainder of the screen processes
SCREEN=$(which screen)
if [[ -n "$SCREEN" ]]; then