Merge "Updated from generate-devstack-plugins-list"
diff --git a/.zuul.yaml b/.zuul.yaml
index 037e9a9..f03d30a 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -46,7 +46,7 @@
       - zuul: openstack-infra/openstack-zuul-jobs
     timeout: 7200
     vars:
-      test_matrix_configs: ['neutron', 'tlsproxy']
+      test_matrix_configs: [neutron, tlsproxy]
       devstack_localrc:
         DATABASE_PASSWORD: secretdatabase
         RABBIT_PASSWORD: secretrabbit
@@ -77,6 +77,40 @@
       devstack_services:
         horizon: false
         tempest: false
+      zuul_copy_output:
+        '{{ devstack_conf_dir }}/local.conf': 'logs'
+        '{{ devstack_conf_dir }}/localrc': 'logs'
+        '{{ devstack_conf_dir }}/.stackenv': 'logs'
+        '{{ devstack_log_dir }}/dstat-csv.log': 'logs'
+        '{{ devstack_log_dir }}/devstacklog.txt': 'logs'
+        '{{ devstack_log_dir }}/devstacklog.txt.summary': 'logs'
+        '{{ devstack_full_log}}': 'logs'
+        '{{ stage_dir }}/verify_tempest_conf.log': 'logs'
+        '{{ stage_dir }}/apache': 'logs'
+        '{{ stage_dir }}/apache_config': 'logs'
+        '{{ stage_dir }}/etc': 'logs'
+        '/var/log/rabbitmq': 'logs'
+        '/var/log/postgresql': 'logs'
+        '/var/log/mysql.err': 'logs'
+        '/var/log/mysql.log': 'logs'
+        '/var/log/libvirt': 'logs'
+        '/etc/sudoers': 'logs'
+        '/etc/sudoers.d': 'logs'
+        '{{ stage_dir }}/iptables.txt': 'logs'
+        '{{ stage_dir }}/df.txt': 'logs'
+        '{{ stage_dir }}/pip2-freeze.txt': 'logs'
+        '{{ stage_dir }}/pip3-freeze.txt': 'logs'
+        '{{ stage_dir }}/dpkg-l.txt': 'logs'
+        '{{ stage_dir }}/rpm-qa.txt': 'logs'
+        '{{ stage_dir }}/core': 'logs'
+        '{{ stage_dir }}/listen53.txt': 'logs'
+        '{{ stage_dir }}/deprecations.log': 'logs'
+        '/var/log/ceph': 'logs'
+        '/var/log/openvswitch': 'logs'
+        '/var/log/glusterfs': 'logs'
+        '/etc/glusterfs/glusterd.vol': 'logs'
+        '/etc/resolv.conf': 'logs'
+        '/var/log/unbound.log': 'logs'
     pre-run: playbooks/pre.yaml
     run: playbooks/devstack.yaml
     post-run: playbooks/post.yaml
@@ -154,7 +188,6 @@
     run: playbooks/tox/run.yaml
 
 - project:
-    name: openstack-dev/devstack
     check:
       jobs:
         - devstack
diff --git a/lib/tempest b/lib/tempest
index 35dbb7b..3b39dae 100644
--- a/lib/tempest
+++ b/lib/tempest
@@ -382,6 +382,10 @@
         fi
     fi
 
+    if [[ $ENABLE_VOLUME_MULTIATTACH == "True" ]]; then
+        iniset $TEMPEST_CONFIG compute-feature-enabled volume_multiattach True
+    fi
+
     if is_service_enabled n-novnc; then
         iniset $TEMPEST_CONFIG compute-feature-enabled vnc_console True
     fi
diff --git a/playbooks/post.yaml b/playbooks/post.yaml
index 0c5e83b..d8ee99e 100644
--- a/playbooks/post.yaml
+++ b/playbooks/post.yaml
@@ -24,40 +24,6 @@
     # capture-system-logs should be the last role before stage-output
     - capture-system-logs
     - role: stage-output
-      zuul_copy_output:
-        { '{{ devstack_conf_dir }}/local.conf': 'logs',
-          '{{ devstack_conf_dir }}/localrc': 'logs',
-          '{{ devstack_conf_dir }}/.stackenv': 'logs' ,
-          '{{ devstack_log_dir }}/dstat-csv.log': 'logs',
-          '{{ devstack_log_dir }}/devstacklog.txt': 'logs',
-          '{{ devstack_log_dir }}/devstacklog.txt.summary': 'logs',
-          '{{ devstack_full_log}}': 'logs',
-          '{{ stage_dir }}/verify_tempest_conf.log': 'logs',
-          '{{ stage_dir }}/apache': 'logs',
-          '{{ stage_dir }}/apache_config': 'logs',
-          '{{ stage_dir }}/etc': 'logs',
-          '/var/log/rabbitmq': 'logs',
-          '/var/log/postgresql': 'logs',
-          '/var/log/mysql.err': 'logs',
-          '/var/log/mysql.log': 'logs',
-          '/var/log/libvirt': 'logs',
-          '/etc/sudoers': 'logs',
-          '/etc/sudoers.d': 'logs',
-          '{{ stage_dir }}/iptables.txt': 'logs',
-          '{{ stage_dir }}/df.txt': 'logs',
-          '{{ stage_dir }}/pip2-freeze.txt': 'logs',
-          '{{ stage_dir }}/pip3-freeze.txt': 'logs',
-          '{{ stage_dir }}/dpkg-l.txt': 'logs',
-          '{{ stage_dir }}/rpm-qa.txt': 'logs',
-          '{{ stage_dir }}/core': 'logs',
-          '{{ stage_dir }}/listen53.txt': 'logs',
-          '{{ stage_dir }}/deprecations.log': 'logs',
-          '/var/log/ceph': 'logs',
-          '/var/log/openvswitch': 'logs',
-          '/var/log/glusterfs': 'logs',
-          '/etc/glusterfs/glusterd.vol': 'logs',
-          '/etc/resolv.conf': 'logs',
-          '/var/log/unbound.log': 'logs' }
       extensions_to_txt:
         - conf
         - log
diff --git a/stackrc b/stackrc
index a9f3c32..7ed8a67 100644
--- a/stackrc
+++ b/stackrc
@@ -601,6 +601,11 @@
 SPICE_REPO=${SPICE_REPO:-http://anongit.freedesktop.org/git/spice/spice-html5.git}
 SPICE_BRANCH=${SPICE_BRANCH:-master}
 
+# Global flag used to configure Tempest and potentially other services if
+# volume multiattach is supported. In Queens, only the libvirt compute driver
+# and lvm volume driver support multiattach, and qemu must be less than 2.10
+# or libvirt must be greater than or equal to 3.10.
+ENABLE_VOLUME_MULTIATTACH=$(trueorfalse False ENABLE_VOLUME_MULTIATTACH)
 
 # Nova hypervisor configuration.  We default to libvirt with **kvm** but will
 # drop back to **qemu** if we are unable to load the kvm module.  ``stack.sh`` can
@@ -612,7 +617,12 @@
 case "$VIRT_DRIVER" in
     ironic|libvirt)
         LIBVIRT_TYPE=${LIBVIRT_TYPE:-kvm}
-        if [[ "$os_VENDOR" =~ (Debian|Ubuntu) ]]; then
+        # If ENABLE_VOLUME_MULTIATTACH is True, the Ubuntu Cloud Archive can't
+        # be used until it provides libvirt>=3.10, and with older versions of
+        # Ubuntu the group is "libvirtd".
+        # TODO(mriedem): Remove the ENABLE_VOLUME_MULTIATTACH check when
+        # UCA has libvirt>=3.10.
+        if [[ "$os_VENDOR" =~ (Debian|Ubuntu) && "${ENABLE_VOLUME_MULTIATTACH}" == "False" ]]; then
             # The groups change with newer libvirt. Older Ubuntu used
             # 'libvirtd', but now uses libvirt like Debian. Do a quick check
             # to see if libvirtd group already exists to handle grenade's case.
diff --git a/tools/fixup_stuff.sh b/tools/fixup_stuff.sh
index efe0125..f78f05f 100755
--- a/tools/fixup_stuff.sh
+++ b/tools/fixup_stuff.sh
@@ -75,7 +75,12 @@
 # Make it possible to switch this based on an environment variable as
 # libvirt 2.5.0 doesn't handle nested virtualization quite well and this
 # is required for the trove development environment.
-if [[ "${ENABLE_UBUNTU_CLOUD_ARCHIVE}" == "True" && "$DISTRO" = "xenial" ]]; then
+# The Pike UCA has qemu 2.10 but libvirt 3.6, therefore if
+# ENABLE_VOLUME_MULTIATTACH is True, we can't use the Pike UCA
+# because multiattach won't work with those package versions.
+# We can remove this check when the UCA has libvirt>=3.10.
+if [[ "${ENABLE_UBUNTU_CLOUD_ARCHIVE}" == "True" && "$DISTRO" = "xenial" && \
+        "${ENABLE_VOLUME_MULTIATTACH}" == "False" ]]; then
     # This pulls in apt-add-repository
     install_package "software-properties-common"
     # Use UCA for newer libvirt. Should give us libvirt 2.5.0.