Compare commits
62 Commits
master
...
ussuri-eol
| Author | SHA1 | Date | |
|---|---|---|---|
| b11a403c37 | |||
| f9dcabfdb0 | |||
| b0b0856093 | |||
| 88554dc210 | |||
| 7c1dc8ac91 | |||
| 387e65cb73 | |||
| a9852abfc5 | |||
| 9e7df2e553 | |||
| 7ffa73a782 | |||
| 7d3dd00e62 | |||
| 9c43f9fecc | |||
| d927b60178 | |||
| 18ca90b3ed | |||
| 775b1b8d2a | |||
| 5b7bf6caf0 | |||
| 97998fc4d2 | |||
| 878c3faf76 | |||
| 5a06e8777b | |||
| 4f9c1e084c | |||
| 8fd5979cb6 | |||
| 51d6d410b8 | |||
| 74a136ac98 | |||
| e5090646a9 | |||
| a6ede1b7a6 | |||
| ef784e195f | |||
| 10fdf258ba | |||
| 71c875d33c | |||
| 83f29bdd42 | |||
| 46acead9af | |||
| c92c97f98f | |||
| 20576c8286 | |||
| a3c9123c4d | |||
| f9c8bf27ca | |||
| 516f1a1ff0 | |||
| 0ebe7b072e | |||
| f482957e89 | |||
| 775dbd7ad9 | |||
| e6782311bf | |||
| 9b9c6d2d74 | |||
| 87d1da30a8 | |||
| 5951978c52 | |||
| e39706f2e6 | |||
| 417252efb4 | |||
| f36de3d3f3 | |||
| c6f810e61d | |||
| 96c2aa13fe | |||
| f8a6eac9b5 | |||
| c69caa4a8f | |||
| cd083d519c | |||
| 1e46c73fc0 | |||
| 7bfdd38104 | |||
| 9707dba338 | |||
| 47877cfdf6 | |||
| 15a663fd7f | |||
| 2f20a6ede6 | |||
| d018a05712 | |||
| 529222e35d | |||
| 5c92249649 | |||
| e6c3e23f91 | |||
| bca2abdb3d | |||
| 5c962a62f7 | |||
| 0a621628f5 |
@@ -2,3 +2,4 @@
|
||||
host=review.opendev.org
|
||||
port=29418
|
||||
project=openstack/devstack.git
|
||||
defaultbranch=stable/ussuri
|
||||
|
||||
+25
-52
@@ -48,16 +48,6 @@
|
||||
nodes:
|
||||
- controller
|
||||
|
||||
- nodeset:
|
||||
name: devstack-single-node-fedora-latest
|
||||
nodes:
|
||||
- name: controller
|
||||
label: fedora-31
|
||||
groups:
|
||||
- name: tempest
|
||||
nodes:
|
||||
- controller
|
||||
|
||||
- nodeset:
|
||||
name: openstack-two-node
|
||||
nodes:
|
||||
@@ -505,23 +495,6 @@
|
||||
nodeset: devstack-single-node-opensuse-15
|
||||
voting: false
|
||||
|
||||
- job:
|
||||
name: devstack-platform-fedora-latest
|
||||
parent: tempest-full-py3
|
||||
description: Fedora latest platform test
|
||||
nodeset: devstack-single-node-fedora-latest
|
||||
voting: false
|
||||
|
||||
- job:
|
||||
name: devstack-platform-fedora-latest-virt-preview
|
||||
parent: tempest-full-py3
|
||||
description: Fedora latest platform test using the virt-preview repo.
|
||||
nodeset: devstack-single-node-fedora-latest
|
||||
voting: false
|
||||
vars:
|
||||
devstack_localrc:
|
||||
ENABLE_FEDORA_VIRT_PREVIEW_REPO: true
|
||||
|
||||
- job:
|
||||
name: devstack-tox-base
|
||||
parent: devstack
|
||||
@@ -578,6 +551,7 @@
|
||||
|
||||
- job:
|
||||
name: devstack-unit-tests
|
||||
nodeset: ubuntu-bionic
|
||||
description: |
|
||||
Runs unit tests on devstack project.
|
||||
|
||||
@@ -587,14 +561,15 @@
|
||||
|
||||
- project:
|
||||
templates:
|
||||
- integrated-gate-py3
|
||||
# Note(frickler): No longer use this global template since we no
|
||||
# longer gate on grenade
|
||||
# - integrated-gate-py3
|
||||
- publish-openstack-docs-pti
|
||||
check:
|
||||
jobs:
|
||||
- devstack
|
||||
- devstack-ipv6
|
||||
- devstack-platform-opensuse-15
|
||||
- devstack-platform-fedora-latest
|
||||
- devstack-multinode
|
||||
- devstack-unit-tests
|
||||
- openstack-tox-bashate
|
||||
@@ -608,11 +583,14 @@
|
||||
- swift-dsvm-functional-py3:
|
||||
voting: false
|
||||
irrelevant-files: *dsvm-irrelevant-files
|
||||
- grenade-py3:
|
||||
- grenade:
|
||||
voting: false
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- tempest-full-py3
|
||||
- neutron-grenade-multinode:
|
||||
voting: false
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
@@ -625,7 +603,10 @@
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
# Making it non voting until we fix
|
||||
# https://storyboard.openstack.org/#!/story/2010057
|
||||
- openstacksdk-functional-devstack:
|
||||
voting: false
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
@@ -649,22 +630,23 @@
|
||||
- devstack-multinode
|
||||
- devstack-unit-tests
|
||||
- openstack-tox-bashate
|
||||
- neutron-grenade-multinode:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- tempest-full-py3
|
||||
# - neutron-grenade-multinode:
|
||||
# irrelevant-files:
|
||||
# - ^.*\.rst$
|
||||
# - ^doc/.*$
|
||||
- neutron-tempest-linuxbridge:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- grenade-py3:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- openstacksdk-functional-devstack:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
# - grenade:
|
||||
# irrelevant-files:
|
||||
# - ^.*\.rst$
|
||||
# - ^doc/.*$
|
||||
#- openstacksdk-functional-devstack:
|
||||
# irrelevant-files:
|
||||
# - ^.*\.rst$
|
||||
# - ^doc/.*$
|
||||
- tempest-ipv6-only:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
@@ -686,10 +668,6 @@
|
||||
# Next cycle we can remove this if everything run out stable enough.
|
||||
# * nova-multi-cell: maintained by nova and currently non-voting in the
|
||||
# check queue for nova changes but relies on devstack configuration
|
||||
# * devstack-platform-fedora-latest-virt-preview: Maintained by lyarwood
|
||||
# for Nova to allow early testing of the latest versions of Libvirt and
|
||||
# QEMU. Should only graduate out of experimental if it ever moves into
|
||||
# the check queue for Nova.
|
||||
|
||||
experimental:
|
||||
jobs:
|
||||
@@ -706,15 +684,11 @@
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- legacy-tempest-dsvm-neutron-dvr-multinode-full:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- neutron-tempest-dvr-ha-multinode-full:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- legacy-tempest-dsvm-lvm-multibackend:
|
||||
- cinder-tempest-lvm-multibackend:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
@@ -722,4 +696,3 @@
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- devstack-platform-fedora-latest-virt-preview
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
apache2
|
||||
apache2-dev
|
||||
bc
|
||||
bridge-utils
|
||||
bsdmainutils
|
||||
curl
|
||||
default-jre-headless # NOPRIME
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
apache2
|
||||
apache2-devel
|
||||
bc
|
||||
bridge-utils
|
||||
ca-certificates-mozilla
|
||||
curl
|
||||
gcc
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
bc
|
||||
bridge-utils
|
||||
curl
|
||||
dbus
|
||||
gcc
|
||||
|
||||
@@ -449,6 +449,7 @@ function is_fedora {
|
||||
|
||||
[ "$os_VENDOR" = "Fedora" ] || [ "$os_VENDOR" = "Red Hat" ] || \
|
||||
[ "$os_VENDOR" = "RedHatEnterpriseServer" ] || \
|
||||
[ "$os_VENDOR" = "RedHatEnterprise" ] || \
|
||||
[ "$os_VENDOR" = "CentOS" ] || [ "$os_VENDOR" = "OracleServer" ] || \
|
||||
[ "$os_VENDOR" = "Virtuozzo" ]
|
||||
}
|
||||
@@ -587,6 +588,18 @@ function git_clone {
|
||||
fi
|
||||
fi
|
||||
|
||||
# NOTE(ianw) 2022-04-13 : commit [1] has broken many assumptions
|
||||
# about how we clone and work with repos. Mark them safe globally
|
||||
# as a work-around.
|
||||
#
|
||||
# NOTE(danms): On bionic (and likely others) git-config may write
|
||||
# ~stackuser/.gitconfig if not run with sudo -H. Using --system
|
||||
# writes these changes to /etc/gitconfig which is more
|
||||
# discoverable anyway.
|
||||
#
|
||||
# [1] https://github.com/git/git/commit/8959555cee7ec045958f9b6dd62e541affb7e7d9
|
||||
sudo git config --system --add safe.directory ${git_dest}
|
||||
|
||||
# print out the results so we know what change was used in the logs
|
||||
cd $git_dest
|
||||
git show --oneline | head -1
|
||||
|
||||
+7
-1
@@ -173,7 +173,13 @@ function pip_install {
|
||||
local sudo_pip="sudo -H"
|
||||
if python3_enabled; then
|
||||
echo "Using python $PYTHON3_VERSION to install $package_dir because python3_enabled=True"
|
||||
sudo_pip="$sudo_pip LC_ALL=en_US.UTF-8"
|
||||
# See
|
||||
# https://github.com/pypa/setuptools/issues/2232
|
||||
# http://lists.openstack.org/pipermail/openstack-discuss/2020-August/016905.html
|
||||
# this makes setuptools >=50 use the platform distutils.
|
||||
# We only want to do this on global pip installs, not if
|
||||
# installing in a virtualenv
|
||||
sudo_pip="$sudo_pip LC_ALL=en_US.UTF-8 SETUPTOOLS_USE_DISTUTILS=stdlib "
|
||||
cmd_pip=$(get_pip_command $PYTHON3_VERSION)
|
||||
else
|
||||
echo "Using python $PYTHON2_VERSION to install $package_dir because python3_enabled=False"
|
||||
|
||||
+49
-21
@@ -82,26 +82,54 @@ function install_apache_uwsgi {
|
||||
apxs="apxs"
|
||||
fi
|
||||
|
||||
# Ubuntu xenial is back level on uwsgi so the proxy doesn't
|
||||
# actually work. Hence we have to build from source for now.
|
||||
# This varies based on packaged/installed. If we've
|
||||
# pip_installed, then the pip setup will only build a "python"
|
||||
# module that will be either python2 or python3 depending on what
|
||||
# it was built with.
|
||||
#
|
||||
# Centos 7 actually has the module in epel, but there was a big
|
||||
# push to disable epel by default. As such, compile from source
|
||||
# there as well.
|
||||
# For package installs, the distro ships both plugins and you need
|
||||
# to select the right one ... it will not be autodetected.
|
||||
if python3_enabled; then
|
||||
UWSGI_PYTHON_PLUGIN=python3
|
||||
else
|
||||
UWSGI_PYTHON_PLUGIN=python
|
||||
fi
|
||||
|
||||
local dir
|
||||
dir=$(mktemp -d)
|
||||
pushd $dir
|
||||
pip_install uwsgi
|
||||
pip download uwsgi -c $REQUIREMENTS_DIR/upper-constraints.txt
|
||||
local uwsgi
|
||||
uwsgi=$(ls uwsgi*)
|
||||
tar xvf $uwsgi
|
||||
cd uwsgi*/apache2
|
||||
sudo $apxs -i -c mod_proxy_uwsgi.c
|
||||
popd
|
||||
# delete the temp directory
|
||||
sudo rm -rf $dir
|
||||
if is_ubuntu; then
|
||||
install_package uwsgi \
|
||||
uwsgi-plugin-python \
|
||||
uwsgi-plugin-python3 \
|
||||
libapache2-mod-proxy-uwsgi
|
||||
elif is_fedora; then
|
||||
# Note httpd comes with mod_proxy_uwsgi and it is loaded by
|
||||
# default; the mod_proxy_uwsgi package actually conflicts now.
|
||||
# See:
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1574335
|
||||
#
|
||||
# Thus there is nothing else to do after this install
|
||||
install_package uwsgi \
|
||||
uwsgi-plugin-python3
|
||||
elif [[ $os_VENDOR =~ openSUSE ]]; then
|
||||
install_package uwsgi \
|
||||
uwsgi-python3 \
|
||||
apache2-mod_uwsgi
|
||||
else
|
||||
# Compile uwsgi from source.
|
||||
local dir
|
||||
dir=$(mktemp -d)
|
||||
pushd $dir
|
||||
pip_install uwsgi
|
||||
pip download uwsgi -c $REQUIREMENTS_DIR/upper-constraints.txt
|
||||
local uwsgi
|
||||
uwsgi=$(ls uwsgi*)
|
||||
tar xvf $uwsgi
|
||||
cd uwsgi*/apache2
|
||||
sudo $apxs -i -c mod_proxy_uwsgi.c
|
||||
popd
|
||||
# delete the temp directory
|
||||
sudo rm -rf $dir
|
||||
UWSGI_PYTHON_PLUGIN=python
|
||||
fi
|
||||
|
||||
if is_ubuntu || is_suse ; then
|
||||
# we've got to enable proxy and proxy_uwsgi for this to work
|
||||
@@ -131,7 +159,7 @@ function install_apache_wsgi {
|
||||
fi
|
||||
elif is_fedora; then
|
||||
sudo rm -f /etc/httpd/conf.d/000-*
|
||||
install_package httpd mod_wsgi
|
||||
install_package httpd python3-mod_wsgi
|
||||
# For consistency with Ubuntu, switch to the worker mpm, as
|
||||
# the default is event
|
||||
sudo sed -i '/mod_mpm_prefork.so/s/^/#/g' /etc/httpd/conf.modules.d/00-mpm.conf
|
||||
@@ -265,7 +293,7 @@ function write_uwsgi_config {
|
||||
# configured after graceful shutdown
|
||||
iniset "$file" uwsgi worker-reload-mercy $WORKER_TIMEOUT
|
||||
iniset "$file" uwsgi enable-threads true
|
||||
iniset "$file" uwsgi plugins python
|
||||
iniset "$file" uwsgi plugins http,${UWSGI_PYTHON_PLUGIN}
|
||||
# uwsgi recommends this to prevent thundering herd on accept.
|
||||
iniset "$file" uwsgi thunder-lock true
|
||||
# Set hook to trigger graceful shutdown on SIGTERM
|
||||
@@ -318,7 +346,7 @@ function write_local_uwsgi_http_config {
|
||||
iniset "$file" uwsgi die-on-term true
|
||||
iniset "$file" uwsgi exit-on-reload false
|
||||
iniset "$file" uwsgi enable-threads true
|
||||
iniset "$file" uwsgi plugins python
|
||||
iniset "$file" uwsgi plugins http,${UWSGI_PYTHON_PLUGIN}
|
||||
# uwsgi recommends this to prevent thundering herd on accept.
|
||||
iniset "$file" uwsgi thunder-lock true
|
||||
# Set hook to trigger graceful shutdown on SIGTERM
|
||||
|
||||
+1
-1
@@ -492,7 +492,7 @@ function start_cinder {
|
||||
start_tls_proxy cinder '*' $CINDER_SERVICE_PORT $CINDER_SERVICE_HOST $CINDER_SERVICE_PORT_INT
|
||||
fi
|
||||
else
|
||||
run_process "c-api" "$CINDER_BIN_DIR/uwsgi --procname-prefix cinder-api --ini $CINDER_UWSGI_CONF"
|
||||
run_process "c-api" "$(which uwsgi) --procname-prefix cinder-api --ini $CINDER_UWSGI_CONF"
|
||||
cinder_url=$service_protocol://$SERVICE_HOST/volume/v3
|
||||
fi
|
||||
fi
|
||||
|
||||
+1
-1
@@ -392,7 +392,7 @@ function start_glance {
|
||||
|
||||
run_process g-reg "$GLANCE_BIN_DIR/glance-registry --config-file=$GLANCE_CONF_DIR/glance-registry.conf"
|
||||
if [[ "$WSGI_MODE" == "uwsgi" ]]; then
|
||||
run_process g-api "$GLANCE_BIN_DIR/uwsgi --procname-prefix glance-api --ini $GLANCE_UWSGI_CONF"
|
||||
run_process g-api "$(which uwsgi) --procname-prefix glance-api --ini $GLANCE_UWSGI_CONF"
|
||||
else
|
||||
run_process g-api "$GLANCE_BIN_DIR/glance-api --config-dir=$GLANCE_CONF_DIR"
|
||||
fi
|
||||
|
||||
+2
-1
@@ -413,6 +413,7 @@ function configure_keystone_authtoken_middleware {
|
||||
local section=${3:-keystone_authtoken}
|
||||
|
||||
iniset $conf_file $section auth_type password
|
||||
iniset $conf_file $section interface public
|
||||
iniset $conf_file $section auth_url $KEYSTONE_SERVICE_URI
|
||||
iniset $conf_file $section username $admin_user
|
||||
iniset $conf_file $section password $SERVICE_PASSWORD
|
||||
@@ -523,7 +524,7 @@ function start_keystone {
|
||||
enable_apache_site keystone
|
||||
restart_apache_server
|
||||
else # uwsgi
|
||||
run_process keystone "$KEYSTONE_BIN_DIR/uwsgi --procname-prefix keystone --ini $KEYSTONE_PUBLIC_UWSGI_CONF" ""
|
||||
run_process keystone "$(which uwsgi) --procname-prefix keystone --ini $KEYSTONE_PUBLIC_UWSGI_CONF" ""
|
||||
fi
|
||||
|
||||
echo "Waiting for keystone to start..."
|
||||
|
||||
@@ -124,8 +124,8 @@ function init_lvm_volume_group {
|
||||
local vg=$1
|
||||
local size=$2
|
||||
|
||||
# Start the lvmetad on f30 (dropped from f31) or SUSE
|
||||
if [[ $DISTRO =~ f30 ]] || is_suse; then
|
||||
# Start the lvmetad on f30 (dropped from f31)
|
||||
if [[ $DISTRO =~ f30 ]] ; then
|
||||
# services is not started by default
|
||||
start_service lvm2-lvmetad
|
||||
fi
|
||||
|
||||
+1
-1
@@ -463,7 +463,7 @@ function start_neutron_api {
|
||||
done
|
||||
|
||||
if [ "$NEUTRON_DEPLOY_MOD_WSGI" == "True" ]; then
|
||||
run_process neutron-api "$NEUTRON_BIN_DIR/uwsgi --procname-prefix neutron-api --ini $NEUTRON_UWSGI_CONF"
|
||||
run_process neutron-api "$(which uwsgi) --procname-prefix neutron-api --ini $NEUTRON_UWSGI_CONF"
|
||||
neutron_url=$service_protocol://$NEUTRON_SERVICE_HOST/networking/
|
||||
enable_service neutron-rpc-server
|
||||
run_process neutron-rpc-server "$NEUTRON_BIN_DIR/neutron-rpc-server $opts"
|
||||
|
||||
+4
-1
@@ -477,7 +477,7 @@ function start_neutron_service_and_check {
|
||||
# Start the Neutron service
|
||||
if [ "$NEUTRON_DEPLOY_MOD_WSGI" == "True" ]; then
|
||||
enable_service neutron-api
|
||||
run_process neutron-api "$NEUTRON_BIN_DIR/uwsgi --procname-prefix neutron-api --ini $NEUTRON_UWSGI_CONF"
|
||||
run_process neutron-api "$(which uwsgi) --procname-prefix neutron-api --ini $NEUTRON_UWSGI_CONF"
|
||||
neutron_url=$Q_PROTOCOL://$Q_HOST/networking/
|
||||
enable_service neutron-rpc-server
|
||||
run_process neutron-rpc-server "$NEUTRON_BIN_DIR/neutron-rpc-server $cfg_file_options"
|
||||
@@ -842,6 +842,9 @@ function _configure_neutron_service {
|
||||
|
||||
configure_keystone_authtoken_middleware $NEUTRON_CONF nova nova
|
||||
|
||||
# Configuration for placement client
|
||||
configure_keystone_authtoken_middleware $NEUTRON_CONF placement placement
|
||||
|
||||
# Configure plugin
|
||||
neutron_plugin_configure_service
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ function neutron_plugin_create_nova_conf {
|
||||
}
|
||||
|
||||
function neutron_plugin_install_agent_packages {
|
||||
install_package bridge-utils
|
||||
:
|
||||
}
|
||||
|
||||
function neutron_plugin_configure_dhcp_agent {
|
||||
|
||||
@@ -303,6 +303,9 @@ function configure_nova {
|
||||
sudo dnf update -y
|
||||
fi
|
||||
|
||||
# Ensure each compute host uses a unique iSCSI initiator
|
||||
echo InitiatorName=$(iscsi-iname) | sudo tee /etc/iscsi/initiatorname.iscsi
|
||||
|
||||
if [[ ${ISCSID_DEBUG} == "True" ]]; then
|
||||
# Install an override that starts iscsid with debugging
|
||||
# enabled.
|
||||
@@ -864,7 +867,7 @@ function start_nova_api {
|
||||
start_tls_proxy nova '*' $NOVA_SERVICE_PORT $NOVA_SERVICE_HOST $NOVA_SERVICE_PORT_INT
|
||||
fi
|
||||
else
|
||||
run_process "n-api" "$NOVA_BIN_DIR/uwsgi --procname-prefix nova-api --ini $NOVA_UWSGI_CONF"
|
||||
run_process "n-api" "$(which uwsgi) --procname-prefix nova-api --ini $NOVA_UWSGI_CONF"
|
||||
nova_url=$service_protocol://$SERVICE_HOST/compute/v2.1/
|
||||
fi
|
||||
|
||||
@@ -955,7 +958,7 @@ function start_nova_rest {
|
||||
if [ "$NOVA_USE_MOD_WSGI" == "False" ]; then
|
||||
run_process n-api-meta "$NOVA_BIN_DIR/nova-api-metadata --config-file $compute_cell_conf"
|
||||
else
|
||||
run_process n-api-meta "$NOVA_BIN_DIR/uwsgi --procname-prefix nova-api-meta --ini $NOVA_METADATA_UWSGI_CONF"
|
||||
run_process n-api-meta "$(which uwsgi) --procname-prefix nova-api-meta --ini $NOVA_METADATA_UWSGI_CONF"
|
||||
fi
|
||||
|
||||
export PATH=$old_path
|
||||
|
||||
+1
-1
@@ -144,7 +144,7 @@ function install_placement {
|
||||
# start_placement_api() - Start the API processes ahead of other things
|
||||
function start_placement_api {
|
||||
if [[ "$WSGI_MODE" == "uwsgi" ]]; then
|
||||
run_process "placement-api" "$PLACEMENT_BIN_DIR/uwsgi --procname-prefix placement --ini $PLACEMENT_UWSGI_CONF"
|
||||
run_process "placement-api" "$(which uwsgi) --procname-prefix placement --ini $PLACEMENT_UWSGI_CONF"
|
||||
else
|
||||
enable_apache_site placement-api
|
||||
restart_apache_server
|
||||
|
||||
@@ -738,7 +738,9 @@ function init_swift {
|
||||
|
||||
function install_swift {
|
||||
git_clone $SWIFT_REPO $SWIFT_DIR $SWIFT_BRANCH
|
||||
setup_develop $SWIFT_DIR
|
||||
# keystonemiddleware needs to be installed via keystone extras as defined
|
||||
# in setup.cfg, see bug #1909018 for more details.
|
||||
setup_develop $SWIFT_DIR keystone
|
||||
if [ "$SWIFT_USE_MOD_WSGI" == "True" ]; then
|
||||
install_apache_wsgi
|
||||
fi
|
||||
|
||||
+89
-21
@@ -57,7 +57,7 @@ BUILD_TIMEOUT=${BUILD_TIMEOUT:-196}
|
||||
# This must be False on stable branches, as master tempest
|
||||
# deps do not match stable branch deps. Set this to True to
|
||||
# have tempest installed in DevStack by default.
|
||||
INSTALL_TEMPEST=${INSTALL_TEMPEST:-"True"}
|
||||
INSTALL_TEMPEST=${INSTALL_TEMPEST:-"False"}
|
||||
|
||||
# This variable is passed directly to pip install inside the common tox venv
|
||||
# that is created
|
||||
@@ -110,6 +110,21 @@ function image_size_in_gib {
|
||||
echo $size | python3 -c "import math; print(int(math.ceil(float(int(input()) / 1024.0 ** 3))))"
|
||||
}
|
||||
|
||||
function set_tempest_venv_constraints {
|
||||
local tmp_c
|
||||
tmp_c=$1
|
||||
if [[ $TEMPEST_VENV_UPPER_CONSTRAINTS == "master" ]]; then
|
||||
(cd $REQUIREMENTS_DIR && git show origin/master:upper-constraints.txt) > $tmp_c
|
||||
else
|
||||
echo "Using $TEMPEST_VENV_UPPER_CONSTRAINTS constraints in Tempest virtual env."
|
||||
cat $TEMPEST_VENV_UPPER_CONSTRAINTS > $tmp_c
|
||||
# NOTE: setting both tox env var and once Tempest start using new var
|
||||
# TOX_CONSTRAINTS_FILE then we can remove the old one.
|
||||
export UPPER_CONSTRAINTS_FILE=$TEMPEST_VENV_UPPER_CONSTRAINTS
|
||||
export TOX_CONSTRAINTS_FILE=$TEMPEST_VENV_UPPER_CONSTRAINTS
|
||||
fi
|
||||
}
|
||||
|
||||
# configure_tempest() - Set config files, create data dirs, etc
|
||||
function configure_tempest {
|
||||
if [[ "$INSTALL_TEMPEST" == "True" ]]; then
|
||||
@@ -203,13 +218,13 @@ function configure_tempest {
|
||||
if [[ ! ( $available_flavors =~ 'm1.nano' ) ]]; then
|
||||
# Determine the flavor disk size based on the image size.
|
||||
disk=$(image_size_in_gib $image_uuid)
|
||||
openstack flavor create --id 42 --ram 64 --disk $disk --vcpus 1 --property hw_rng:allowed=True m1.nano
|
||||
openstack flavor create --id 42 --ram 128 --disk $disk --vcpus 1 --property hw_rng:allowed=True m1.nano
|
||||
fi
|
||||
flavor_ref=42
|
||||
if [[ ! ( $available_flavors =~ 'm1.micro' ) ]]; then
|
||||
# Determine the alt flavor disk size based on the alt image size.
|
||||
disk=$(image_size_in_gib $image_uuid_alt)
|
||||
openstack flavor create --id 84 --ram 128 --disk $disk --vcpus 1 --property hw_rng:allowed=True m1.micro
|
||||
openstack flavor create --id 84 --ram 192 --disk $disk --vcpus 1 --property hw_rng:allowed=True m1.micro
|
||||
fi
|
||||
flavor_ref_alt=84
|
||||
else
|
||||
@@ -376,7 +391,7 @@ function configure_tempest {
|
||||
# NOTE- To avoid microversion tests failure on stable branch, we need to change "tempest_compute_max_microversion"
|
||||
# for stable branch on each release which should be changed from "latest" to max supported version of that release.
|
||||
local tempest_compute_min_microversion=${TEMPEST_COMPUTE_MIN_MICROVERSION:-None}
|
||||
local tempest_compute_max_microversion=${TEMPEST_COMPUTE_MAX_MICROVERSION:-"latest"}
|
||||
local tempest_compute_max_microversion=${TEMPEST_COMPUTE_MAX_MICROVERSION:-"2.87"}
|
||||
# Reset microversions to None where v2.0 is running which does not support microversion.
|
||||
# Both "None" means no microversion testing.
|
||||
if [[ "$TEMPEST_COMPUTE_TYPE" == "compute_legacy" ]]; then
|
||||
@@ -401,7 +416,7 @@ function configure_tempest {
|
||||
iniset $TEMPEST_CONFIG compute-feature-enabled block_migration_for_live_migration ${USE_BLOCK_MIGRATION_FOR_LIVE_MIGRATION:-False}
|
||||
iniset $TEMPEST_CONFIG compute-feature-enabled live_migrate_back_and_forth ${LIVE_MIGRATE_BACK_AND_FORTH:-False}
|
||||
iniset $TEMPEST_CONFIG compute-feature-enabled attach_encrypted_volume ${ATTACH_ENCRYPTED_VOLUME_AVAILABLE:-True}
|
||||
|
||||
iniset $TEMPEST_CONFIG compute-feature-enabled xenapi_apis True
|
||||
if [[ -n "$NOVA_FILTERS" ]]; then
|
||||
iniset $TEMPEST_CONFIG compute-feature-enabled scheduler_enabled_filters ${NOVA_FILTERS}
|
||||
fi
|
||||
@@ -433,8 +448,7 @@ function configure_tempest {
|
||||
SCENARIO_IMAGE_DIR=${SCENARIO_IMAGE_DIR:-$FILES}
|
||||
SCENARIO_IMAGE_FILE=$DEFAULT_IMAGE_FILE_NAME
|
||||
fi
|
||||
iniset $TEMPEST_CONFIG scenario img_dir $SCENARIO_IMAGE_DIR
|
||||
iniset $TEMPEST_CONFIG scenario img_file $SCENARIO_IMAGE_FILE
|
||||
iniset $TEMPEST_CONFIG scenario img_file $SCENARIO_IMAGE_DIR/$SCENARIO_IMAGE_FILE
|
||||
|
||||
# If using provider networking, use the physical network for validation rather than private
|
||||
TEMPEST_SSH_NETWORK_NAME=$PRIVATE_NETWORK_NAME
|
||||
@@ -472,8 +486,13 @@ function configure_tempest {
|
||||
TEMPEST_EXTEND_ATTACHED_VOLUME=${TEMPEST_EXTEND_ATTACHED_VOLUME:-True}
|
||||
fi
|
||||
iniset $TEMPEST_CONFIG volume-feature-enabled extend_attached_volume $(trueorfalse False TEMPEST_EXTEND_ATTACHED_VOLUME)
|
||||
# Only turn on TEMPEST_VOLUME_REVERT_TO_SNAPSHOT by default for "lvm" backends
|
||||
if [[ "$CINDER_ENABLED_BACKENDS" == *"lvm"* ]]; then
|
||||
TEMPEST_VOLUME_REVERT_TO_SNAPSHOT=${TEMPEST_VOLUME_REVERT_TO_SNAPSHOT:-True}
|
||||
fi
|
||||
iniset $TEMPEST_CONFIG volume-feature-enabled volume_revert $(trueorfalse False TEMPEST_VOLUME_REVERT_TO_SNAPSHOT)
|
||||
local tempest_volume_min_microversion=${TEMPEST_VOLUME_MIN_MICROVERSION:-None}
|
||||
local tempest_volume_max_microversion=${TEMPEST_VOLUME_MAX_MICROVERSION:-"latest"}
|
||||
local tempest_volume_max_microversion=${TEMPEST_VOLUME_MAX_MICROVERSION:-"3.60"}
|
||||
# Reset microversions to None where v2 is running which does not support microversion.
|
||||
# Both "None" means no microversion testing.
|
||||
if [[ "$TEMPEST_VOLUME_TYPE" == "volumev2" ]]; then
|
||||
@@ -534,7 +553,7 @@ function configure_tempest {
|
||||
# NOTE- To avoid microversion tests failure on stable branch, we need to change "tempest_placement_max_microversion"
|
||||
# for stable branch on each release which should be changed from "latest" to max supported version of that release.
|
||||
local tempest_placement_min_microversion=${TEMPEST_PLACEMENT_MIN_MICROVERSION:-None}
|
||||
local tempest_placement_max_microversion=${TEMPEST_PLACEMENT_MAX_MICROVERSION:-"latest"}
|
||||
local tempest_placement_max_microversion=${TEMPEST_PLACEMENT_MAX_MICROVERSION:-"1.36"}
|
||||
if [ "$tempest_placement_min_microversion" == "None" ]; then
|
||||
inicomment $TEMPEST_CONFIG placement min_microversion
|
||||
else
|
||||
@@ -607,14 +626,13 @@ function configure_tempest {
|
||||
local tmp_cfg_file
|
||||
tmp_cfg_file=$(mktemp)
|
||||
cd $TEMPEST_DIR
|
||||
|
||||
local tmp_u_c_m
|
||||
tmp_u_c_m=$(mktemp -t tempest_u_c_m.XXXXXXXXXX)
|
||||
set_tempest_venv_constraints $tmp_u_c_m
|
||||
if [[ "$OFFLINE" != "True" ]]; then
|
||||
tox -revenv-tempest --notest
|
||||
fi
|
||||
|
||||
# The requirements might be on a different branch, while tempest needs master requirements.
|
||||
local tmp_u_c_m
|
||||
tmp_u_c_m=$(mktemp -t tempest_u_c_m.XXXXXXXXXX)
|
||||
(cd $REQUIREMENTS_DIR && git show origin/master:upper-constraints.txt) > $tmp_u_c_m
|
||||
tox -evenv-tempest -- pip install -c $tmp_u_c_m -r requirements.txt
|
||||
rm -f $tmp_u_c_m
|
||||
|
||||
@@ -652,7 +670,23 @@ function configure_tempest {
|
||||
DISABLE_NETWORK_API_EXTENSIONS+=", l3_agent_scheduler"
|
||||
fi
|
||||
|
||||
local network_api_extensions=${NETWORK_API_EXTENSIONS:-"all"}
|
||||
DEFAULT_NET_EXT="address-scope,agent,allowed-address-pairs,auto-allocated-topology"
|
||||
DEFAULT_NET_EXT+=",availability_zone,binding,default-subnetpools,dhcp_agent_scheduler"
|
||||
DEFAULT_NET_EXT+=",dvr,ext-gw-mode,external-net,extra_dhcp_opt,extraroute,flavors"
|
||||
DEFAULT_NET_EXT+=",l3-flavors,l3-ha,l3_agent_scheduler,multi-provider,net-mtu"
|
||||
DEFAULT_NET_EXT+=",network-ip-availability,network_availability_zone,pagination"
|
||||
DEFAULT_NET_EXT+=",port-security,project-id,provider,quotas,quota_details,rbac-policies"
|
||||
DEFAULT_NET_EXT+=",revision-if-match,router,router_availability_zone,security-group,service-type,sorting"
|
||||
DEFAULT_NET_EXT+=",standard-attr-description,standard-attr-revisions,standard-attr-tag,standard-attr-timestamp"
|
||||
DEFAULT_NET_EXT+=",subnet-service-types,subnet_allocation,net-mtu-writable,ip-substring-filtering"
|
||||
DEFAULT_NET_EXT+=",availability_zone_filter,filter-validation,empty-string-filtering,port-mac-address-regenerate"
|
||||
DEFAULT_NET_EXT+=",port-security-groups-filtering,fip-port-details,binding-extended"
|
||||
DEFAULT_NET_EXT+=",subnet_onboard,l3-port-ip-change-not-allowed,agent-resources-synced"
|
||||
DEFAULT_NET_EXT+=",floatingip-pools,rbac-security-groups,subnetpool-prefix-ops,router-admin-state-down-before-update"
|
||||
#New in ussuri
|
||||
DEFAULT_NET_EXT+=",rbac-subnetpool,tag_ports_during_bulk_creation,stateful_security_group"
|
||||
|
||||
local network_api_extensions=${NETWORK_API_EXTENSIONS:-$DEFAULT_NET_EXT}
|
||||
if [[ ! -z "$DISABLE_NETWORK_API_EXTENSIONS" ]]; then
|
||||
# Enabled extensions are either the ones explicitly specified or those available on the API endpoint
|
||||
network_api_extensions=${NETWORK_API_EXTENSIONS:-$(iniget $tmp_cfg_file network-feature-enabled api_extensions | tr -d " ")}
|
||||
@@ -664,7 +698,10 @@ function configure_tempest {
|
||||
fi
|
||||
iniset $TEMPEST_CONFIG network-feature-enabled api_extensions $network_api_extensions
|
||||
# Swift API Extensions
|
||||
local object_storage_api_extensions=${OBJECT_STORAGE_API_EXTENSIONS:-"all"}
|
||||
DEFAULT_SWIFT_OPT="account_quotas,bulk_delete,bulk_upload,container_quotas"
|
||||
DEFAULT_SWIFT_OPT+=",container_sync,crossdomain,formpost,ratelimit,slo"
|
||||
DEFAULT_SWIFT_OPT+=",staticweb,tempauth,tempurl,versioned_writes"
|
||||
local object_storage_api_extensions=${OBJECT_STORAGE_API_EXTENSIONS:-$DEFAULT_SWIFT_OPT}
|
||||
if [[ ! -z "$DISABLE_OBJECT_STORAGE_API_EXTENSIONS" ]]; then
|
||||
# Enabled extensions are either the ones explicitly specified or those available on the API endpoint
|
||||
object_storage_api_extensions=${OBJECT_STORAGE_API_EXTENSIONS:-$(iniget $tmp_cfg_file object-storage-feature-enabled discoverable_apis | tr -d " ")}
|
||||
@@ -672,8 +709,30 @@ function configure_tempest {
|
||||
object_storage_api_extensions=$(remove_disabled_extensions $object_storage_api_extensions $DISABLE_STORAGE_API_EXTENSIONS)
|
||||
fi
|
||||
iniset $TEMPEST_CONFIG object-storage-feature-enabled discoverable_apis $object_storage_api_extensions
|
||||
|
||||
# This feature list for Neutron used from Victoria, the aim is to skip tests
|
||||
# for features in Neutron that has no API extension, or can't be detected
|
||||
# otherwise from the API.
|
||||
# It is added here to avoid stable gating to run these tests (like for IPv6 metadata
|
||||
# in neutron-tempest-plugin or updating min_bw QoS values for ports already attached
|
||||
# to VMs).
|
||||
# To check new features grep neutron-tempest-plugin and tempest for
|
||||
# is_network_feature_enabled, and please check with Neutron team.
|
||||
local network_available_features=""
|
||||
iniset $TEMPEST_CONFIG network-feature-enabled available_features $network_available_features
|
||||
# Cinder API Extensions
|
||||
local volume_api_extensions=${VOLUME_API_EXTENSIONS:-"all"}
|
||||
DEFAULT_VOL_EXT="OS-SCH-HNT,backups,capabilities,cgsnapshots,consistencygroups"
|
||||
DEFAULT_VOL_EXT+=",encryption,os-admin-actions,os-availability-zone"
|
||||
DEFAULT_VOL_EXT+=",os-extended-services,os-extended-snapshot-attributes"
|
||||
DEFAULT_VOL_EXT+=",os-hosts,os-quota-class-sets,os-quota-sets"
|
||||
DEFAULT_VOL_EXT+=",os-services,os-snapshot-actions,os-snapshot-manage"
|
||||
DEFAULT_VOL_EXT+=",os-snapshot-unmanage,os-types-extra-specs,os-types-manage"
|
||||
DEFAULT_VOL_EXT+=",os-used-limits,os-vol-host-attr,os-vol-image-meta"
|
||||
DEFAULT_VOL_EXT+=",os-vol-mig-status-attr,os-vol-tenant-attr,os-volume-actions"
|
||||
DEFAULT_VOL_EXT+=",os-volume-encryption-metadata,os-volume-manage"
|
||||
DEFAULT_VOL_EXT+=",os-volume-transfer,os-volume-type-access"
|
||||
DEFAULT_VOL_EXT+=",os-volume-unmanage,qos-specs,scheduler-stats"
|
||||
local volume_api_extensions=${VOLUME_API_EXTENSIONS:-$DEFAULT_VOL_EXT}
|
||||
if [[ ! -z "$DISABLE_VOLUME_API_EXTENSIONS" ]]; then
|
||||
# Enabled extensions are either the ones explicitly specified or those available on the API endpoint
|
||||
volume_api_extensions=${VOLUME_API_EXTENSIONS:-$(iniget $tmp_cfg_file volume-feature-enabled api_extensions | tr -d " ")}
|
||||
@@ -689,19 +748,29 @@ function configure_tempest {
|
||||
# install_tempest() - Collect source and prepare
|
||||
function install_tempest {
|
||||
git_clone $TEMPEST_REPO $TEMPEST_DIR $TEMPEST_BRANCH
|
||||
pip_install 'tox!=2.8.0'
|
||||
# NOTE(gmann): Pinning tox<4.0.0 for stable/zed and lower. Tox 4.0.0
|
||||
# released after zed was released and has some incompatible changes
|
||||
# and it is ok not to fix the issues caused by tox 4.0.0 in stable
|
||||
# beanches jobs. We can continue testing the stable/zed and lower
|
||||
# branches with tox<4.0.0
|
||||
pip_install 'tox!=2.8.0,<4.0.0'
|
||||
pushd $TEMPEST_DIR
|
||||
# NOTE(gmann): checkout the TEMPEST_BRANCH in case TEMPEST_BRANCH
|
||||
# is tag name not master. git_clone would not checkout tag because
|
||||
# TEMPEST_DIR already exist until RECLONE is true.
|
||||
git checkout $TEMPEST_BRANCH
|
||||
|
||||
local tmp_u_c_m
|
||||
tmp_u_c_m=$(mktemp -t tempest_u_c_m.XXXXXXXXXX)
|
||||
set_tempest_venv_constraints $tmp_u_c_m
|
||||
|
||||
tox -r --notest -efull
|
||||
# NOTE(mtreinish) Respect constraints in the tempest full venv, things that
|
||||
# are using a tox job other than full will not be respecting constraints but
|
||||
# running pip install -U on tempest requirements
|
||||
$TEMPEST_DIR/.tox/tempest/bin/pip install -c $REQUIREMENTS_DIR/upper-constraints.txt -r requirements.txt
|
||||
$TEMPEST_DIR/.tox/tempest/bin/pip install -c $tmp_u_c_m -r requirements.txt
|
||||
PROJECT_VENV["tempest"]=${TEMPEST_DIR}/.tox/tempest
|
||||
rm -f $tmp_u_c_m
|
||||
popd
|
||||
}
|
||||
|
||||
@@ -709,10 +778,9 @@ function install_tempest {
|
||||
function install_tempest_plugins {
|
||||
pushd $TEMPEST_DIR
|
||||
if [[ $TEMPEST_PLUGINS != 0 ]] ; then
|
||||
# The requirements might be on a different branch, while tempest & tempest plugins needs master requirements.
|
||||
local tmp_u_c_m
|
||||
tmp_u_c_m=$(mktemp -t tempest_u_c_m.XXXXXXXXXX)
|
||||
(cd $REQUIREMENTS_DIR && git show origin/master:upper-constraints.txt) > $tmp_u_c_m
|
||||
set_tempest_venv_constraints $tmp_u_c_m
|
||||
tox -evenv-tempest -- pip install -c $tmp_u_c_m $TEMPEST_PLUGINS
|
||||
rm -f $tmp_u_c_m
|
||||
echo "Checking installed Tempest plugins:"
|
||||
|
||||
@@ -5,4 +5,10 @@
|
||||
bindep_profile: test
|
||||
bindep_dir: "{{ zuul_work_dir }}"
|
||||
- test-setup
|
||||
- ensure-tox
|
||||
# NOTE(gmann): Pinning tox<4.0.0 for stable/zed and lower. Tox 4.0.0
|
||||
# released after zed was released and has some incompatible changes
|
||||
# and it is ok not to fix the issues caused by tox 4.0.0 in stable
|
||||
# beanches jobs. We can continue testing the stable/zed and lower
|
||||
# branches with tox<4.0.0
|
||||
- role: ensure-tox
|
||||
ensure_tox_version: "<4"
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
Verify the IPv6-only deployments
|
||||
|
||||
This role needs to be invoked from a playbook that
|
||||
run tests. This role verifies the IPv6 setting on
|
||||
devstack side and devstack deploy services on IPv6.
|
||||
This role is invoked before tests are run so that
|
||||
if any missing IPv6 setting or deployments can fail
|
||||
the job early.
|
||||
|
||||
|
||||
**Role Variables**
|
||||
|
||||
.. zuul:rolevar:: devstack_base_dir
|
||||
:default: /opt/stack
|
||||
|
||||
The devstack base directory.
|
||||
@@ -0,0 +1 @@
|
||||
devstack_base_dir: /opt/stack
|
||||
@@ -0,0 +1,4 @@
|
||||
- name: Verify the ipv6-only deployments
|
||||
become: true
|
||||
become_user: stack
|
||||
shell: "{{ devstack_base_dir }}/devstack/tools/verify-ipv6-only-deployments.sh"
|
||||
@@ -0,0 +1,22 @@
|
||||
Generate stackviz report.
|
||||
|
||||
Generate stackviz report using subunit and dstat data, using
|
||||
the stackviz archive embedded in test images.
|
||||
|
||||
**Role Variables**
|
||||
|
||||
.. zuul:rolevar:: devstack_base_dir
|
||||
:default: /opt/stack
|
||||
|
||||
The devstack base directory.
|
||||
|
||||
.. zuul:rolevar:: stage_dir
|
||||
:default: "{{ ansible_user_dir }}"
|
||||
|
||||
The stage directory where the input data can be found and
|
||||
the output will be produced.
|
||||
|
||||
.. zuul:rolevar:: zuul_work_dir
|
||||
:default: {{ devstack_base_dir }}/tempest
|
||||
|
||||
Directory to work in. It has to be a fully qualified path.
|
||||
@@ -0,0 +1,3 @@
|
||||
devstack_base_dir: /opt/stack
|
||||
stage_dir: "{{ ansible_user_dir }}"
|
||||
zuul_work_dir: "{{ devstack_base_dir }}/tempest"
|
||||
@@ -0,0 +1,73 @@
|
||||
- name: Process Stackviz
|
||||
block:
|
||||
|
||||
- name: Devstack checks if stackviz archive exists
|
||||
stat:
|
||||
path: "/opt/cache/files/stackviz-latest.tar.gz"
|
||||
register: stackviz_archive
|
||||
|
||||
- debug:
|
||||
msg: "Stackviz archive could not be found in /opt/cache/files/stackviz-latest.tar.gz"
|
||||
when: not stackviz_archive.stat.exists
|
||||
|
||||
- name: Check if subunit data exists
|
||||
stat:
|
||||
path: "{{ zuul_work_dir }}/testrepository.subunit"
|
||||
register: subunit_input
|
||||
|
||||
- debug:
|
||||
msg: "Subunit file could not be found at {{ zuul_work_dir }}/testrepository.subunit"
|
||||
when: not subunit_input.stat.exists
|
||||
|
||||
- name: Install stackviz
|
||||
when:
|
||||
- stackviz_archive.stat.exists
|
||||
- subunit_input.stat.exists
|
||||
block:
|
||||
- include_role:
|
||||
name: ensure-pip
|
||||
|
||||
- pip:
|
||||
name: "file://{{ stackviz_archive.stat.path }}"
|
||||
virtualenv: /tmp/stackviz
|
||||
virtualenv_command: '{{ ensure_pip_virtualenv_command }}'
|
||||
extra_args: -U
|
||||
|
||||
- name: Deploy stackviz static html+js
|
||||
command: cp -pR /tmp/stackviz/share/stackviz-html {{ stage_dir }}/stackviz
|
||||
when:
|
||||
- stackviz_archive.stat.exists
|
||||
- subunit_input.stat.exists
|
||||
|
||||
- name: Check if dstat data exists
|
||||
stat:
|
||||
path: "{{ devstack_base_dir }}/logs/dstat-csv.log"
|
||||
register: dstat_input
|
||||
when:
|
||||
- stackviz_archive.stat.exists
|
||||
- subunit_input.stat.exists
|
||||
|
||||
- name: Run stackviz with dstat
|
||||
shell: |
|
||||
cat {{ subunit_input.stat.path }} | \
|
||||
/tmp/stackviz/bin/stackviz-export \
|
||||
--dstat "{{ devstack_base_dir }}/logs/dstat-csv.log" \
|
||||
--env --stdin \
|
||||
{{ stage_dir }}/stackviz/data
|
||||
when:
|
||||
- stackviz_archive.stat.exists
|
||||
- subunit_input.stat.exists
|
||||
- dstat_input.stat.exists
|
||||
|
||||
- name: Run stackviz without dstat
|
||||
shell: |
|
||||
cat {{ subunit_input.stat.path }} | \
|
||||
/tmp/stackviz/bin/stackviz-export \
|
||||
--env --stdin \
|
||||
{{ stage_dir }}/stackviz/data
|
||||
when:
|
||||
- stackviz_archive.stat.exists
|
||||
- subunit_input.stat.exists
|
||||
- not dstat_input.stat.exists
|
||||
|
||||
ignore_errors: yes
|
||||
@@ -221,7 +221,7 @@ write_devstack_version
|
||||
|
||||
# Warn users who aren't on an explicitly supported distro, but allow them to
|
||||
# override check and attempt installation with ``FORCE=yes ./stack``
|
||||
if [[ ! ${DISTRO} =~ (bionic|stretch|jessie|f30|f31|opensuse-15.0|opensuse-15.1|opensuse-tumbleweed) ]]; then
|
||||
if [[ ! ${DISTRO} =~ (bionic|stretch|jessie|f30|f31|opensuse-15.2|opensuse-tumbleweed|rhel8) ]]; then
|
||||
echo "WARNING: this script has not been tested on $DISTRO"
|
||||
if [[ "$FORCE" != "yes" ]]; then
|
||||
die $LINENO "If you wish to run this script anyway run with FORCE=yes"
|
||||
@@ -290,67 +290,24 @@ function _install_epel {
|
||||
uninstall_package epel-release || true
|
||||
fi
|
||||
|
||||
# This trick installs the latest epel-release from a bootstrap
|
||||
# repo, then removes itself (as epel-release installed the
|
||||
# "real" repo).
|
||||
#
|
||||
# You would think that rather than this, you could use
|
||||
# $releasever directly in .repo file we create below. However
|
||||
# RHEL gives a $releasever of "6Server" which breaks the path;
|
||||
# see https://bugzilla.redhat.com/show_bug.cgi?id=1150759
|
||||
cat <<EOF | sudo tee /etc/yum.repos.d/epel-bootstrap.repo
|
||||
[epel-bootstrap]
|
||||
name=Bootstrap EPEL
|
||||
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-7&arch=\$basearch
|
||||
failovermethod=priority
|
||||
enabled=0
|
||||
gpgcheck=0
|
||||
EOF
|
||||
# Enable a bootstrap repo. It is removed after finishing
|
||||
# the epel-release installation.
|
||||
is_package_installed yum-utils || install_package yum-utils
|
||||
sudo yum-config-manager --enable epel-bootstrap
|
||||
yum_install epel-release || \
|
||||
die $LINENO "Error installing EPEL repo, cannot continue"
|
||||
sudo rm -f /etc/yum.repos.d/epel-bootstrap.repo
|
||||
# epel-release is in extras repo which is enabled by default
|
||||
install_package epel-release
|
||||
|
||||
# RDO repos are not tested with epel and may have incompatibilities so
|
||||
# let's limit the packages fetched from epel to the ones not in RDO repos.
|
||||
sudo yum-config-manager --save --setopt=includepkgs=debootstrap,dpkg epel
|
||||
}
|
||||
|
||||
function _install_rdo {
|
||||
# There are multiple options for this, including using CloudSIG
|
||||
# repositories (centos-release-*), trunk versions, etc. Since
|
||||
# we're not interested in the actual openstack distributions
|
||||
# (since we're using git to run!) but only peripherial packages
|
||||
# like kvm or ovs, this has been reliable.
|
||||
|
||||
# TODO(ianw): figure out how to best mirror -- probably use infra
|
||||
# mirror RDO reverse proxy. We could either have test
|
||||
# infrastructure set it up disabled like EPEL, or fiddle it here.
|
||||
# Per the point above, it's a bunch of repos so starts getting a
|
||||
# little messy...
|
||||
if ! is_package_installed rdo-release ; then
|
||||
if [[ "$TARGET_BRANCH" == "master" ]]; then
|
||||
yum_install https://rdoproject.org/repos/rdo-release.rpm
|
||||
else
|
||||
# Get latest rdo-release-$rdo_release RPM package version
|
||||
rdo_release=$(echo $TARGET_BRANCH | sed "s|stable/||g")
|
||||
yum_install https://rdoproject.org/repos/openstack-$rdo_release/rdo-release-$rdo_release.rpm
|
||||
fi
|
||||
fi
|
||||
|
||||
# Also enable optional for RHEL7 proper. Note this is a silent
|
||||
# no-op on other platforms.
|
||||
sudo yum-config-manager --enable rhel-7-server-optional-rpms
|
||||
|
||||
# Enable the Software Collections (SCL) repository for CentOS.
|
||||
# This repository includes useful software (e.g. the Go Toolset)
|
||||
# which is not present in the main repository.
|
||||
if [[ "$os_VENDOR" =~ (CentOS) ]]; then
|
||||
yum_install centos-release-scl
|
||||
fi
|
||||
|
||||
if is_oraclelinux; then
|
||||
sudo yum-config-manager --enable ol7_optional_latest ol7_addons ol7_MySQL56
|
||||
if [[ "$TARGET_BRANCH" == "master" ]]; then
|
||||
# rdo-release.el8.rpm points to latest RDO release, use that for master
|
||||
sudo dnf -y install https://rdoproject.org/repos/rdo-release.el8.rpm
|
||||
else
|
||||
# For stable branches use corresponding release rpm
|
||||
rdo_release=$(echo $TARGET_BRANCH | sed "s|stable/||g")
|
||||
sudo dnf -y install https://rdoproject.org/repos/openstack-${rdo_release}/rdo-release-${rdo_release}.el8.rpm
|
||||
fi
|
||||
sudo dnf -y update
|
||||
}
|
||||
|
||||
|
||||
@@ -395,15 +352,22 @@ fi
|
||||
# to speed things up
|
||||
SKIP_EPEL_INSTALL=$(trueorfalse False SKIP_EPEL_INSTALL)
|
||||
|
||||
if [[ $DISTRO == "rhel7" ]]; then
|
||||
if [[ $DISTRO == "rhel8" ]]; then
|
||||
# If we have /etc/ci/mirror_info.sh assume we're on a OpenStack CI
|
||||
# node, where EPEL is installed (but disabled) and already
|
||||
# pointing at our internal mirror
|
||||
if [[ -f /etc/ci/mirror_info.sh ]]; then
|
||||
SKIP_EPEL_INSTALL=True
|
||||
sudo yum-config-manager --enable epel
|
||||
sudo dnf config-manager --set-enabled epel
|
||||
fi
|
||||
|
||||
# PowerTools repo provides libyaml-devel required by devstack itself and
|
||||
# EPEL packages assume that the PowerTools repository is enable.
|
||||
sudo dnf config-manager --set-enabled PowerTools
|
||||
|
||||
# CentOS 8.3 changed the repository name to lower case.
|
||||
sudo dnf config-manager --set-enabled powertools
|
||||
|
||||
if [[ ${SKIP_EPEL_INSTALL} != True ]]; then
|
||||
_install_epel
|
||||
fi
|
||||
@@ -411,6 +375,12 @@ if [[ $DISTRO == "rhel7" ]]; then
|
||||
# available in RDO repositories (e.g. OVS, or later versions of
|
||||
# kvm) to run.
|
||||
_install_rdo
|
||||
|
||||
# NOTE(cgoncalves): workaround RHBZ#1154272
|
||||
# dnf fails for non-privileged users when expired_repos.json doesn't exist.
|
||||
# RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1154272
|
||||
# Patch: https://github.com/rpm-software-management/dnf/pull/1448
|
||||
echo "[]" | sudo tee /var/cache/dnf/expired_repos.json
|
||||
fi
|
||||
|
||||
# Ensure python is installed
|
||||
|
||||
@@ -15,7 +15,7 @@ source $RC_DIR/functions
|
||||
|
||||
# Set the target branch. This is used so that stable branching
|
||||
# does not need to update each repo below.
|
||||
TARGET_BRANCH=master
|
||||
TARGET_BRANCH=stable/ussuri
|
||||
|
||||
# Cycle trailing projects need to branch later than the others.
|
||||
TRAILING_TARGET_BRANCH=master
|
||||
@@ -311,7 +311,8 @@ REQUIREMENTS_BRANCH=${REQUIREMENTS_BRANCH:-$TARGET_BRANCH}
|
||||
|
||||
# Tempest test suite
|
||||
TEMPEST_REPO=${TEMPEST_REPO:-${GIT_BASE}/openstack/tempest.git}
|
||||
TEMPEST_BRANCH=${TEMPEST_BRANCH:-$BRANCHLESS_TARGET_BRANCH}
|
||||
TEMPEST_BRANCH=${TEMPEST_BRANCH:-26.1.0}
|
||||
TEMPEST_VENV_UPPER_CONSTRAINTS=${TEMPEST_VENV_UPPER_CONSTRAINTS:-$REQUIREMENTS_DIR/upper-constraints.txt}
|
||||
|
||||
|
||||
##############
|
||||
|
||||
@@ -95,19 +95,7 @@ function test_libs_exist {
|
||||
echo "test_libs_exist PASSED"
|
||||
}
|
||||
|
||||
function test_branch_master {
|
||||
for lib in $ALL_LIBS; do
|
||||
if [[ ${GITBRANCH[$lib]} != "master" ]]; then
|
||||
echo "GITBRANCH for $lib not master (${GITBRANCH[$lib]})"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
echo "test_branch_master PASSED"
|
||||
}
|
||||
|
||||
set -o errexit
|
||||
|
||||
test_libs_exist
|
||||
test_branch_master
|
||||
test_all_libs_upto_date
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
|
||||
echo "Ensuring we don't have crazy refs"
|
||||
|
||||
REFS=`grep BRANCH stackrc | grep -v 'TARGET_BRANCH' | grep -v 'NOVNC_BRANCH'`
|
||||
REFS=`grep BRANCH stackrc | grep -v 'TARGET_BRANCH' | grep -v 'NOVNC_BRANCH' | grep -v 'TEMPEST_BRANCH'`
|
||||
rc=$?
|
||||
if [[ $rc -eq 0 ]]; then
|
||||
echo "Branch defaults must be one of the *TARGET_BRANCH values. Found:"
|
||||
|
||||
@@ -6,4 +6,4 @@ TOP=$(cd $(dirname "$0")/.. && pwd)
|
||||
source $TOP/functions
|
||||
source $TOP/tests/unittest.sh
|
||||
|
||||
python ./roles/write-devstack-local-conf/library/test.py
|
||||
${PYTHON} $TOP/roles/write-devstack-local-conf/library/test.py
|
||||
|
||||
@@ -17,6 +17,8 @@ ERROR=0
|
||||
PASS=0
|
||||
FAILED_FUNCS=""
|
||||
|
||||
export PYTHON=$(which python3 2>/dev/null)
|
||||
|
||||
# pass a test, printing out MSG
|
||||
# usage: passed message
|
||||
function passed {
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
pip<20.3
|
||||
+13
-4
@@ -73,6 +73,18 @@ function fixup_ubuntu {
|
||||
# Enable universe
|
||||
sudo add-apt-repository -y universe
|
||||
|
||||
if [[ -f /etc/ci/mirror_info.sh ]] ; then
|
||||
# If we are on a nodepool provided host and it has told us about
|
||||
# where we can find local mirrors then use that mirror.
|
||||
source /etc/ci/mirror_info.sh
|
||||
sudo apt-add-repository -y "deb $NODEPOOL_UCA_MIRROR bionic-updates/train main"
|
||||
else
|
||||
# Enable UCA:train for updated versions of QEMU and libvirt
|
||||
sudo add-apt-repository -y cloud-archive:train
|
||||
fi
|
||||
REPOS_UPDATED=False
|
||||
apt_get_update
|
||||
|
||||
# Since pip10, pip will refuse to uninstall files from packages
|
||||
# that were created with distutils (rather than more modern
|
||||
# setuptools). This is because it technically doesn't have a
|
||||
@@ -162,10 +174,7 @@ function fixup_fedora {
|
||||
# manifest of what to remove. However, in most cases, simply
|
||||
# overwriting works. So this hacks around those packages that
|
||||
# have been dragged in by some other system dependency
|
||||
sudo rm -rf /usr/lib/python2.7/site-packages/enum34*.egg-info
|
||||
sudo rm -rf /usr/lib/python2.7/site-packages/ipaddress*.egg-info
|
||||
sudo rm -rf /usr/lib/python2.7/site-packages/ply-*.egg-info
|
||||
sudo rm -rf /usr/lib/python2.7/site-packages/typing-*.egg-info
|
||||
sudo rm -rf /usr/lib64/python3*/site-packages/PyYAML-*.egg-info
|
||||
}
|
||||
|
||||
function fixup_suse {
|
||||
|
||||
+23
-12
@@ -38,7 +38,7 @@ FILES=$TOP_DIR/files
|
||||
# [1] https://opendev.org/openstack/project-config/src/branch/master/nodepool/elements/cache-devstack/source-repository-pip
|
||||
|
||||
PIP_GET_PIP_URL=${PIP_GET_PIP_URL:-"https://bootstrap.pypa.io/get-pip.py"}
|
||||
LOCAL_PIP="$FILES/$(basename $PIP_GET_PIP_URL)"
|
||||
PIP_GET_PIP36_URL=${PIP_GET_PIP36_URL:-"https://bootstrap.pypa.io/pip/3.6/get-pip.py"}
|
||||
|
||||
GetDistro
|
||||
echo "Distro: $DISTRO"
|
||||
@@ -57,12 +57,21 @@ function get_versions {
|
||||
|
||||
|
||||
function install_get_pip {
|
||||
if [[ "$PYTHON3_VERSION" = "3.6" ]]; then
|
||||
_pip_url=$PIP_GET_PIP36_URL
|
||||
_local_pip="$FILES/$(basename $_pip_url)-py36"
|
||||
else
|
||||
_pip_url=$PIP_GET_PIP_URL
|
||||
_local_pip="$FILES/$(basename $_pip_url)"
|
||||
fi
|
||||
|
||||
|
||||
# If get-pip.py isn't python, delete it. This was probably an
|
||||
# outage on the server.
|
||||
if [[ -r $LOCAL_PIP ]]; then
|
||||
if ! head -1 $LOCAL_PIP | grep -q '#!/usr/bin/env python'; then
|
||||
echo "WARNING: Corrupt $LOCAL_PIP found removing"
|
||||
rm $LOCAL_PIP
|
||||
if [[ -r $_local_pip ]]; then
|
||||
if ! head -1 $_local_pip | grep -q '#!/usr/bin/env python'; then
|
||||
echo "WARNING: Corrupt $_local_pip found removing"
|
||||
rm $_local_pip
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -76,22 +85,24 @@ function install_get_pip {
|
||||
# Thus we use curl's "-z" feature to always check the modified
|
||||
# since and only download if a new version is out -- but only if
|
||||
# it seems we downloaded the file originally.
|
||||
if [[ ! -r $LOCAL_PIP || -r $LOCAL_PIP.downloaded ]]; then
|
||||
if [[ ! -r $_local_pip || -r $_local_pip.downloaded ]]; then
|
||||
# only test freshness if LOCAL_PIP is actually there,
|
||||
# otherwise we generate a scary warning.
|
||||
local timecond=""
|
||||
if [[ -r $LOCAL_PIP ]]; then
|
||||
timecond="-z $LOCAL_PIP"
|
||||
if [[ -r $_local_pip ]]; then
|
||||
timecond="-z $_local_pip"
|
||||
fi
|
||||
|
||||
curl -f --retry 6 --retry-delay 5 \
|
||||
$timecond -o $LOCAL_PIP $PIP_GET_PIP_URL || \
|
||||
$timecond -o $_local_pip $_pip_url || \
|
||||
die $LINENO "Download of get-pip.py failed"
|
||||
touch $LOCAL_PIP.downloaded
|
||||
touch $_local_pip.downloaded
|
||||
fi
|
||||
sudo -H -E python${PYTHON3_VERSION} $LOCAL_PIP
|
||||
# TODO: remove the trailing pip constraint when a proper fix
|
||||
# arrives for bug https://bugs.launchpad.net/devstack/+bug/1906322
|
||||
sudo -H -E python${PYTHON3_VERSION} $_local_pip -c $TOOLS_DIR/cap-pip.txt
|
||||
if ! python3_enabled; then
|
||||
sudo -H -E python $LOCAL_PIP
|
||||
sudo -H -E python $LOCAL_PIP -c $TOOLS_DIR/cap-pip.txt
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
Executable
+92
@@ -0,0 +1,92 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
#
|
||||
# NOTE(gmann): This script is used in 'devstack-tempest-ipv6' zuul job to verify that
|
||||
# services are deployed on IPv6 properly or not. This will capture if any devstck or devstack
|
||||
# plugins are missing the required setting to listen on IPv6 address. This is run as part of
|
||||
# run phase of zuul job and before test run. Child job of 'devstack-tempest-ipv6'
|
||||
# can expand the IPv6 verification specific to project by defining the new post-run script which
|
||||
# will run along with this base script.
|
||||
# If there are more common verification for IPv6 then we can always extent this script.
|
||||
|
||||
# Keep track of the DevStack directory
|
||||
TOP_DIR=$(cd $(dirname "$0")/../../devstack && pwd)
|
||||
source $TOP_DIR/stackrc
|
||||
source $TOP_DIR/openrc admin admin
|
||||
|
||||
function verify_devstack_ipv6_setting {
|
||||
local _service_host=''
|
||||
_service_host=$(echo $SERVICE_HOST | tr -d [])
|
||||
local _host_ipv6=''
|
||||
_host_ipv6=$(echo $HOST_IPV6 | tr -d [])
|
||||
local _service_listen_address=''
|
||||
_service_listen_address=$(echo $SERVICE_LISTEN_ADDRESS | tr -d [])
|
||||
local _service_local_host=''
|
||||
_service_local_host=$(echo $SERVICE_LOCAL_HOST | tr -d [])
|
||||
if [[ "$SERVICE_IP_VERSION" != 6 ]]; then
|
||||
echo $SERVICE_IP_VERSION "SERVICE_IP_VERSION is not set to 6 which is must for devstack to deploy services with IPv6 address."
|
||||
exit 1
|
||||
fi
|
||||
is_service_host_ipv6=$(python3 -c 'import oslo_utils.netutils as nutils; print(nutils.is_valid_ipv6("'$_service_host'"))')
|
||||
if [[ "$is_service_host_ipv6" != "True" ]]; then
|
||||
echo $SERVICE_HOST "SERVICE_HOST is not ipv6 which means devstack cannot deploy services on IPv6 address."
|
||||
exit 1
|
||||
fi
|
||||
is_host_ipv6=$(python3 -c 'import oslo_utils.netutils as nutils; print(nutils.is_valid_ipv6("'$_host_ipv6'"))')
|
||||
if [[ "$is_host_ipv6" != "True" ]]; then
|
||||
echo $HOST_IPV6 "HOST_IPV6 is not ipv6 which means devstack cannot deploy services on IPv6 address."
|
||||
exit 1
|
||||
fi
|
||||
is_service_listen_address=$(python3 -c 'import oslo_utils.netutils as nutils; print(nutils.is_valid_ipv6("'$_service_listen_address'"))')
|
||||
if [[ "$is_service_listen_address" != "True" ]]; then
|
||||
echo $SERVICE_LISTEN_ADDRESS "SERVICE_LISTEN_ADDRESS is not ipv6 which means devstack cannot deploy services on IPv6 address."
|
||||
exit 1
|
||||
fi
|
||||
is_service_local_host=$(python3 -c 'import oslo_utils.netutils as nutils; print(nutils.is_valid_ipv6("'$_service_local_host'"))')
|
||||
if [[ "$is_service_local_host" != "True" ]]; then
|
||||
echo $SERVICE_LOCAL_HOST "SERVICE_LOCAL_HOST is not ipv6 which means devstack cannot deploy services on IPv6 address."
|
||||
exit 1
|
||||
fi
|
||||
echo "Devstack is properly configured with IPv6"
|
||||
echo "SERVICE_IP_VERSION: " $SERVICE_IP_VERSION "HOST_IPV6: " $HOST_IPV6 "SERVICE_HOST: " $SERVICE_HOST "SERVICE_LISTEN_ADDRESS: " $SERVICE_LISTEN_ADDRESS "SERVICE_LOCAL_HOST: " $SERVICE_LOCAL_HOST
|
||||
}
|
||||
|
||||
function sanity_check_system_ipv6_enabled {
|
||||
system_ipv6_enabled=$(python3 -c 'import oslo_utils.netutils as nutils; print(nutils.is_ipv6_enabled())')
|
||||
if [[ $system_ipv6_enabled != "True" ]]; then
|
||||
echo "IPv6 is disabled in system"
|
||||
exit 1
|
||||
fi
|
||||
echo "IPv6 is enabled in system"
|
||||
}
|
||||
|
||||
function verify_service_listen_address_is_ipv6 {
|
||||
local endpoints_verified=False
|
||||
local all_ipv6=True
|
||||
endpoints=$(openstack endpoint list -f value -c URL)
|
||||
for endpoint in ${endpoints}; do
|
||||
local endpoint_address=''
|
||||
endpoint_address=$(echo "$endpoint" | awk -F/ '{print $3}' | awk -F] '{print $1}')
|
||||
endpoint_address=$(echo $endpoint_address | tr -d [])
|
||||
local is_endpoint_ipv6=''
|
||||
is_endpoint_ipv6=$(python3 -c 'import oslo_utils.netutils as nutils; print(nutils.is_valid_ipv6("'$endpoint_address'"))')
|
||||
if [[ "$is_endpoint_ipv6" != "True" ]]; then
|
||||
all_ipv6=False
|
||||
echo $endpoint ": This is not ipv6 endpoint which means corresponding service is not listening on IPv6 address."
|
||||
continue
|
||||
fi
|
||||
endpoints_verified=True
|
||||
done
|
||||
if [[ "$all_ipv6" == "False" ]] || [[ "$endpoints_verified" == "False" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
echo "All services deployed by devstack is on IPv6 endpoints"
|
||||
echo $endpoints
|
||||
}
|
||||
|
||||
#First thing to verify if system has IPv6 enabled or not
|
||||
sanity_check_system_ipv6_enabled
|
||||
#Verify whether devstack is configured properly with IPv6 setting
|
||||
verify_devstack_ipv6_setting
|
||||
#Get all registrfed endpoints by devstack in keystone and verify that each endpoints address is IPv6.
|
||||
verify_service_listen_address_is_ipv6
|
||||
@@ -166,8 +166,6 @@ def network_dump():
|
||||
_header("Network Dump")
|
||||
|
||||
_dump_cmd("bridge link")
|
||||
if _find_cmd("brctl"):
|
||||
_dump_cmd("brctl show")
|
||||
_dump_cmd("ip link show type bridge")
|
||||
ip_cmds = ["neigh", "addr", "link", "route"]
|
||||
for cmd in ip_cmds + ['netns']:
|
||||
|
||||
@@ -36,7 +36,9 @@ commands = bash -c "find {toxinidir} \
|
||||
|
||||
[testenv:docs]
|
||||
basepython = python3
|
||||
deps = -r{toxinidir}/doc/requirements.txt
|
||||
deps =
|
||||
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/ussuri}
|
||||
-r{toxinidir}/doc/requirements.txt
|
||||
whitelist_externals = bash
|
||||
setenv =
|
||||
TOP_DIR={toxinidir}
|
||||
|
||||
@@ -181,3 +181,9 @@ if is_service_enabled cinder && is_package_installed lvm2; then
|
||||
clean_lvm_volume_group $DEFAULT_VOLUME_GROUP_NAME || /bin/true
|
||||
clean_lvm_filter
|
||||
fi
|
||||
|
||||
|
||||
# Clean any safe.directory items we wrote into the global
|
||||
# gitconfig. We can identify the relevant ones by checking that they
|
||||
# point to somewhere in our $DEST directory.
|
||||
sudo sed -i "/directory=${DEST}/ d" /etc/gitconfig
|
||||
|
||||
Reference in New Issue
Block a user