Merge "Remove shocco docs and other cleanups"
diff --git a/doc/source/configuration.rst b/doc/source/configuration.rst
index 3c77f4d..ce7755d 100644
--- a/doc/source/configuration.rst
+++ b/doc/source/configuration.rst
@@ -613,6 +613,18 @@
 with multiple replicas you can do so by customizing the variable
 ``SWIFT_REPLICAS`` in your ``localrc`` section (usually to 3).
 
+You can manually override the ring building to use specific storage
+nodes, for example when you want to test a multinode environment. In
+this case you have to set a space-separated list of IPs in
+``SWIFT_STORAGE_IPS`` in your ``localrc`` section that should be used
+as Swift storage nodes.
+Please note that this does not create a multinode setup, it is only
+used when adding nodes to the Swift rings.
+
+::
+
+    SWIFT_STORAGE_IPS="192.168.1.10 192.168.1.11 192.168.1.12"
+
 Swift S3
 ++++++++
 
diff --git a/doc/source/plugin-registry.rst b/doc/source/plugin-registry.rst
index b467123..999350f 100644
--- a/doc/source/plugin-registry.rst
+++ b/doc/source/plugin-registry.rst
@@ -19,182 +19,105 @@
 namespace, which includes but is not limited to official OpenStack
 projects.
 
-+----------------------------+-------------------------------------------------------------------------+
-|Plugin Name                 |URL                                                                      |
-+----------------------------+-------------------------------------------------------------------------+
-|aodh                        |git://git.openstack.org/openstack/aodh                                   |
-+----------------------------+-------------------------------------------------------------------------+
-|app-catalog-ui              |git://git.openstack.org/openstack/app-catalog-ui                         |
-+----------------------------+-------------------------------------------------------------------------+
-|astara                      |git://git.openstack.org/openstack/astara                                 |
-+----------------------------+-------------------------------------------------------------------------+
-|barbican                    |git://git.openstack.org/openstack/barbican                               |
-+----------------------------+-------------------------------------------------------------------------+
-|blazar                      |git://git.openstack.org/openstack/blazar                                 |
-+----------------------------+-------------------------------------------------------------------------+
-|broadview-collector         |git://git.openstack.org/openstack/broadview-collector                    |
-+----------------------------+-------------------------------------------------------------------------+
-|ceilometer                  |git://git.openstack.org/openstack/ceilometer                             |
-+----------------------------+-------------------------------------------------------------------------+
-|ceilometer-powervm          |git://git.openstack.org/openstack/ceilometer-powervm                     |
-+----------------------------+-------------------------------------------------------------------------+
-|cerberus                    |git://git.openstack.org/openstack/cerberus                               |
-+----------------------------+-------------------------------------------------------------------------+
-|cloudkitty                  |git://git.openstack.org/openstack/cloudkitty                             |
-+----------------------------+-------------------------------------------------------------------------+
-|collectd-ceilometer-plugin  |git://git.openstack.org/openstack/collectd-ceilometer-plugin             |
-+----------------------------+-------------------------------------------------------------------------+
-|congress                    |git://git.openstack.org/openstack/congress                               |
-+----------------------------+-------------------------------------------------------------------------+
-|cue                         |git://git.openstack.org/openstack/cue                                    |
-+----------------------------+-------------------------------------------------------------------------+
-|designate                   |git://git.openstack.org/openstack/designate                              |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-amqp1       |git://git.openstack.org/openstack/devstack-plugin-amqp1                  |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-bdd         |git://git.openstack.org/openstack/devstack-plugin-bdd                    |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-ceph        |git://git.openstack.org/openstack/devstack-plugin-ceph                   |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-glusterfs   |git://git.openstack.org/openstack/devstack-plugin-glusterfs              |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-hdfs        |git://git.openstack.org/openstack/devstack-plugin-hdfs                   |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-kafka       |git://git.openstack.org/openstack/devstack-plugin-kafka                  |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-pika        |git://git.openstack.org/openstack/devstack-plugin-pika                   |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-sheepdog    |git://git.openstack.org/openstack/devstack-plugin-sheepdog               |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-zmq         |git://git.openstack.org/openstack/devstack-plugin-zmq                    |
-+----------------------------+-------------------------------------------------------------------------+
-|dragonflow                  |git://git.openstack.org/openstack/dragonflow                             |
-+----------------------------+-------------------------------------------------------------------------+
-|drbd-devstack               |git://git.openstack.org/openstack/drbd-devstack                          |
-+----------------------------+-------------------------------------------------------------------------+
-|ec2-api                     |git://git.openstack.org/openstack/ec2-api                                |
-+----------------------------+-------------------------------------------------------------------------+
-|freezer                     |git://git.openstack.org/openstack/freezer                                |
-+----------------------------+-------------------------------------------------------------------------+
-|freezer-api                 |git://git.openstack.org/openstack/freezer-api                            |
-+----------------------------+-------------------------------------------------------------------------+
-|freezer-web-ui              |git://git.openstack.org/openstack/freezer-web-ui                         |
-+----------------------------+-------------------------------------------------------------------------+
-|gce-api                     |git://git.openstack.org/openstack/gce-api                                |
-+----------------------------+-------------------------------------------------------------------------+
-|gnocchi                     |git://git.openstack.org/openstack/gnocchi                                |
-+----------------------------+-------------------------------------------------------------------------+
-|ironic                      |git://git.openstack.org/openstack/ironic                                 |
-+----------------------------+-------------------------------------------------------------------------+
-|ironic-inspector            |git://git.openstack.org/openstack/ironic-inspector                       |
-+----------------------------+-------------------------------------------------------------------------+
-|kingbird                    |git://git.openstack.org/openstack/kingbird                               |
-+----------------------------+-------------------------------------------------------------------------+
-|kuryr                       |git://git.openstack.org/openstack/kuryr                                  |
-+----------------------------+-------------------------------------------------------------------------+
-|magnum                      |git://git.openstack.org/openstack/magnum                                 |
-+----------------------------+-------------------------------------------------------------------------+
-|manila                      |git://git.openstack.org/openstack/manila                                 |
-+----------------------------+-------------------------------------------------------------------------+
-|mistral                     |git://git.openstack.org/openstack/mistral                                |
-+----------------------------+-------------------------------------------------------------------------+
-|monasca-api                 |git://git.openstack.org/openstack/monasca-api                            |
-+----------------------------+-------------------------------------------------------------------------+
-|murano                      |git://git.openstack.org/openstack/murano                                 |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-6wind            |git://git.openstack.org/openstack/networking-6wind                       |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-bagpipe          |git://git.openstack.org/openstack/networking-bagpipe                     |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-bgpvpn           |git://git.openstack.org/openstack/networking-bgpvpn                      |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-brocade          |git://git.openstack.org/openstack/networking-brocade                     |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-calico           |git://git.openstack.org/openstack/networking-calico                      |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-cisco            |git://git.openstack.org/openstack/networking-cisco                       |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-fortinet         |git://git.openstack.org/openstack/networking-fortinet                    |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-generic-switch   |git://git.openstack.org/openstack/networking-generic-switch              |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-infoblox         |git://git.openstack.org/openstack/networking-infoblox                    |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-l2gw             |git://git.openstack.org/openstack/networking-l2gw                        |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-midonet          |git://git.openstack.org/openstack/networking-midonet                     |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-mlnx             |git://git.openstack.org/openstack/networking-mlnx                        |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-nec              |git://git.openstack.org/openstack/networking-nec                         |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-odl              |git://git.openstack.org/openstack/networking-odl                         |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-ofagent          |git://git.openstack.org/openstack/networking-ofagent                     |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-ovn              |git://git.openstack.org/openstack/networking-ovn                         |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-ovs-dpdk         |git://git.openstack.org/openstack/networking-ovs-dpdk                    |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-plumgrid         |git://git.openstack.org/openstack/networking-plumgrid                    |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-powervm          |git://git.openstack.org/openstack/networking-powervm                     |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-sfc              |git://git.openstack.org/openstack/networking-sfc                         |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-vsphere          |git://git.openstack.org/openstack/networking-vsphere                     |
-+----------------------------+-------------------------------------------------------------------------+
-|neutron                     |git://git.openstack.org/openstack/neutron                                |
-+----------------------------+-------------------------------------------------------------------------+
-|neutron-lbaas               |git://git.openstack.org/openstack/neutron-lbaas                          |
-+----------------------------+-------------------------------------------------------------------------+
-|neutron-lbaas-dashboard     |git://git.openstack.org/openstack/neutron-lbaas-dashboard                |
-+----------------------------+-------------------------------------------------------------------------+
-|neutron-vpnaas              |git://git.openstack.org/openstack/neutron-vpnaas                         |
-+----------------------------+-------------------------------------------------------------------------+
-|nova-docker                 |git://git.openstack.org/openstack/nova-docker                            |
-+----------------------------+-------------------------------------------------------------------------+
-|nova-powervm                |git://git.openstack.org/openstack/nova-powervm                           |
-+----------------------------+-------------------------------------------------------------------------+
-|octavia                     |git://git.openstack.org/openstack/octavia                                |
-+----------------------------+-------------------------------------------------------------------------+
-|osprofiler                  |git://git.openstack.org/openstack/osprofiler                             |
-+----------------------------+-------------------------------------------------------------------------+
-|rally                       |git://git.openstack.org/openstack/rally                                  |
-+----------------------------+-------------------------------------------------------------------------+
-|sahara                      |git://git.openstack.org/openstack/sahara                                 |
-+----------------------------+-------------------------------------------------------------------------+
-|sahara-dashboard            |git://git.openstack.org/openstack/sahara-dashboard                       |
-+----------------------------+-------------------------------------------------------------------------+
-|scalpels                    |git://git.openstack.org/openstack/scalpels                               |
-+----------------------------+-------------------------------------------------------------------------+
-|searchlight                 |git://git.openstack.org/openstack/searchlight                            |
-+----------------------------+-------------------------------------------------------------------------+
-|senlin                      |git://git.openstack.org/openstack/senlin                                 |
-+----------------------------+-------------------------------------------------------------------------+
-|smaug                       |git://git.openstack.org/openstack/smaug                                  |
-+----------------------------+-------------------------------------------------------------------------+
-|solum                       |git://git.openstack.org/openstack/solum                                  |
-+----------------------------+-------------------------------------------------------------------------+
-|tacker                      |git://git.openstack.org/openstack/tacker                                 |
-+----------------------------+-------------------------------------------------------------------------+
-|tap-as-a-service            |git://git.openstack.org/openstack/tap-as-a-service                       |
-+----------------------------+-------------------------------------------------------------------------+
-|tricircle                   |git://git.openstack.org/openstack/tricircle                              |
-+----------------------------+-------------------------------------------------------------------------+
-|trove                       |git://git.openstack.org/openstack/trove                                  |
-+----------------------------+-------------------------------------------------------------------------+
-|trove-dashboard             |git://git.openstack.org/openstack/trove-dashboard                        |
-+----------------------------+-------------------------------------------------------------------------+
-|vitrage                     |git://git.openstack.org/openstack/vitrage                                |
-+----------------------------+-------------------------------------------------------------------------+
-|vitrage-dashboard           |git://git.openstack.org/openstack/vitrage-dashboard                      |
-+----------------------------+-------------------------------------------------------------------------+
-|vmware-nsx                  |git://git.openstack.org/openstack/vmware-nsx                             |
-+----------------------------+-------------------------------------------------------------------------+
-|watcher                     |git://git.openstack.org/openstack/watcher                                |
-+----------------------------+-------------------------------------------------------------------------+
-|watcher-dashboard           |git://git.openstack.org/openstack/watcher-dashboard                      |
-+----------------------------+-------------------------------------------------------------------------+
-|zaqar                       |git://git.openstack.org/openstack/zaqar                                  |
-+----------------------------+-------------------------------------------------------------------------+
+
+====================================== ===
+Plugin Name                            URL
+====================================== ===
+aodh                                   `git://git.openstack.org/openstack/aodh <https://git.openstack.org/cgit/openstack/aodh>`__
+app-catalog-ui                         `git://git.openstack.org/openstack/app-catalog-ui <https://git.openstack.org/cgit/openstack/app-catalog-ui>`__
+astara                                 `git://git.openstack.org/openstack/astara <https://git.openstack.org/cgit/openstack/astara>`__
+barbican                               `git://git.openstack.org/openstack/barbican <https://git.openstack.org/cgit/openstack/barbican>`__
+blazar                                 `git://git.openstack.org/openstack/blazar <https://git.openstack.org/cgit/openstack/blazar>`__
+broadview-collector                    `git://git.openstack.org/openstack/broadview-collector <https://git.openstack.org/cgit/openstack/broadview-collector>`__
+ceilometer                             `git://git.openstack.org/openstack/ceilometer <https://git.openstack.org/cgit/openstack/ceilometer>`__
+ceilometer-powervm                     `git://git.openstack.org/openstack/ceilometer-powervm <https://git.openstack.org/cgit/openstack/ceilometer-powervm>`__
+cerberus                               `git://git.openstack.org/openstack/cerberus <https://git.openstack.org/cgit/openstack/cerberus>`__
+cloudkitty                             `git://git.openstack.org/openstack/cloudkitty <https://git.openstack.org/cgit/openstack/cloudkitty>`__
+collectd-ceilometer-plugin             `git://git.openstack.org/openstack/collectd-ceilometer-plugin <https://git.openstack.org/cgit/openstack/collectd-ceilometer-plugin>`__
+congress                               `git://git.openstack.org/openstack/congress <https://git.openstack.org/cgit/openstack/congress>`__
+cue                                    `git://git.openstack.org/openstack/cue <https://git.openstack.org/cgit/openstack/cue>`__
+designate                              `git://git.openstack.org/openstack/designate <https://git.openstack.org/cgit/openstack/designate>`__
+devstack-plugin-additional-pkg-repos   `git://git.openstack.org/openstack/devstack-plugin-additional-pkg-repos <https://git.openstack.org/cgit/openstack/devstack-plugin-additional-pkg-repos>`__
+devstack-plugin-amqp1                  `git://git.openstack.org/openstack/devstack-plugin-amqp1 <https://git.openstack.org/cgit/openstack/devstack-plugin-amqp1>`__
+devstack-plugin-bdd                    `git://git.openstack.org/openstack/devstack-plugin-bdd <https://git.openstack.org/cgit/openstack/devstack-plugin-bdd>`__
+devstack-plugin-ceph                   `git://git.openstack.org/openstack/devstack-plugin-ceph <https://git.openstack.org/cgit/openstack/devstack-plugin-ceph>`__
+devstack-plugin-glusterfs              `git://git.openstack.org/openstack/devstack-plugin-glusterfs <https://git.openstack.org/cgit/openstack/devstack-plugin-glusterfs>`__
+devstack-plugin-hdfs                   `git://git.openstack.org/openstack/devstack-plugin-hdfs <https://git.openstack.org/cgit/openstack/devstack-plugin-hdfs>`__
+devstack-plugin-kafka                  `git://git.openstack.org/openstack/devstack-plugin-kafka <https://git.openstack.org/cgit/openstack/devstack-plugin-kafka>`__
+devstack-plugin-nfs                    `git://git.openstack.org/openstack/devstack-plugin-nfs <https://git.openstack.org/cgit/openstack/devstack-plugin-nfs>`__
+devstack-plugin-pika                   `git://git.openstack.org/openstack/devstack-plugin-pika <https://git.openstack.org/cgit/openstack/devstack-plugin-pika>`__
+devstack-plugin-sheepdog               `git://git.openstack.org/openstack/devstack-plugin-sheepdog <https://git.openstack.org/cgit/openstack/devstack-plugin-sheepdog>`__
+devstack-plugin-zmq                    `git://git.openstack.org/openstack/devstack-plugin-zmq <https://git.openstack.org/cgit/openstack/devstack-plugin-zmq>`__
+dragonflow                             `git://git.openstack.org/openstack/dragonflow <https://git.openstack.org/cgit/openstack/dragonflow>`__
+drbd-devstack                          `git://git.openstack.org/openstack/drbd-devstack <https://git.openstack.org/cgit/openstack/drbd-devstack>`__
+ec2-api                                `git://git.openstack.org/openstack/ec2-api <https://git.openstack.org/cgit/openstack/ec2-api>`__
+freezer                                `git://git.openstack.org/openstack/freezer <https://git.openstack.org/cgit/openstack/freezer>`__
+freezer-api                            `git://git.openstack.org/openstack/freezer-api <https://git.openstack.org/cgit/openstack/freezer-api>`__
+freezer-web-ui                         `git://git.openstack.org/openstack/freezer-web-ui <https://git.openstack.org/cgit/openstack/freezer-web-ui>`__
+gce-api                                `git://git.openstack.org/openstack/gce-api <https://git.openstack.org/cgit/openstack/gce-api>`__
+gnocchi                                `git://git.openstack.org/openstack/gnocchi <https://git.openstack.org/cgit/openstack/gnocchi>`__
+ironic                                 `git://git.openstack.org/openstack/ironic <https://git.openstack.org/cgit/openstack/ironic>`__
+ironic-inspector                       `git://git.openstack.org/openstack/ironic-inspector <https://git.openstack.org/cgit/openstack/ironic-inspector>`__
+kingbird                               `git://git.openstack.org/openstack/kingbird <https://git.openstack.org/cgit/openstack/kingbird>`__
+kuryr                                  `git://git.openstack.org/openstack/kuryr <https://git.openstack.org/cgit/openstack/kuryr>`__
+magnum                                 `git://git.openstack.org/openstack/magnum <https://git.openstack.org/cgit/openstack/magnum>`__
+magnum-ui                              `git://git.openstack.org/openstack/magnum-ui <https://git.openstack.org/cgit/openstack/magnum-ui>`__
+manila                                 `git://git.openstack.org/openstack/manila <https://git.openstack.org/cgit/openstack/manila>`__
+mistral                                `git://git.openstack.org/openstack/mistral <https://git.openstack.org/cgit/openstack/mistral>`__
+monasca-api                            `git://git.openstack.org/openstack/monasca-api <https://git.openstack.org/cgit/openstack/monasca-api>`__
+murano                                 `git://git.openstack.org/openstack/murano <https://git.openstack.org/cgit/openstack/murano>`__
+networking-6wind                       `git://git.openstack.org/openstack/networking-6wind <https://git.openstack.org/cgit/openstack/networking-6wind>`__
+networking-bagpipe                     `git://git.openstack.org/openstack/networking-bagpipe <https://git.openstack.org/cgit/openstack/networking-bagpipe>`__
+networking-bgpvpn                      `git://git.openstack.org/openstack/networking-bgpvpn <https://git.openstack.org/cgit/openstack/networking-bgpvpn>`__
+networking-brocade                     `git://git.openstack.org/openstack/networking-brocade <https://git.openstack.org/cgit/openstack/networking-brocade>`__
+networking-calico                      `git://git.openstack.org/openstack/networking-calico <https://git.openstack.org/cgit/openstack/networking-calico>`__
+networking-cisco                       `git://git.openstack.org/openstack/networking-cisco <https://git.openstack.org/cgit/openstack/networking-cisco>`__
+networking-fortinet                    `git://git.openstack.org/openstack/networking-fortinet <https://git.openstack.org/cgit/openstack/networking-fortinet>`__
+networking-generic-switch              `git://git.openstack.org/openstack/networking-generic-switch <https://git.openstack.org/cgit/openstack/networking-generic-switch>`__
+networking-infoblox                    `git://git.openstack.org/openstack/networking-infoblox <https://git.openstack.org/cgit/openstack/networking-infoblox>`__
+networking-l2gw                        `git://git.openstack.org/openstack/networking-l2gw <https://git.openstack.org/cgit/openstack/networking-l2gw>`__
+networking-midonet                     `git://git.openstack.org/openstack/networking-midonet <https://git.openstack.org/cgit/openstack/networking-midonet>`__
+networking-mlnx                        `git://git.openstack.org/openstack/networking-mlnx <https://git.openstack.org/cgit/openstack/networking-mlnx>`__
+networking-nec                         `git://git.openstack.org/openstack/networking-nec <https://git.openstack.org/cgit/openstack/networking-nec>`__
+networking-odl                         `git://git.openstack.org/openstack/networking-odl <https://git.openstack.org/cgit/openstack/networking-odl>`__
+networking-ofagent                     `git://git.openstack.org/openstack/networking-ofagent <https://git.openstack.org/cgit/openstack/networking-ofagent>`__
+networking-ovn                         `git://git.openstack.org/openstack/networking-ovn <https://git.openstack.org/cgit/openstack/networking-ovn>`__
+networking-ovs-dpdk                    `git://git.openstack.org/openstack/networking-ovs-dpdk <https://git.openstack.org/cgit/openstack/networking-ovs-dpdk>`__
+networking-plumgrid                    `git://git.openstack.org/openstack/networking-plumgrid <https://git.openstack.org/cgit/openstack/networking-plumgrid>`__
+networking-powervm                     `git://git.openstack.org/openstack/networking-powervm <https://git.openstack.org/cgit/openstack/networking-powervm>`__
+networking-sfc                         `git://git.openstack.org/openstack/networking-sfc <https://git.openstack.org/cgit/openstack/networking-sfc>`__
+networking-vsphere                     `git://git.openstack.org/openstack/networking-vsphere <https://git.openstack.org/cgit/openstack/networking-vsphere>`__
+neutron                                `git://git.openstack.org/openstack/neutron <https://git.openstack.org/cgit/openstack/neutron>`__
+neutron-lbaas                          `git://git.openstack.org/openstack/neutron-lbaas <https://git.openstack.org/cgit/openstack/neutron-lbaas>`__
+neutron-lbaas-dashboard                `git://git.openstack.org/openstack/neutron-lbaas-dashboard <https://git.openstack.org/cgit/openstack/neutron-lbaas-dashboard>`__
+neutron-vpnaas                         `git://git.openstack.org/openstack/neutron-vpnaas <https://git.openstack.org/cgit/openstack/neutron-vpnaas>`__
+nova-docker                            `git://git.openstack.org/openstack/nova-docker <https://git.openstack.org/cgit/openstack/nova-docker>`__
+nova-powervm                           `git://git.openstack.org/openstack/nova-powervm <https://git.openstack.org/cgit/openstack/nova-powervm>`__
+octavia                                `git://git.openstack.org/openstack/octavia <https://git.openstack.org/cgit/openstack/octavia>`__
+osprofiler                             `git://git.openstack.org/openstack/osprofiler <https://git.openstack.org/cgit/openstack/osprofiler>`__
+python-freezerclient                   `git://git.openstack.org/openstack/python-freezerclient <https://git.openstack.org/cgit/openstack/python-freezerclient>`__
+rally                                  `git://git.openstack.org/openstack/rally <https://git.openstack.org/cgit/openstack/rally>`__
+sahara                                 `git://git.openstack.org/openstack/sahara <https://git.openstack.org/cgit/openstack/sahara>`__
+sahara-dashboard                       `git://git.openstack.org/openstack/sahara-dashboard <https://git.openstack.org/cgit/openstack/sahara-dashboard>`__
+scalpels                               `git://git.openstack.org/openstack/scalpels <https://git.openstack.org/cgit/openstack/scalpels>`__
+searchlight                            `git://git.openstack.org/openstack/searchlight <https://git.openstack.org/cgit/openstack/searchlight>`__
+searchlight-ui                         `git://git.openstack.org/openstack/searchlight-ui <https://git.openstack.org/cgit/openstack/searchlight-ui>`__
+senlin                                 `git://git.openstack.org/openstack/senlin <https://git.openstack.org/cgit/openstack/senlin>`__
+smaug                                  `git://git.openstack.org/openstack/smaug <https://git.openstack.org/cgit/openstack/smaug>`__
+smaug-dashboard                        `git://git.openstack.org/openstack/smaug-dashboard <https://git.openstack.org/cgit/openstack/smaug-dashboard>`__
+solum                                  `git://git.openstack.org/openstack/solum <https://git.openstack.org/cgit/openstack/solum>`__
+tacker                                 `git://git.openstack.org/openstack/tacker <https://git.openstack.org/cgit/openstack/tacker>`__
+tap-as-a-service                       `git://git.openstack.org/openstack/tap-as-a-service <https://git.openstack.org/cgit/openstack/tap-as-a-service>`__
+tricircle                              `git://git.openstack.org/openstack/tricircle <https://git.openstack.org/cgit/openstack/tricircle>`__
+trove                                  `git://git.openstack.org/openstack/trove <https://git.openstack.org/cgit/openstack/trove>`__
+trove-dashboard                        `git://git.openstack.org/openstack/trove-dashboard <https://git.openstack.org/cgit/openstack/trove-dashboard>`__
+vitrage                                `git://git.openstack.org/openstack/vitrage <https://git.openstack.org/cgit/openstack/vitrage>`__
+vitrage-dashboard                      `git://git.openstack.org/openstack/vitrage-dashboard <https://git.openstack.org/cgit/openstack/vitrage-dashboard>`__
+vmware-nsx                             `git://git.openstack.org/openstack/vmware-nsx <https://git.openstack.org/cgit/openstack/vmware-nsx>`__
+watcher                                `git://git.openstack.org/openstack/watcher <https://git.openstack.org/cgit/openstack/watcher>`__
+watcher-dashboard                      `git://git.openstack.org/openstack/watcher-dashboard <https://git.openstack.org/cgit/openstack/watcher-dashboard>`__
+zaqar                                  `git://git.openstack.org/openstack/zaqar <https://git.openstack.org/cgit/openstack/zaqar>`__
+zaqar-ui                               `git://git.openstack.org/openstack/zaqar-ui <https://git.openstack.org/cgit/openstack/zaqar-ui>`__
+====================================== ===
+
+
diff --git a/driver_certs/cinder_driver_cert.sh b/driver_certs/cinder_driver_cert.sh
deleted file mode 100755
index d066e06..0000000
--- a/driver_certs/cinder_driver_cert.sh
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/usr/bin/env bash
-
-# **cinder_cert.sh**
-
-# This script is a simple wrapper around the tempest volume api tests
-# It requires that you have a working and functional devstack install
-# and that you've enabled your device driver by making the necessary
-# modifications to /etc/cinder/cinder.conf
-
-# This script will refresh your openstack repo's and restart the cinder
-# services to pick up your driver changes.
-# please NOTE; this script assumes your devstack install is functional
-# and includes tempest. A good first step is to make sure you can
-# create volumes on your device before you even try and run this script.
-
-# It also assumes default install location (/opt/stack/xxx)
-# to aid in debug, you should also verify that you've added
-# an output directory for screen logs:
-#
-#     SCREEN_LOGDIR=/opt/stack/screen-logs
-
-set -o pipefail
-
-CERT_DIR=$(cd $(dirname "$0") && pwd)
-TOP_DIR=$(cd $CERT_DIR/..; pwd)
-
-source $TOP_DIR/functions
-source $TOP_DIR/stackrc
-source $TOP_DIR/openrc
-source $TOP_DIR/lib/infra
-source $TOP_DIR/lib/tempest
-source $TOP_DIR/lib/cinder
-
-TEMPFILE=`mktemp`
-RECLONE=True
-
-function log_message {
-    MESSAGE=$1
-    STEP_HEADER=$2
-    if [[ "$STEP_HEADER" = "True" ]]; then
-        echo -e "\n========================================================" | tee -a $TEMPFILE
-    fi
-    echo -e `date +%m/%d/%y/%T:`"${MESSAGE}" | tee -a $TEMPFILE
-    if [[ "$STEP_HEADER" = "True" ]]; then
-        echo -e "========================================================" | tee -a $TEMPFILE
-    fi
-}
-
-if [[ "$OFFLINE" = "True" ]]; then
-    echo "ERROR: Driver cert requires fresh clone/pull from ${CINDER_BRANCH}"
-    echo "       Please set OFFLINE=False and retry."
-    exit 1
-fi
-
-log_message "RUNNING CINDER DRIVER CERTIFICATION CHECK", True
-log_message "Output is being logged to: $TEMPFILE"
-
-cd $CINDER_DIR
-log_message "Cloning to ${CINDER_REPO}...", True
-install_cinder
-
-log_message "Pull a fresh Clone of cinder repo...", True
-git status | tee -a $TEMPFILE
-git log --pretty=oneline -n 1 | tee -a $TEMPFILE
-
-log_message "Gathering copy of cinder.conf file (passwords will be scrubbed)...", True
-cat /etc/cinder/cinder.conf | egrep -v "(^#.*|^$)" | tee -a $TEMPFILE
-sed -i "s/\(.*password.*=\).*$/\1 xxx/i" $TEMPFILE
-log_message "End of cinder.conf.", True
-
-cd $TOP_DIR
-# Verify tempest is installed/enabled
-if ! is_service_enabled tempest; then
-    log_message "ERROR!!! Cert requires tempest in enabled_services!", True
-    log_message"       Please add tempest to enabled_services and retry."
-    exit 1
-fi
-
-cd $TEMPEST_DIR
-install_tempest
-
-log_message "Verify tempest is current....", True
-git status | tee -a $TEMPFILE
-log_message "Check status and get latest commit..."
-git log --pretty=oneline -n 1 | tee -a $TEMPFILE
-
-
-#stop and restart cinder services
-log_message "Restart Cinder services...", True
-stop_cinder
-sleep 1
-start_cinder
-sleep 5
-
-# run tempest api/volume/test_*
-log_message "Run the actual tempest volume tests (./tools/pretty_tox.sh volume)...", True
-./tools/pretty_tox.sh volume 2>&1 | tee -a $TEMPFILE
-if [[ $? = 0 ]]; then
-    log_message "CONGRATULATIONS!!!  Device driver PASSED!", True
-    log_message "Submit output: ($TEMPFILE)"
-    exit 0
-else
-    log_message "SORRY!!!  Device driver FAILED!", True
-    log_message "Check output in $TEMPFILE"
-    exit 1
-fi
diff --git a/functions-common b/functions-common
index b0352d3..0806681 100644
--- a/functions-common
+++ b/functions-common
@@ -380,7 +380,7 @@
         DISTRO="sle${os_RELEASE%.*}"
     elif [[ "$os_VENDOR" =~ (Red.*Hat) || \
         "$os_VENDOR" =~ (CentOS) || \
-        "$os_VENDOR" =~ (OracleLinux) || \
+        "$os_VENDOR" =~ (OracleServer) || \
         "$os_VENDOR" =~ (Virtuozzo) ]]; then
         # Drop the . release as we assume it's compatible
         # XXX re-evaluate when we get RHEL10
@@ -427,7 +427,7 @@
         GetOSVersion
     fi
 
-    [ "$os_VENDOR" = "OracleLinux" ]
+    [ "$os_VENDOR" = "OracleServer" ]
 }
 
 
@@ -441,7 +441,7 @@
 
     [ "$os_VENDOR" = "Fedora" ] || [ "$os_VENDOR" = "Red Hat" ] || \
         [ "$os_VENDOR" = "RedHatEnterpriseServer" ] || \
-        [ "$os_VENDOR" = "CentOS" ] || [ "$os_VENDOR" = "OracleLinux" ] || \
+        [ "$os_VENDOR" = "CentOS" ] || [ "$os_VENDOR" = "OracleServer" ] || \
         [ "$os_VENDOR" = "Virtuozzo" ] || [ "$os_VENDOR" = "kvmibm" ]
 }
 
diff --git a/lib/keystone b/lib/keystone
index 4361fe0..b5c107c 100644
--- a/lib/keystone
+++ b/lib/keystone
@@ -619,9 +619,9 @@
         --bootstrap-role-name admin \
         --bootstrap-service-name keystone \
         --bootstrap-region-id "$REGION_NAME" \
-        --bootstrap-admin-url "$KEYSTONE_AUTH_URI/v$IDENTITY_API_VERSION" \
-        --bootstrap-public-url "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v$IDENTITY_API_VERSION" \
-        --bootstrap-internal-url "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v$IDENTITY_API_VERSION"
+        --bootstrap-admin-url "$KEYSTONE_AUTH_URI" \
+        --bootstrap-public-url "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT" \
+        --bootstrap-internal-url "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT"
 }
 
 # Restore xtrace
diff --git a/lib/neutron-legacy b/lib/neutron-legacy
index 3ed690c..084a356 100644
--- a/lib/neutron-legacy
+++ b/lib/neutron-legacy
@@ -1190,14 +1190,7 @@
     iniset $NEUTRON_CONF DEFAULT notify_nova_on_port_status_changes $Q_NOTIFY_NOVA_PORT_STATUS_CHANGES
     iniset $NEUTRON_CONF DEFAULT notify_nova_on_port_data_changes $Q_NOTIFY_NOVA_PORT_DATA_CHANGES
 
-    iniset $NEUTRON_CONF nova auth_type password
-    iniset $NEUTRON_CONF nova auth_url $KEYSTONE_AUTH_URI
-    iniset $NEUTRON_CONF nova username nova
-    iniset $NEUTRON_CONF nova password $SERVICE_PASSWORD
-    iniset $NEUTRON_CONF nova user_domain_id default
-    iniset $NEUTRON_CONF nova project_name $SERVICE_PROJECT_NAME
-    iniset $NEUTRON_CONF nova project_domain_id default
-    iniset $NEUTRON_CONF nova region_name $REGION_NAME
+    configure_auth_token_middleware $NEUTRON_CONF nova $NEUTRON_AUTH_CACHE_DIR nova
 
     # Configure plugin
     neutron_plugin_configure_service
diff --git a/lib/neutron_plugins/openvswitch_agent b/lib/neutron_plugins/openvswitch_agent
index 339d5fd..aba2587 100644
--- a/lib/neutron_plugins/openvswitch_agent
+++ b/lib/neutron_plugins/openvswitch_agent
@@ -96,17 +96,17 @@
 
         # Set up domU's L2 agent:
 
-        # Create a bridge "br-$GUEST_INTERFACE_DEFAULT"
-        _neutron_ovs_base_add_bridge "br-$GUEST_INTERFACE_DEFAULT"
-        # Add $GUEST_INTERFACE_DEFAULT to that bridge
-        sudo ovs-vsctl -- --may-exist add-port "br-$GUEST_INTERFACE_DEFAULT" $GUEST_INTERFACE_DEFAULT
+        # Create a bridge "br-$VLAN_INTERFACE"
+        _neutron_ovs_base_add_bridge "br-$VLAN_INTERFACE"
+        # Add $VLAN_INTERFACE to that bridge
+        sudo ovs-vsctl -- --may-exist add-port "br-$VLAN_INTERFACE" $VLAN_INTERFACE
 
         # Create external bridge and add port
         _neutron_ovs_base_add_bridge $PUBLIC_BRIDGE
-        sudo ovs-vsctl -- --may-exist add-port $PUBLIC_BRIDGE $PUBLIC_INTERFACE_DEFAULT
+        sudo ovs-vsctl -- --may-exist add-port $PUBLIC_BRIDGE $PUBLIC_INTERFACE
 
         # Set bridge mappings to "physnet1:br-$GUEST_INTERFACE_DEFAULT"
-        iniset "/$Q_PLUGIN_CONF_FILE.domU" ovs bridge_mappings "physnet1:br-$GUEST_INTERFACE_DEFAULT,physnet-ex:$PUBLIC_BRIDGE"
+        iniset "/$Q_PLUGIN_CONF_FILE.domU" ovs bridge_mappings "physnet1:br-$VLAN_INTERFACE,physnet-ex:$PUBLIC_BRIDGE"
         # Set integration bridge to domU's
         iniset "/$Q_PLUGIN_CONF_FILE.domU" ovs integration_bridge $OVS_BRIDGE
         # Set root wrap
diff --git a/lib/nova b/lib/nova
index 1b3d086..8823e1d 100644
--- a/lib/nova
+++ b/lib/nova
@@ -429,9 +429,9 @@
         get_or_create_endpoint \
             "compute" \
             "$REGION_NAME" \
-            "$nova_api_url/v2.1/\$(project_id)s" \
-            "$nova_api_url/v2.1/\$(project_id)s" \
-            "$nova_api_url/v2.1/\$(project_id)s"
+            "$nova_api_url/v2.1" \
+            "$nova_api_url/v2.1" \
+            "$nova_api_url/v2.1"
     fi
 
     if is_service_enabled n-api; then
@@ -648,7 +648,7 @@
     if is_service_enabled n-cell; then
         cp $NOVA_CONF $NOVA_CELLS_CONF
         iniset $NOVA_CELLS_CONF database connection `database_connection_url $NOVA_CELLS_DB`
-        iniset $NOVA_CELLS_CONF DEFAULT rabbit_virtual_host child_cell
+        iniset $NOVA_CELLS_CONF oslo_messaging_rabbit rabbit_virtual_host child_cell
         iniset $NOVA_CELLS_CONF DEFAULT dhcpbridge_flagfile $NOVA_CELLS_CONF
         iniset $NOVA_CELLS_CONF cells enable True
         iniset $NOVA_CELLS_CONF cells cell_type compute
@@ -932,6 +932,27 @@
     stop_nova_compute
 }
 
+# create_instance_types(): Create default flavors
+function create_flavors {
+    if is_service_enabled n-api; then
+        if ! openstack flavor list | grep -q ds512M; then
+            # Note that danms hates these flavors and apologizes for sdague
+            openstack flavor create --id c1 --ram 256 --disk 0 --vcpus 1 cirros256
+            openstack flavor create --id d1 --ram 512 --disk 5 --vcpus 1 ds512M
+            openstack flavor create --id d2 --ram 1024 --disk 10 --vcpus 1 ds1G
+            openstack flavor create --id d3 --ram 2048 --disk 10 --vcpus 2 ds2G
+            openstack flavor create --id d4 --ram 4096 --disk 20 --vcpus 4 ds4G
+        fi
+
+        if ! openstack flavor list | grep -q m1.tiny; then
+            openstack flavor create --id 1 --ram 512 --disk 1 --vcpus 1 m1.tiny
+            openstack flavor create --id 2 --ram 2048 --disk 20 --vcpus 1 m1.small
+            openstack flavor create --id 3 --ram 4096 --disk 40 --vcpus 2 m1.medium
+            openstack flavor create --id 4 --ram 8192 --disk 80 --vcpus 4 m1.large
+            openstack flavor create --id 5 --ram 16384 --disk 160 --vcpus 8 m1.xlarge
+        fi
+    fi
+}
 
 # Restore xtrace
 $_XTRACE_LIB_NOVA
diff --git a/lib/swift b/lib/swift
index 82144f7..f47608c 100644
--- a/lib/swift
+++ b/lib/swift
@@ -149,6 +149,11 @@
 # Toggle for deploying Swift under HTTPD + mod_wsgi
 SWIFT_USE_MOD_WSGI=${SWIFT_USE_MOD_WSGI:-False}
 
+# A space-separated list of storage node IPs that
+# should be used to create the Swift rings
+SWIFT_STORAGE_IPS=${SWIFT_STORAGE_IPS:-}
+
+
 # Functions
 # ---------
 
@@ -693,14 +698,35 @@
         swift-ring-builder container.builder create ${SWIFT_PARTITION_POWER_SIZE} ${SWIFT_REPLICAS} 1
         swift-ring-builder account.builder create ${SWIFT_PARTITION_POWER_SIZE} ${SWIFT_REPLICAS} 1
 
-        for node_number in ${SWIFT_REPLICAS_SEQ}; do
-            swift-ring-builder object.builder add z${node_number}-${SWIFT_SERVICE_LOCAL_HOST}:$(( OBJECT_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
-            swift-ring-builder container.builder add z${node_number}-${SWIFT_SERVICE_LOCAL_HOST}:$(( CONTAINER_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
-            swift-ring-builder account.builder add z${node_number}-${SWIFT_SERVICE_LOCAL_HOST}:$(( ACCOUNT_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
-        done
-        swift-ring-builder object.builder rebalance
-        swift-ring-builder container.builder rebalance
-        swift-ring-builder account.builder rebalance
+        # The ring will be created on each node, and because the order of
+        # nodes is identical we can use a seed for rebalancing, making it
+        # possible to get a ring on each node that uses the same partition
+        # assignment.
+        if [[ -n $SWIFT_STORAGE_IPS ]]; then
+            local node_number
+            node_number=1
+
+            for node in ${SWIFT_STORAGE_IPS}; do
+                swift-ring-builder object.builder add z${node_number}-${node}:${OBJECT_PORT_BASE}/sdb1 1
+                swift-ring-builder container.builder add z${node_number}-${node}:${CONTAINER_PORT_BASE}/sdb1 1
+                swift-ring-builder account.builder add z${node_number}-${node}:${ACCOUNT_PORT_BASE}/sdb1 1
+                let "node_number=node_number+1"
+            done
+
+        else
+
+            for node_number in ${SWIFT_REPLICAS_SEQ}; do
+                swift-ring-builder object.builder add z${node_number}-${SWIFT_SERVICE_LOCAL_HOST}:$(( OBJECT_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
+                swift-ring-builder container.builder add z${node_number}-${SWIFT_SERVICE_LOCAL_HOST}:$(( CONTAINER_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
+                swift-ring-builder account.builder add z${node_number}-${SWIFT_SERVICE_LOCAL_HOST}:$(( ACCOUNT_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
+            done
+        fi
+
+        # We use a seed for rebalancing. Doing this allows us to create
+        # identical rings on multiple nodes if SWIFT_STORAGE_IPS is the same
+        swift-ring-builder object.builder rebalance 42
+        swift-ring-builder container.builder rebalance 42
+        swift-ring-builder account.builder rebalance 42
     } && popd >/dev/null
 
     # Create cache dir
diff --git a/lib/tempest b/lib/tempest
index d8790f8..fd98c94 100644
--- a/lib/tempest
+++ b/lib/tempest
@@ -317,44 +317,6 @@
     fi
 
     # Compute Features
-    # Run ``verify_tempest_config -ur`` to retrieve enabled extensions on API endpoints
-    # NOTE(mtreinish): This must be done after auth settings are added to the tempest config
-    local tmp_cfg_file
-    tmp_cfg_file=$(mktemp)
-    cd $TEMPEST_DIR
-    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_project_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_project_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
-
-    local compute_api_extensions=${COMPUTE_API_EXTENSIONS:-"all"}
-    if [[ ! -z "$DISABLE_COMPUTE_API_EXTENSIONS" ]]; then
-        # Enabled extensions are either the ones explicitly specified or those available on the API endpoint
-        compute_api_extensions=${COMPUTE_API_EXTENSIONS:-$(iniget $tmp_cfg_file compute-feature-enabled api_extensions | tr -d " ")}
-        # Remove disabled extensions
-        compute_api_extensions=$(remove_disabled_extensions $compute_api_extensions $DISABLE_COMPUTE_API_EXTENSIONS)
-    fi
-
     # Set the microversion range for compute tests.
     # This is used to run the Nova microversions tests.
     # Setting [None, latest] range of microversion which allow Tempest to run all microversions tests.
@@ -383,7 +345,6 @@
     iniset $TEMPEST_CONFIG compute-feature-enabled live_migration ${LIVE_MIGRATION_AVAILABLE:-False}
     iniset $TEMPEST_CONFIG compute-feature-enabled change_password False
     iniset $TEMPEST_CONFIG compute-feature-enabled block_migration_for_live_migration ${USE_BLOCK_MIGRATION_FOR_LIVE_MIGRATION:-False}
-    iniset $TEMPEST_CONFIG compute-feature-enabled api_extensions $compute_api_extensions
     # TODO(mriedem): Remove the preserve_ports flag when Juno is end of life.
     iniset $TEMPEST_CONFIG compute-feature-enabled preserve_ports True
     # TODO(gilliard): Remove the live_migrate_paused_instances flag when Juno is end of life.
@@ -398,6 +359,8 @@
         iniset $TEMPEST_CONFIG compute-feature-enabled shelve False
         # Cells doesn't support hot-plugging virtual interfaces.
         iniset $TEMPEST_CONFIG compute-feature-enabled interface_attach False
+        # Cells v1 doesn't support the rescue/unrescue tests in Tempest
+        iniset $TEMPEST_CONFIG compute-feature-enabled rescue False
 
         if  [[ -z "$DEFAULT_INSTANCE_TYPE" ]]; then
             # Cells supports resize but does not currently work with devstack
@@ -418,15 +381,6 @@
     iniset $TEMPEST_CONFIG network-feature-enabled ipv6 "$IPV6_ENABLED"
     iniset $TEMPEST_CONFIG network-feature-enabled ipv6_subnet_attributes "$IPV6_SUBNET_ATTRIBUTES_ENABLED"
 
-    local network_api_extensions=${NETWORK_API_EXTENSIONS:-"all"}
-    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 " ")}
-        # Remove disabled extensions
-        network_api_extensions=$(remove_disabled_extensions $network_api_extensions $DISABLE_NETWORK_API_EXTENSIONS)
-    fi
-    iniset $TEMPEST_CONFIG network-feature-enabled api_extensions $network_api_extensions
-
     # Orchestration Tests
     if is_service_enabled heat; then
         if [[ ! -z "$HEAT_CFN_IMAGE_URL" ]]; then
@@ -459,16 +413,6 @@
     # Telemetry
     iniset $TEMPEST_CONFIG telemetry-feature-enabled events "True"
 
-    # Object Store
-    local object_storage_api_extensions=${OBJECT_STORAGE_API_EXTENSIONS:-"all"}
-    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 " ")}
-        # Remove disabled extensions
-        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
-
     # Validation
     iniset $TEMPEST_CONFIG validation run_validation ${TEMPEST_RUN_VALIDATION:-False}
     iniset $TEMPEST_CONFIG validation ip_version_for_ssh 4
@@ -482,15 +426,6 @@
     # TODO(ynesenenko): Remove the volume_services flag when Liberty and Kilo will correct work with host info.
     iniset $TEMPEST_CONFIG volume-feature-enabled volume_services True
 
-    local volume_api_extensions=${VOLUME_API_EXTENSIONS:-"all"}
-    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 " ")}
-        # Remove disabled extensions
-        volume_api_extensions=$(remove_disabled_extensions $volume_api_extensions $DISABLE_VOLUME_API_EXTENSIONS)
-    fi
-    iniset $TEMPEST_CONFIG volume-feature-enabled api_extensions $volume_api_extensions
-
     if ! is_service_enabled c-bak; then
         iniset $TEMPEST_CONFIG volume-feature-enabled backup False
     fi
@@ -571,6 +506,76 @@
         iniset $TEMPEST_CONFIG service_available cinder "False"
     fi
 
+    # Run tempest configuration utilities. This must be done last during configuration to
+    # ensure as complete a config as possible already exists
+
+    # NOTE(mtreinish): Respect constraints on tempest verify-config venv
+    local tmp_cfg_file
+    tmp_cfg_file=$(mktemp)
+    cd $TEMPEST_DIR
+    if [[ "$OFFLINE" != "True" ]]; then
+        tox -revenv --notest
+    fi
+    tox -evenv -- pip install -c $REQUIREMENTS_DIR/upper-constraints.txt -r requirements.txt
+
+    # Auth:
+    iniset $TEMPEST_CONFIG auth tempest_roles "Member"
+    if [[ $TEMPEST_USE_TEST_ACCOUNTS == "True" ]]; then
+        if [[ $TEMPEST_HAS_ADMIN == "True" ]]; then
+            tox -evenv -- tempest-account-generator -c $TEMPEST_CONFIG --os-username $admin_username --os-password "$password" --os-tenant-name $admin_project_name -r $TEMPEST_CONCURRENCY --with-admin etc/accounts.yaml
+        else
+            tox -evenv -- tempest-account-generator -c $TEMPEST_CONFIG --os-username $admin_username --os-password "$password" --os-tenant-name $admin_project_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
+
+    # API Extensions
+    # Run ``verify_tempest_config -ur`` to retrieve enabled extensions on API endpoints
+    # NOTE(mtreinish): This must be done after auth settings are added to the tempest config
+    tox -evenv -- tempest verify-config -uro $tmp_cfg_file
+    # Nova API extensions
+    local compute_api_extensions=${COMPUTE_API_EXTENSIONS:-"all"}
+    if [[ ! -z "$DISABLE_COMPUTE_API_EXTENSIONS" ]]; then
+        # Enabled extensions are either the ones explicitly specified or those available on the API endpoint
+        compute_api_extensions=${COMPUTE_API_EXTENSIONS:-$(iniget $tmp_cfg_file compute-feature-enabled api_extensions | tr -d " ")}
+        # Remove disabled extensions
+        compute_api_extensions=$(remove_disabled_extensions $compute_api_extensions $DISABLE_COMPUTE_API_EXTENSIONS)
+    fi
+    iniset $TEMPEST_CONFIG compute-feature-enabled api_extensions $compute_api_extensions
+    # Neutron API Extensions
+    local network_api_extensions=${NETWORK_API_EXTENSIONS:-"all"}
+    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 " ")}
+        # Remove disabled extensions
+        network_api_extensions=$(remove_disabled_extensions $network_api_extensions $DISABLE_NETWORK_API_EXTENSIONS)
+    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"}
+    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 " ")}
+        # Remove disabled extensions
+        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
+    # Cinder API Extensions
+    local volume_api_extensions=${VOLUME_API_EXTENSIONS:-"all"}
+    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 " ")}
+        # Remove disabled extensions
+        volume_api_extensions=$(remove_disabled_extensions $volume_api_extensions $DISABLE_VOLUME_API_EXTENSIONS)
+    fi
+    iniset $TEMPEST_CONFIG volume-feature-enabled api_extensions $volume_api_extensions
+
     # Restore IFS
     IFS=$ifs
 }
diff --git a/stack.sh b/stack.sh
index 793b7dc..739d939 100755
--- a/stack.sh
+++ b/stack.sh
@@ -185,7 +185,7 @@
 
 # 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} =~ (trusty|vivid|wily|7.0|wheezy|sid|testing|jessie|f22|f23|rhel7|kvmibm1) ]]; then
+if [[ ! ${DISTRO} =~ (trusty|wily|xenial|7.0|wheezy|sid|testing|jessie|f22|f23|rhel7|kvmibm1) ]]; 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"
@@ -1251,6 +1251,7 @@
 if is_service_enabled nova; then
     echo_summary "Starting Nova"
     start_nova
+    create_flavors
 fi
 if is_service_enabled cinder; then
     echo_summary "Starting Cinder"
diff --git a/tools/generate-devstack-plugins-list.py b/tools/generate-devstack-plugins-list.py
index aeec4dd..089a6ef 100644
--- a/tools/generate-devstack-plugins-list.py
+++ b/tools/generate-devstack-plugins-list.py
@@ -53,7 +53,7 @@
     if len(r.text) > 0:
         return True
     else:
-        False
+        return False
 
 logging.debug("Getting project list from %s" % url)
 r = requests.get(url)
@@ -64,4 +64,4 @@
 
 for project in found_plugins:
     # strip of openstack/
-    print project[10:]
+    print(project[10:])
diff --git a/tools/generate-devstack-plugins-list.sh b/tools/generate-devstack-plugins-list.sh
old mode 100644
new mode 100755
index c3c8f24..95f1331
--- a/tools/generate-devstack-plugins-list.sh
+++ b/tools/generate-devstack-plugins-list.sh
@@ -68,6 +68,7 @@
 # foobar                 `git://... <http://...>`__
 # ...
 
+printf "\n\n"
 title_underline ${name_col_len}
 printf "%-${name_col_len}s %s\n" "Plugin Name" "URL"
 title_underline ${name_col_len}
@@ -78,6 +79,10 @@
     printf "%-${name_col_len}s %s\n" "${plugin}" "\`${giturl} <${gitlink}>\`__"
 done
 
+title_underline ${name_col_len}
+
+printf "\n\n"
+
 if [[ -r data/devstack-plugins-registry.footer ]]; then
     cat data/devstack-plugins-registry.footer
 fi
diff --git a/tools/worlddump.py b/tools/worlddump.py
index 345c2a3..8c053e0 100755
--- a/tools/worlddump.py
+++ b/tools/worlddump.py
@@ -14,6 +14,7 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
+
 """Dump the state of the world for post mortem."""
 
 import argparse
@@ -48,32 +49,38 @@
 
 
 def warn(msg):
-    print "WARN: %s" % msg
+    print("WARN: %s" % msg)
 
 
 def _dump_cmd(cmd):
-    print cmd
-    print "-" * len(cmd)
-    print
+    print(cmd)
+    print("-" * len(cmd))
+    print()
     try:
         subprocess.check_call(cmd, shell=True)
-        print
+        print()
     except subprocess.CalledProcessError as e:
-        print "*** Failed to run '%(cmd)s': %(err)s" % {'cmd': cmd, 'err': e}
+        print("*** Failed to run '%(cmd)s': %(err)s" % {'cmd': cmd, 'err': e})
 
 
 def _find_cmd(cmd):
     if not spawn.find_executable(cmd):
-        print "*** %s not found: skipping" % cmd
+        print("*** %s not found: skipping" % cmd)
         return False
     return True
 
 
 def _header(name):
-    print
-    print name
-    print "=" * len(name)
-    print
+    print()
+    print(name)
+    print("=" * len(name))
+    print()
+
+
+def _bridge_list():
+    process = subprocess.Popen(['ovs-vsctl', 'list-br'], stdout=subprocess.PIPE)
+    stdout, _ = process.communicate()
+    return stdout.split()
 
 
 # This method gets a max openflow version supported by openvswitch.
@@ -83,7 +90,7 @@
 #     Compiled Dec  9 2015 14:08:08
 #     OpenFlow versions 0x1:0x4
 #
-# The above shows that openvswitch supports from OpenFlow11 to OpenFlow13.
+# The above shows that openvswitch supports from OpenFlow10 to OpenFlow13.
 # This method gets max version searching 'OpenFlow versions 0x1:0x'.
 # And return a version value converted to an integer type.
 def _get_ofp_version():
@@ -109,7 +116,7 @@
             # if it doesn't look like an int, that's fine
             pass
 
-    print dfraw
+    print(dfraw)
 
 
 def ebtables_dump():
@@ -157,14 +164,11 @@
     if not _find_cmd('ovs-vsctl'):
         return
 
-    # NOTE(ihrachys): worlddump is used outside of devstack context (f.e. in
-    # grenade), so there is no single place to determine the bridge names from.
-    # Hardcode for now.
-    bridges = ('br-int', 'br-tun', 'br-ex')
+    bridges = _bridge_list()
     ofctl_cmds = ('show', 'dump-ports-desc', 'dump-ports', 'dump-flows')
     ofp_max = _get_ofp_version()
     vers = 'OpenFlow10'
-    for i in range(ofp_max + 1):
+    for i in range(1, ofp_max + 1):
         vers += ',OpenFlow1' + str(i)
     _dump_cmd("sudo ovs-vsctl show")
     for ofctl_cmd in ofctl_cmds:
@@ -193,17 +197,17 @@
     try:
         subprocess.check_call(["pgrep","nova-compute"])
     except subprocess.CalledProcessError:
-        print "Skipping as nova-compute does not appear to be running"
+        print("Skipping as nova-compute does not appear to be running")
         return
 
     _dump_cmd("kill -s USR2 `pgrep nova-compute`")
-    print "guru meditation report in nova-compute log"
+    print("guru meditation report in nova-compute log")
 
 
 def main():
     opts = get_options()
     fname = filename(opts.dir, opts.name)
-    print "World dumping... see %s for details" % fname
+    print("World dumping... see %s for details" % fname)
     sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
     with open(fname, 'w') as f:
         os.dup2(f.fileno(), sys.stdout.fileno())