Merge "Add Ironic hardware deployment support"
diff --git a/doc/source/configuration.rst b/doc/source/configuration.rst
index eba2956..a4d940d 100644
--- a/doc/source/configuration.rst
+++ b/doc/source/configuration.rst
@@ -74,7 +74,7 @@
 ``localrc`` file (actually ``.localrc.auto``). This allows all custom
 settings for DevStack to be contained in a single file. If ``localrc``
 exists it will be used instead to preserve backward-compatibility. More
-details on the `contents of localrc <localrc.html>`__ are available.
+details on the :doc:`contents of local.conf <local.conf>` are available.
 
 ::
 
diff --git a/doc/source/contributing.rst b/doc/source/contributing.rst
index b4f9f37..7ca3d64 100644
--- a/doc/source/contributing.rst
+++ b/doc/source/contributing.rst
@@ -59,16 +59,17 @@
 The DevStack repo generally keeps all of the primary scripts at the root
 level.
 
-``docs`` - Contains the source for this website. It is built using
-``tools/build_docs.sh``.
+``doc`` - Contains the Sphinx source for the documentation.
+``tools/build_docs.sh`` is used to generate the HTML versions of the
+DevStack scripts.  A complete doc build can be run with ``tox -edocs``.
 
-``exercises`` - Contains the test scripts used to validate and
+``exercises`` - Contains the test scripts used to sanity-check and
 demonstrate some OpenStack functions. These scripts know how to exit
 early or skip services that are not enabled.
 
 ``extras.d`` - Contains the dispatch scripts called by the hooks in
-``stack.sh``, ``unstack.sh`` and ``clean.sh``. See `the plugins
-docs <plugins.html>`__ for more information.
+``stack.sh``, ``unstack.sh`` and ``clean.sh``. See :doc:`the plugins
+docs <plugins>` for more information.
 
 ``files`` - Contains a variety of otherwise lost files used in
 configuring and operating DevStack. This includes templates for
@@ -84,10 +85,10 @@
 DevStack repo.
 
 ``tests`` - the DevStack test suite is rather sparse, mostly consisting
-of test of specific fragile functions in the ``functions`` file.
+of test of specific fragile functions in the ``functions`` and
+``functions-common`` files.
 
-``tools`` - Contains a collection of stand-alone scripts, some of which
-have aged a bit (does anyone still do ramdisk installs?). While these
+``tools`` - Contains a collection of stand-alone scripts. While these
 may reference the top-level DevStack configuration they can generally be
 run alone. There are also some sub-directories to support specific
 environments such as XenServer.
diff --git a/doc/source/faq.rst b/doc/source/faq.rst
index 7b33b41..b7943ba 100644
--- a/doc/source/faq.rst
+++ b/doc/source/faq.rst
@@ -47,11 +47,8 @@
     and bug reports go to
     `LaunchPad <http://bugs.launchpad.net/devstack/>`__. Contributions
     follow the usual process as described in the `OpenStack
-    wiki <http://wiki.openstack.org/HowToContribute>`__ even though
-    DevStack is not an official OpenStack project. This site is housed
-    in the CloudBuilder's
-    `github <http://github.com/cloudbuilders/devstack>`__ in the
-    gh-pages branch.
+    wiki <http://wiki.openstack.org/HowToContribute>`__. This Sphinx
+    documentation is housed in the doc directory.
 Q: Why not use packages?
     A: Unlike packages, DevStack leaves your cloud ready to develop -
     checkouts of the code and services running in screen. However, many
diff --git a/doc/source/guides/multinode-lab.rst b/doc/source/guides/multinode-lab.rst
index 1c53227..4c60b6a 100644
--- a/doc/source/guides/multinode-lab.rst
+++ b/doc/source/guides/multinode-lab.rst
@@ -16,9 +16,9 @@
 CD <https://help.ubuntu.com/community/Installation/MinimalCD>`__ for
 Ubuntu releases since DevStack will download & install all the
 additional dependencies. The netinstall ISO is available for
-`Fedora <http://mirrors.kernel.org/fedora/releases/18/Fedora/x86_64/iso/Fedora-20-x86_64-netinst.iso>`__
+`Fedora <http://mirrors.kernel.org/fedora/releases/>`__
 and
-`CentOS/RHEL <http://mirrors.kernel.org/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-netinstall.iso>`__.
+`CentOS/RHEL <http://mirrors.kernel.org/centos/>`__.
 
 Install a couple of packages to bootstrap configuration:
 
@@ -284,7 +284,7 @@
 
 DevStack will automatically use an existing LVM volume group named
 ``stack-volumes`` to store cloud-created volumes. If ``stack-volumes``
-doesn't exist, DevStack will set up a 5Gb loop-mounted file to contain
+doesn't exist, DevStack will set up a 10Gb loop-mounted file to contain
 it. This obviously limits the number and size of volumes that can be
 created inside OpenStack. The size can be overridden by setting
 ``VOLUME_BACKING_FILE_SIZE`` in ``local.conf``.
diff --git a/doc/source/guides/single-machine.rst b/doc/source/guides/single-machine.rst
index 6059511..a7a1099 100644
--- a/doc/source/guides/single-machine.rst
+++ b/doc/source/guides/single-machine.rst
@@ -1,6 +1,6 @@
-==========
-All-In-One
-==========
+=========================
+All-In-One Single Machine
+=========================
 
 Things are about to get real! Using OpenStack in containers or VMs is
 nice for kicking the tires, but doesn't compare to the feeling you get
@@ -17,9 +17,9 @@
 CD <https://help.ubuntu.com/community/Installation/MinimalCD>`__ for
 Ubuntu releases since DevStack will download & install all the
 additional dependencies. The netinstall ISO is available for
-`Fedora <http://mirrors.kernel.org/fedora/releases/18/Fedora/x86_64/iso/Fedora-20-x86_64-netinst.iso>`__
+`Fedora <http://mirrors.kernel.org/fedora/releases/>`__
 and
-`CentOS/RHEL <http://mirrors.kernel.org/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-netinstall.iso>`__.
+`CentOS/RHEL <http://mirrors.kernel.org/centos/>`__.
 You may be tempted to use a desktop distro on a laptop, it will probably
 work but you may need to tell Network Manager to keep its fingers off
 the interface(s) that OpenStack uses for bridging.
diff --git a/doc/source/guides/single-vm.rst b/doc/source/guides/single-vm.rst
index d296db6..ef59953 100644
--- a/doc/source/guides/single-vm.rst
+++ b/doc/source/guides/single-vm.rst
@@ -1,6 +1,6 @@
-=============
-Cloud in a VM
-=============
+====================
+All-In-One Single VM
+====================
 
 Use the cloud to build the cloud! Use your cloud to launch new versions
 of OpenStack in about 5 minutes. When you break it, start over! The VMs
diff --git a/doc/source/index.rst b/doc/source/index.rst
index 2128620..dbefdec 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -12,11 +12,8 @@
    changes
    contributing
 
-   guides/*
-
-
-Quick Start This ain't your first rodeo
----------------------------------------
+Quick Start
+-----------
 
 #. Select a Linux Distribution
 
@@ -59,40 +56,36 @@
 
 Walk through various setups used by stackers
 
-OpenStack on VMs
-----------------
+.. toctree::
+   :glob:
+   :maxdepth: 1
 
-These guides tell you how to virtualize your OpenStack cloud in virtual
-machines. This means that you can get started without having to purchase
-any hardware.
+   guides/single-vm
+   guides/single-machine
+   guides/multinode-lab
 
-Virtual Machine
-~~~~~~~~~~~~~~~
+All-In-One Single VM
+--------------------
 
-:doc:`Run OpenStack in a VM <guides/single-vm>`. The VMs launched in your cloud will be slow as
+Run :doc:`OpenStack in a VM <guides/single-vm>`. The VMs launched in your cloud will be slow as
 they are running in QEMU (emulation), but it is useful if you don't have
 spare hardware laying around. :doc:`[Read] <guides/single-vm>`
 
-OpenStack on Hardware
----------------------
+All-In-One Single Machine
+-------------------------
 
-These guides tell you how to deploy a development environment on real
-hardware. Guides range from running OpenStack on a single laptop to
-running a multi-node deployment on datacenter hardware.
+Run :doc:`OpenStack on dedicated hardware <guides/single-machine>`  This can include a
+server-class machine or a laptop at home.
+:doc:`[Read] <guides/single-machine>`
 
-All-In-One
-~~~~~~~~~~
+Multi-Node Lab
+--------------
 
-:doc:`Run OpenStack on dedicated hardware <guides/single-machine>` to get real performance in your VMs.
-This can include a server-class machine or a laptop at home. :doc:`[Read] <guides/single-machine>`
+Setup a :doc:`multi-node cluster <guides/multinode-lab>` with dedicated VLANs for VMs & Management.
+:doc:`[Read] <guides/multinode-lab>`
 
-Multi-Node + VLANs
-~~~~~~~~~~~~~~~~~~
-
-:doc:`Setup a multi-node cluster <guides/multinode-lab>` with dedicated VLANs for VMs & Management. :doc:`[Read] <guides/multinode-lab>`
-
-Documentation
-=============
+DevStack Documentation
+======================
 
 Overview
 --------
@@ -127,187 +120,102 @@
 Code
 ====
 
-A look at the bits that make it all go
+*A look at the bits that make it all go*
 
 Scripts
 -------
 
-Generated documentation of DevStack scripts.
+* `stack.sh <stack.sh.html>`__ - The main script
+* `functions <functions.html>`__ - DevStack-specific functions
+* `functions-common <functions-common.html>`__ - Functions shared with other projects
+* `lib/apache <lib/apache.html>`__
+* `lib/baremetal <lib/baremetal.html>`__
+* `lib/ceilometer <lib/ceilometer.html>`__
+* `lib/ceph <lib/ceph.html>`__
+* `lib/cinder <lib/cinder.html>`__
+* `lib/config <lib/config.html>`__
+* `lib/database <lib/database.html>`__
+* `lib/dib <lib/dib.html>`__
+* `lib/dstat <lib/dstat.html>`__
+* `lib/glance <lib/glance.html>`__
+* `lib/heat <lib/heat.html>`__
+* `lib/horizon <lib/horizon.html>`__
+* `lib/infra <lib/infra.html>`__
+* `lib/ironic <lib/ironic.html>`__
+* `lib/keystone <lib/keystone.html>`__
+* `lib/ldap <lib/ldap.html>`__
+* `lib/neutron <lib/neutron.html>`__
+* `lib/nova <lib/nova.html>`__
+* `lib/opendaylight <lib/opendaylight.html>`__
+* `lib/oslo <lib/oslo.html>`__
+* `lib/rpc\_backend <lib/rpc_backend.html>`__
+* `lib/sahara <lib/sahara.html>`__
+* `lib/stackforge <lib/stackforge.html>`__
+* `lib/swift <lib/swift.html>`__
+* `lib/tempest <lib/tempest.html>`__
+* `lib/tls <lib/tls.html>`__
+* `lib/trove <lib/trove.html>`__
+* `lib/zaqar <lib/zaqar.html>`__
+* `unstack.sh <unstack.sh.html>`__
+* `clean.sh <clean.sh.html>`__
+* `run\_tests.sh <run_tests.sh.html>`__
 
-+-------------------------------+----------------------------------------------+
-| Filename                      | Link                                         |
-+===============================+==============================================+
-| stack.sh                      | `Read » <stack.sh.html>`__                   |
-+-------------------------------+----------------------------------------------+
-| functions                     | `Read » <functions.html>`__                  |
-+-------------------------------+----------------------------------------------+
-| functions-common              | `Read » <functions-common.html>`__           |
-+-------------------------------+----------------------------------------------+
-| lib/apache                    | `Read » <lib/apache.html>`__                 |
-+-------------------------------+----------------------------------------------+
-| lib/baremetal                 | `Read » <lib/baremetal.html>`__              |
-+-------------------------------+----------------------------------------------+
-| lib/ceilometer                | `Read » <lib/ceilometer.html>`__             |
-+-------------------------------+----------------------------------------------+
-| lib/cinder                    | `Read » <lib/cinder.html>`__                 |
-+-------------------------------+----------------------------------------------+
-| lib/config                    | `Read » <lib/config.html>`__                 |
-+-------------------------------+----------------------------------------------+
-| lib/database                  | `Read » <lib/database.html>`__               |
-+-------------------------------+----------------------------------------------+
-| lib/glance                    | `Read » <lib/glance.html>`__                 |
-+-------------------------------+----------------------------------------------+
-| lib/heat                      | `Read » <lib/heat.html>`__                   |
-+-------------------------------+----------------------------------------------+
-| lib/horizon                   | `Read » <lib/horizon.html>`__                |
-+-------------------------------+----------------------------------------------+
-| lib/infra                     | `Read » <lib/infra.html>`__                  |
-+-------------------------------+----------------------------------------------+
-| lib/ironic                    | `Read » <lib/ironic.html>`__                 |
-+-------------------------------+----------------------------------------------+
-| lib/keystone                  | `Read » <lib/keystone.html>`__               |
-+-------------------------------+----------------------------------------------+
-| lib/ldap                      | `Read » <lib/ldap.html>`__                   |
-+-------------------------------+----------------------------------------------+
-| lib/zaqar                     | `Read » <lib/zaqar.html>`__                  |
-+-------------------------------+----------------------------------------------+
-| lib/neutron                   | `Read » <lib/neutron.html>`__                |
-+-------------------------------+----------------------------------------------+
-| lib/nova                      | `Read » <lib/nova.html>`__                   |
-+-------------------------------+----------------------------------------------+
-| lib/oslo                      | `Read » <lib/oslo.html>`__                   |
-+-------------------------------+----------------------------------------------+
-| lib/rpc\_backend              | `Read » <lib/rpc_backend.html>`__            |
-+-------------------------------+----------------------------------------------+
-| lib/sahara                    | `Read » <lib/sahara.html>`__                 |
-+-------------------------------+----------------------------------------------+
-| lib/savanna                   | `Read » <lib/savanna.html>`__                |
-+-------------------------------+----------------------------------------------+
-| lib/stackforge                | `Read » <lib/stackforge.html>`__             |
-+-------------------------------+----------------------------------------------+
-| lib/swift                     | `Read » <lib/swift.html>`__                  |
-+-------------------------------+----------------------------------------------+
-| lib/tempest                   | `Read » <lib/tempest.html>`__                |
-+-------------------------------+----------------------------------------------+
-| lib/tls                       | `Read » <lib/tls.html>`__                    |
-+-------------------------------+----------------------------------------------+
-| lib/trove                     | `Read » <lib/trove.html>`__                  |
-+-------------------------------+----------------------------------------------+
-| unstack.sh                    | `Read » <unstack.sh.html>`__                 |
-+-------------------------------+----------------------------------------------+
-| clean.sh                      | `Read » <clean.sh.html>`__                   |
-+-------------------------------+----------------------------------------------+
-| run\_tests.sh                 | `Read » <run_tests.sh.html>`__               |
-+-------------------------------+----------------------------------------------+
-| extras.d/50-ironic.sh         | `Read » <extras.d/50-ironic.html>`__         |
-+-------------------------------+----------------------------------------------+
-| extras.d/70-zaqar.sh          | `Read » <extras.d/70-zaqar.html>`__          |
-+-------------------------------+----------------------------------------------+
-| extras.d/70-sahara.sh         | `Read » <extras.d/70-sahara.html>`__         |
-+-------------------------------+----------------------------------------------+
-| extras.d/70-savanna.sh        | `Read » <extras.d/70-savanna.html>`__        |
-+-------------------------------+----------------------------------------------+
-| extras.d/70-trove.sh          | `Read » <extras.d/70-trove.html>`__          |
-+-------------------------------+----------------------------------------------+
-| extras.d/80-opendaylight.sh   | `Read » <extras.d/80-opendaylight.html>`__   |
-+-------------------------------+----------------------------------------------+
-| extras.d/80-tempest.sh        | `Read » <extras.d/80-tempest.html>`__        |
-+-------------------------------+----------------------------------------------+
+* `extras.d/40-dib.sh <extras.d/40-dib.sh.html>`__
+* `extras.d/50-ironic.sh <extras.d/50-ironic.sh.html>`__
+* `extras.d/60-ceph.sh <extras.d/60-ceph.sh.html>`__
+* `extras.d/70-sahara.sh <extras.d/70-sahara.sh.html>`__
+* `extras.d/70-trove.sh <extras.d/70-trove.sh.html>`__
+* `extras.d/70-zaqar.sh <extras.d/70-zaqar.sh.html>`__
+* `extras.d/80-opendaylight.sh <extras.d/80-opendaylight.sh.html>`__
+* `extras.d/80-tempest.sh <extras.d/80-tempest.sh.html>`__
 
 Configuration
 -------------
 
-+--------------+--------------------------------+
-| Filename     | Link                           |
-+==============+================================+
-| local.conf   | `Read » <local.conf.html>`__   |
-+--------------+--------------------------------+
-| stackrc      | `Read » <stackrc.html>`__      |
-+--------------+--------------------------------+
-| openrc       | `Read » <openrc.html>`__       |
-+--------------+--------------------------------+
-| exerciserc   | `Read » <exerciserc.html>`__   |
-+--------------+--------------------------------+
-| eucarc       | `Read » <eucarc.html>`__       |
-+--------------+--------------------------------+
-
-Tools
------
-
-+-----------------------------+----------------------------------------------+
-| Filename                    | Link                                         |
-+=============================+==============================================+
-| tools/info.sh               | `Read » <tools/info.sh.html>`__              |
-+-----------------------------+----------------------------------------------+
-| tools/build\_docs.sh        | `Read » <tools/build_docs.sh.html>`__        |
-+-----------------------------+----------------------------------------------+
-| tools/create\_userrc.sh     | `Read » <tools/create_userrc.sh.html>`__     |
-+-----------------------------+----------------------------------------------+
-| tools/fixup\_stuff.sh       | `Read » <tools/fixup_stuff.sh.html>`__       |
-+-----------------------------+----------------------------------------------+
-| tools/install\_prereqs.sh   | `Read » <tools/install_prereqs.sh.html>`__   |
-+-----------------------------+----------------------------------------------+
-| tools/install\_pip.sh       | `Read » <tools/install_pip.sh.html>`__       |
-+-----------------------------+----------------------------------------------+
-| tools/upload\_image.sh      | `Read » <tools/upload_image.sh.html>`__      |
-+-----------------------------+----------------------------------------------+
-
-Samples
--------
-
-Generated documentation of DevStack sample files.
-
-+------------+--------------------------------------+
-| Filename   | Link                                 |
-+============+======================================+
-| local.sh   | `Read » <samples/local.sh.html>`__   |
-+------------+--------------------------------------+
-| localrc    | `Read » <samples/localrc.html>`__    |
-+------------+--------------------------------------+
-
-Exercises
----------
-
-+---------------------------------+-------------------------------------------------+
-| Filename                        | Link                                            |
-+=================================+=================================================+
-| exercise.sh                     | `Read » <exercise.sh.html>`__                   |
-+---------------------------------+-------------------------------------------------+
-| exercises/aggregates.sh         | `Read » <exercises/aggregates.sh.html>`__       |
-+---------------------------------+-------------------------------------------------+
-| exercises/boot\_from\_volume.sh | `Read » <exercises/boot_from_volume.sh.html>`__ |
-+---------------------------------+-------------------------------------------------+
-| exercises/bundle.sh             | `Read » <exercises/bundle.sh.html>`__           |
-+---------------------------------+-------------------------------------------------+
-| exercises/client-args.sh        | `Read » <exercises/client-args.sh.html>`__      |
-+---------------------------------+-------------------------------------------------+
-| exercises/client-env.sh         | `Read » <exercises/client-env.sh.html>`__       |
-+---------------------------------+-------------------------------------------------+
-| exercises/euca.sh               | `Read » <exercises/euca.sh.html>`__             |
-+---------------------------------+-------------------------------------------------+
-| exercises/floating\_ips.sh      | `Read » <exercises/floating_ips.sh.html>`__     |
-+---------------------------------+-------------------------------------------------+
-| exercises/horizon.sh            | `Read » <exercises/horizon.sh.html>`__          |
-+---------------------------------+-------------------------------------------------+
-| exercises/neutron-adv-test.sh   | `Read » <exercises/neutron-adv-test.sh.html>`__ |
-+---------------------------------+-------------------------------------------------+
-| exercises/sahara.sh             | `Read » <exercises/sahara.sh.html>`__           |
-+---------------------------------+-------------------------------------------------+
-| exercises/savanna.sh            | `Read » <exercises/savanna.sh.html>`__          |
-+---------------------------------+-------------------------------------------------+
-| exercises/sec\_groups.sh        | `Read » <exercises/sec_groups.sh.html>`__       |
-+---------------------------------+-------------------------------------------------+
-| exercises/swift.sh              | `Read » <exercises/swift.sh.html>`__            |
-+---------------------------------+-------------------------------------------------+
-| exercises/trove.sh              | `Read » <exercises/trove.sh.html>`__            |
-+---------------------------------+-------------------------------------------------+
-| exercises/volumes.sh            | `Read » <exercises/volumes.sh.html>`__          |
-+---------------------------------+-------------------------------------------------+
-| exercises/zaqar.sh              | `Read » <exercises/zaqar.sh.html>`__            |
-+---------------------------------+-------------------------------------------------+
-
 .. toctree::
    :glob:
    :maxdepth: 1
 
-   *
+   local.conf
+   stackrc
+   openrc
+   exerciserc
+   eucarc
+
+Tools
+-----
+
+* `tools/build\_docs.sh <tools/build_docs.sh.html>`__
+* `tools/create-stack-user.sh <tools/create-stack-user.sh.html>`__
+* `tools/create\_userrc.sh <tools/create_userrc.sh.html>`__
+* `tools/fixup\_stuff.sh <tools/fixup_stuff.sh.html>`__
+* `tools/info.sh <tools/info.sh.html>`__
+* `tools/install\_pip.sh <tools/install_pip.sh.html>`__
+* `tools/install\_prereqs.sh <tools/install_prereqs.sh.html>`__
+* `tools/make\_cert.sh <tools/make_cert.sh.html>`__
+* `tools/upload\_image.sh <tools/upload_image.sh.html>`__
+
+Samples
+-------
+
+* `local.sh <samples/local.sh.html>`__
+
+Exercises
+---------
+
+* `exercise.sh <exercise.sh.html>`__
+* `exercises/aggregates.sh <exercises/aggregates.sh.html>`__
+* `exercises/boot\_from\_volume.sh <exercises/boot_from_volume.sh.html>`__
+* `exercises/bundle.sh <exercises/bundle.sh.html>`__
+* `exercises/client-args.sh <exercises/client-args.sh.html>`__
+* `exercises/client-env.sh <exercises/client-env.sh.html>`__
+* `exercises/euca.sh <exercises/euca.sh.html>`__
+* `exercises/floating\_ips.sh <exercises/floating_ips.sh.html>`__
+* `exercises/horizon.sh <exercises/horizon.sh.html>`__
+* `exercises/neutron-adv-test.sh <exercises/neutron-adv-test.sh.html>`__
+* `exercises/sahara.sh <exercises/sahara.sh.html>`__
+* `exercises/sec\_groups.sh <exercises/sec_groups.sh.html>`__
+* `exercises/swift.sh <exercises/swift.sh.html>`__
+* `exercises/trove.sh <exercises/trove.sh.html>`__
+* `exercises/volumes.sh <exercises/volumes.sh.html>`__
+* `exercises/zaqar.sh <exercises/zaqar.sh.html>`__
diff --git a/doc/source/local.conf.rst b/doc/source/local.conf.rst
index a9dfcb0..b2f7557 100644
--- a/doc/source/local.conf.rst
+++ b/doc/source/local.conf.rst
@@ -4,6 +4,6 @@
 
 ``local.conf`` is a user-maintained setings file that is sourced in
 ``stackrc``. It contains a section that replaces the historical
-``localrc`` file. See `the description of
-local.conf <configuration.html>`__ for more details about the mechanics
+``localrc`` file. See the description of
+:doc:`local.conf <configuration>` for more details about the mechanics
 of the file.
diff --git a/doc/source/localrc.rst b/doc/source/localrc.rst
deleted file mode 100644
index 98f3083..0000000
--- a/doc/source/localrc.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-=====================
-localrc - The Old Way
-=====================
-
-``localrc`` is the old file used to configure DevStack. It is deprecated
-and has been replaced by ```local.conf`` <local.conf.html>`__. DevStack
-will continue to use ``localrc`` if it is present and ignore the
-``localrc`` section in ``local.conf.``. Remove ``localrc`` to switch to
-using the new file.
diff --git a/doc/source/openrc.rst b/doc/source/openrc.rst
index dc12f76..56ff5c2 100644
--- a/doc/source/openrc.rst
+++ b/doc/source/openrc.rst
@@ -8,29 +8,30 @@
 ``local.conf``) in order to pick up ``HOST_IP`` and/or ``SERVICE_HOST``
 to use in the endpoints. The values shown below are the default values.
 
-OS\_TENANT\_NAME
-    The introduction of Keystone to the OpenStack ecosystem has
-    standardized the term *tenant* as the entity that owns resources. In
-    some places references still exist to the original Nova term
-    *project* for this use. Also, *tenant\_name* is preferred to
-    *tenant\_id*.
+OS\_PROJECT\_NAME (OS\_TENANT\_NAME)
+    Keystone has
+    standardized the term *project* as the entity that owns resources. In
+    some places references still exist to the previous term
+    *tenant* for this use. Also, *project\_name* is preferred to
+    *project\_id*.  OS\_TENANT\_NAME remains supported for compatibility
+    with older tools.
 
     ::
 
-        OS_TENANT_NAME=demo
+        OS_PROJECT_NAME=demo
 
 OS\_USERNAME
-    In addition to the owning entity (tenant), Nova stores the entity
-    performing the action as the *user*.
+    In addition to the owning entity (project), OpenStack calls the entity
+    performing the action *user*.
 
     ::
 
         OS_USERNAME=demo
 
 OS\_PASSWORD
-    With Keystone you pass the keystone password instead of an api key.
-    Recent versions of novaclient use OS\_PASSWORD instead of
-    NOVA\_API\_KEYs or NOVA\_PASSWORD.
+    Keystone's default authentication requires a password be provided.
+    The usual cautions about putting passwords in environment variables
+    apply, for most DevStack uses this may be an acceptable tradeoff.
 
     ::
 
@@ -39,7 +40,7 @@
 HOST\_IP, SERVICE\_HOST
     Set API endpoint host using ``HOST_IP``. ``SERVICE_HOST`` may also
     be used to specify the endpoint, which is convenient for some
-    ``localrc`` configurations. Typically, ``HOST_IP`` is set in the
+    ``local.conf`` configurations. Typically, ``HOST_IP`` is set in the
     ``localrc`` section.
 
     ::
@@ -57,15 +58,6 @@
 
         OS_AUTH_URL=http://$SERVICE_HOST:5000/v2.0
 
-GLANCE\_HOST
-    Some exercises call Glance directly. On a single-node installation,
-    Glance should be listening on ``HOST_IP``. If its running elsewhere
-    it can be set here.
-
-    ::
-
-        GLANCE_HOST=$HOST_IP
-
 KEYSTONECLIENT\_DEBUG, NOVACLIENT\_DEBUG
     Set command-line client log level to ``DEBUG``. These are commented
     out by default.
diff --git a/doc/source/overview.rst b/doc/source/overview.rst
index e3cf75d..4078240 100644
--- a/doc/source/overview.rst
+++ b/doc/source/overview.rst
@@ -73,7 +73,7 @@
 (Heat)
 
 Additional services not included directly in DevStack can be tied in to
-``stack.sh`` using the `plugin mechanism <plugins.html>`__ to call
+``stack.sh`` using the :doc:`plugin mechanism <plugins>` to call
 scripts that perform the configuration and startup of the service.
 
 Node Configurations
diff --git a/doc/source/plugins.rst b/doc/source/plugins.rst
index 282c1a4..b4136c4 100644
--- a/doc/source/plugins.rst
+++ b/doc/source/plugins.rst
@@ -8,8 +8,8 @@
 Extras.d Hooks
 ~~~~~~~~~~~~~~
 
-These relatively new hooks are an extension of the existing calls from
-``stack.sh`` at the end of its run, plus ``unstack.sh`` and
+These hooks are an extension of the service calls in
+``stack.sh`` at specific points in its run, plus ``unstack.sh`` and
 ``clean.sh``. A number of the higher-layer projects are implemented in
 DevStack using this mechanism.
 
diff --git a/doc/source/stackrc.rst b/doc/source/stackrc.rst
index 0faab45..b21f74f 100644
--- a/doc/source/stackrc.rst
+++ b/doc/source/stackrc.rst
@@ -15,12 +15,12 @@
     Specify which services to launch. These generally correspond to
     screen tabs. The default includes: Glance (API and Registry),
     Keystone, Nova (API, Certificate, Object Store, Compute, Network,
-    Scheduler, VNC proxies, Certificate Authentication), Cinder
+    Scheduler, Certificate Authentication), Cinder
     (Scheduler, API, Volume), Horizon, MySQL, RabbitMQ, Tempest.
 
     ::
 
-        ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-net,n-cond,cinder,c-sch,c-api,c-vol,n-sch,n-novnc,n-xvnc,n-cauth,horizon,rabbit,tempest,$DATABASE_TYPE
+        ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-net,n-cond,c-sch,c-api,c-vol,n-sch,n-cauth,horizon,rabbit,tempest,$DATABASE_TYPE
 
     Other services that are not enabled by default can be enabled in
     ``localrc``. For example, to add Swift, use the following service
diff --git a/files/apts/ironic b/files/apts/ironic
index 45fdecc..f6c7b74 100644
--- a/files/apts/ironic
+++ b/files/apts/ironic
@@ -12,6 +12,7 @@
 qemu
 qemu-kvm
 qemu-utils
+sgabios
 syslinux
 tftpd-hpa
 xinetd
diff --git a/files/rpms/cinder b/files/rpms/cinder
index ce6181e..eedff18 100644
--- a/files/rpms/cinder
+++ b/files/rpms/cinder
@@ -3,4 +3,4 @@
 qemu-img
 postgresql-devel
 iscsi-initiator-utils
-python-lxml         #dist:f19,f20,rhel7
+python-lxml         #dist:f19,f20,f21,rhel7
diff --git a/files/rpms/glance b/files/rpms/glance
index 5a7f073..d2792cf 100644
--- a/files/rpms/glance
+++ b/files/rpms/glance
@@ -6,10 +6,10 @@
 python-argparse
 python-eventlet
 python-greenlet
-python-lxml         #dist:f19,f20,rhel7
-python-paste-deploy #dist:f19,f20,rhel7
+python-lxml         #dist:f19,f20,f21,rhel7
+python-paste-deploy #dist:f19,f20,f21,rhel7
 python-routes
 python-sqlalchemy
-python-wsgiref      #dist:f18,f19,f20
+python-wsgiref      #dist:f18,f19,f20,f21
 pyxattr
 zlib-devel          # testonly
diff --git a/files/rpms/horizon b/files/rpms/horizon
index 7add23a..1d06ac2 100644
--- a/files/rpms/horizon
+++ b/files/rpms/horizon
@@ -12,8 +12,8 @@
 python-migrate
 python-mox
 python-nose
-python-paste        #dist:f19,f20
-python-paste-deploy #dist:f19,f20
+python-paste        #dist:f19,f20,f21
+python-paste-deploy #dist:f19,f20,f21
 python-routes
 python-sphinx
 python-sqlalchemy
diff --git a/files/rpms/ironic b/files/rpms/ironic
index e646f3a..0a46314 100644
--- a/files/rpms/ironic
+++ b/files/rpms/ironic
@@ -9,6 +9,7 @@
 openssh-clients
 openvswitch
 python-libguestfs
+sgabios
 syslinux
 tftp-server
 xinetd
diff --git a/files/rpms/keystone b/files/rpms/keystone
index ce41ee5..8b0953d 100644
--- a/files/rpms/keystone
+++ b/files/rpms/keystone
@@ -1,10 +1,10 @@
 MySQL-python
 python-greenlet
-libxslt-devel       # dist:f20
-python-lxml         #dist:f19,f20
-python-paste        #dist:f19,f20
-python-paste-deploy #dist:f19,f20
-python-paste-script #dist:f19,f20
+libxslt-devel       # dist:f20,f21
+python-lxml         #dist:f19,f20,f21
+python-paste        #dist:f19,f20,f21
+python-paste-deploy #dist:f19,f20,f21
+python-paste-script #dist:f19,f20,f21
 python-routes
 python-sqlalchemy
 python-webob
diff --git a/files/rpms/neutron b/files/rpms/neutron
index 2c9dd3d..f2473fb 100644
--- a/files/rpms/neutron
+++ b/files/rpms/neutron
@@ -12,8 +12,8 @@
 python-greenlet
 python-iso8601
 #rhel6 gets via pip
-python-paste        # dist:f19,f20,rhel7
-python-paste-deploy # dist:f19,f20,rhel7
+python-paste        # dist:f19,f20,f21,rhel7
+python-paste-deploy # dist:f19,f20,f21,rhel7
 python-qpid # NOPRIME
 python-routes
 python-sqlalchemy
diff --git a/files/rpms/nova b/files/rpms/nova
index f3261c6..07f13c7 100644
--- a/files/rpms/nova
+++ b/files/rpms/nova
@@ -29,11 +29,11 @@
 python-lockfile
 python-migrate
 python-mox
-python-paramiko # dist:f19,f20,rhel7
+python-paramiko # dist:f19,f20,f21,rhel7
 # ^ on RHEL6, brings in python-crypto which conflicts with version from
 # pip we need
-python-paste        # dist:f19,f20,rhel7
-python-paste-deploy # dist:f19,f20,rhel7
+python-paste        # dist:f19,f20,f21,rhel7
+python-paste-deploy # dist:f19,f20,f21,rhel7
 python-qpid # NOPRIME
 python-routes
 python-sqlalchemy
diff --git a/files/rpms/swift b/files/rpms/swift
index 9ec4aab..ccda22b 100644
--- a/files/rpms/swift
+++ b/files/rpms/swift
@@ -6,7 +6,7 @@
 python-greenlet
 python-netifaces
 python-nose
-python-paste-deploy # dist:f19,f20,rhel7
+python-paste-deploy # dist:f19,f20,f21,rhel7
 python-simplejson
 python-webob
 pyxattr
diff --git a/lib/databases/mysql b/lib/databases/mysql
index 67bf85a..7a444a3 100644
--- a/lib/databases/mysql
+++ b/lib/databases/mysql
@@ -26,10 +26,10 @@
         sudo rm -rf /etc/mysql
         return
     elif is_fedora; then
-        if [[ $DISTRO =~ (rhel7) ]]; then
-            MYSQL=mariadb
-        else
+        if [[ $DISTRO =~ (rhel6) ]]; then
             MYSQL=mysqld
+        else
+            MYSQL=mariadb
         fi
     elif is_suse; then
         MYSQL=mysql
@@ -54,10 +54,10 @@
         my_conf=/etc/mysql/my.cnf
         mysql=mysql
     elif is_fedora; then
-        if [[ $DISTRO =~ (rhel7) ]]; then
-            mysql=mariadb
-        else
+        if [[ $DISTRO =~ (rhel6) ]]; then
             mysql=mysqld
+        else
+            mysql=mariadb
         fi
         my_conf=/etc/my.cnf
     elif is_suse; then
@@ -142,10 +142,10 @@
     fi
     # Install mysql-server
     if is_ubuntu || is_fedora; then
-        if [[ $DISTRO =~ (rhel7) ]]; then
-            install_package mariadb-server
-        else
+        if [[ $DISTRO =~ (rhel6) ]]; then
             install_package mysql-server
+        else
+            install_package mariadb-server
         fi
     elif is_suse; then
         if ! is_package_installed mariadb; then
diff --git a/lib/dstat b/lib/dstat
index a2c522c..a6990bb 100644
--- a/lib/dstat
+++ b/lib/dstat
@@ -1,4 +1,4 @@
-# lib/apache
+# lib/dstat
 # Functions to start and stop dstat
 
 # Dependencies:
diff --git a/lib/horizon b/lib/horizon
index 0213948..872e77a 100644
--- a/lib/horizon
+++ b/lib/horizon
@@ -25,8 +25,9 @@
 # --------
 
 # Set up default directories
+GITDIR["django_openstack_auth"]=$DEST/django_openstack_auth
+
 HORIZON_DIR=$DEST/horizon
-HORIZONAUTH_DIR=$DEST/django_openstack_auth
 
 # local_settings.py is used to customize Dashboard settings.
 # The example file in Horizon repo is used by default.
@@ -89,9 +90,7 @@
     # Horizon is installed as develop mode, so we can compile here.
     # Message catalog compilation is handled by Django admin script,
     # so compiling them after the installation avoids Django installation twice.
-    cd $HORIZON_DIR
-    ./run_tests.sh -N --compilemessages
-    cd -
+    (cd $HORIZON_DIR; ./run_tests.sh -N --compilemessages)
 }
 
 # init_horizon() - Initialize databases, etc.
@@ -100,6 +99,8 @@
     local local_settings=$HORIZON_DIR/openstack_dashboard/local/local_settings.py
     cp $HORIZON_SETTINGS $local_settings
 
+    _horizon_config_set $local_settings "" COMPRESS_OFFLINE True
+
     _horizon_config_set $local_settings "" OPENSTACK_HOST \"${KEYSTONE_SERVICE_HOST}\"
     _horizon_config_set $local_settings "" OPENSTACK_KEYSTONE_URL "\"${KEYSTONE_SERVICE_PROTOCOL}://${KEYSTONE_SERVICE_HOST}:${KEYSTONE_SERVICE_PORT}/v2.0\""
     if [[ -n "$KEYSTONE_TOKEN_HASH_ALGORITHM" ]]; then
@@ -141,19 +142,23 @@
     # and run_process
     sudo rm -f /var/log/$APACHE_NAME/horizon_*
 
+    DJANGO_SETTINGS_MODULE=openstack_dashboard.settings django-admin.py collectstatic --noinput
+    DJANGO_SETTINGS_MODULE=openstack_dashboard.settings django-admin.py compress --force
+
 }
 
 # install_django_openstack_auth() - Collect source and prepare
 function install_django_openstack_auth {
-    git_clone $HORIZONAUTH_REPO $HORIZONAUTH_DIR $HORIZONAUTH_BRANCH
-
-    # Compile message catalogs before installation
-    _prepare_message_catalog_compilation
-    cd $HORIZONAUTH_DIR
-    python setup.py compile_catalog
-    cd -
-
-    setup_install $HORIZONAUTH_DIR
+    if use_library_from_git "django_openstack_auth"; then
+        local dir=${GITDIR["django_openstack_auth"]}
+        git_clone_by_name "django_openstack_auth"
+        # Compile message catalogs before installation
+        _prepare_message_catalog_compilation
+        (cd $dir; python setup.py compile_catalog)
+        setup_dev_lib "django_openstack_auth"
+    fi
+    # if we aren't using this library from git, then we just let it
+    # get dragged in by the horizon setup.
 }
 
 # install_horizon() - Collect source and prepare
diff --git a/lib/ironic b/lib/ironic
index a0a93d5..a56ab7a 100644
--- a/lib/ironic
+++ b/lib/ironic
@@ -165,6 +165,14 @@
     if [[ "$IRONIC_IPXE_ENABLED" == "True" ]] ; then
         install_apache_wsgi
     fi
+
+    if [[ "$IRONIC_VM_LOG_CONSOLE" == "True" ]] && is_ubuntu; then
+        # Ubuntu packaging+apparmor issue prevents libvirt from loading
+        # the ROM from /usr/share/misc.  Workaround by installing it directly
+        # to a directory that it can read from. (LP: #1393548)
+        sudo rm -rf /usr/share/qemu/sgabios.bin
+        sudo cp /usr/share/misc/sgabios.bin /usr/share/qemu/sgabios.bin
+    fi
 }
 
 # install_ironicclient() - Collect sources and prepare
diff --git a/lib/keystone b/lib/keystone
index e2c823a..72a79be 100644
--- a/lib/keystone
+++ b/lib/keystone
@@ -34,6 +34,7 @@
 
 # Set up default directories
 GITDIR["python-keystoneclient"]=$DEST/python-keystoneclient
+GITDIR["keystonemiddleware"]=$DEST/keystonemiddleware
 
 KEYSTONE_DIR=$DEST/keystone
 KEYSTONE_CONF_DIR=${KEYSTONE_CONF_DIR:-/etc/keystone}
@@ -46,8 +47,6 @@
     KEYSTONE_WSGI_DIR=${KEYSTONE_WSGI_DIR:-/var/www/keystone}
 fi
 
-KEYSTONEMIDDLEWARE_DIR=$DEST/keystonemiddleware
-
 # Set up additional extensions, such as oauth1, federation
 # Example of KEYSTONE_EXTENSIONS=oauth1,federation
 KEYSTONE_EXTENSIONS=${KEYSTONE_EXTENSIONS:-}
@@ -489,8 +488,10 @@
 
 # install_keystonemiddleware() - Collect source and prepare
 function install_keystonemiddleware {
-    git_clone $KEYSTONEMIDDLEWARE_REPO $KEYSTONEMIDDLEWARE_DIR $KEYSTONEMIDDLEWARE_BRANCH
-    setup_install $KEYSTONEMIDDLEWARE_DIR
+    if use_library_from_git "keystonemiddleware"; then
+        git_clone_by_name "keystonemiddleware"
+        setup_dev_lib "keystonemiddleware"
+    fi
 }
 
 # install_keystone() - Collect source and prepare
diff --git a/lib/tempest b/lib/tempest
index 9e025a1..7ef8a30 100644
--- a/lib/tempest
+++ b/lib/tempest
@@ -303,6 +303,7 @@
     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:-"all"}
+    iniset $TEMPEST_CONFIG compute-feature-enabled xml_api_v2 ${TEMPEST_ENABLE_NOVA_XML_API:-True}
     iniset $TEMPEST_CONFIG compute-feature-disabled api_extensions ${DISABLE_COMPUTE_API_EXTENSIONS}
 
     # Compute admin
diff --git a/stack.sh b/stack.sh
index 54444ad..7635f32 100755
--- a/stack.sh
+++ b/stack.sh
@@ -143,7 +143,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} =~ (precise|trusty|7.0|wheezy|sid|testing|jessie|f19|f20|rhel6|rhel7) ]]; then
+if [[ ! ${DISTRO} =~ (precise|trusty|7.0|wheezy|sid|testing|jessie|f19|f20|f21|rhel6|rhel7) ]]; 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"
diff --git a/stackrc b/stackrc
index 75f606f..18e1de3 100644
--- a/stackrc
+++ b/stackrc
@@ -219,7 +219,7 @@
 
 # volume client
 GITREPO["python-cinderclient"]=${CINDERCLIENT_REPO:-${GIT_BASE}/openstack/python-cinderclient.git}
-GITBRACH["python-cinderclient"]=${CINDERCLIENT_BRANCH:-master}
+GITBRANCH["python-cinderclient"]=${CINDERCLIENT_BRANCH:-master}
 
 # python glance client library
 GITREPO["python-glanceclient"]=${GLANCECLIENT_REPO:-${GIT_BASE}/openstack/python-glanceclient.git}
@@ -350,12 +350,12 @@
 HEAT_TEMPLATES_BRANCH=${HEAT_TEMPLATES_BRANCH:-master}
 
 # django openstack_auth library
-HORIZONAUTH_REPO=${HORIZONAUTH_REPO:-${GIT_BASE}/openstack/django_openstack_auth.git}
-HORIZONAUTH_BRANCH=${HORIZONAUTH_BRANCH:-master}
+GITREPO["django_openstack_auth"]=${HORIZONAUTH_REPO:-${GIT_BASE}/openstack/django_openstack_auth.git}
+GITBRANCH["django_openstack_auth"]=${HORIZONAUTH_BRANCH:-master}
 
 # keystone middleware
-KEYSTONEMIDDLEWARE_REPO=${KEYSTONEMIDDLEWARE_REPO:-${GIT_BASE}/openstack/keystonemiddleware.git}
-KEYSTONEMIDDLEWARE_BRANCH=${KEYSTONEMIDDLEWARE_BRANCH:-master}
+GITREPO["keystonemiddleware"]=${KEYSTONEMIDDLEWARE_REPO:-${GIT_BASE}/openstack/keystonemiddleware.git}
+GITBRANCH["keystonemiddleware"]=${KEYSTONEMIDDLEWARE_BRANCH:-master}
 
 # s3 support for swift
 SWIFT3_REPO=${SWIFT3_REPO:-${GIT_BASE}/stackforge/swift3.git}
diff --git a/tools/fixup_stuff.sh b/tools/fixup_stuff.sh
index b8beb01..ca46533 100755
--- a/tools/fixup_stuff.sh
+++ b/tools/fixup_stuff.sh
@@ -18,7 +18,6 @@
 #   - (re)start messagebus daemon
 #   - remove distro packages python-crypto and python-lxml
 #   - pre-install hgtools to work around a bug in RHEL6 distribute
-#   - install nose 1.1 from EPEL
 
 # If TOP_DIR is set we're being sourced rather than running stand-alone
 # or in a sub-shell
@@ -179,14 +178,6 @@
     # Note we do this before the track-depends in ``stack.sh``.
     pip_install hgtools
 
-
-    # RHEL6's version of ``python-nose`` is incompatible with Tempest.
-    # Install nose 1.1 (Tempest-compatible) from EPEL
-    install_package python-nose1.1
-    # Add a symlink for the new nosetests to allow tox for Tempest to
-    # work unmolested.
-    sudo ln -sf /usr/bin/nosetests1.1 /usr/local/bin/nosetests
-
     # workaround for https://code.google.com/p/unittest-ext/issues/detail?id=79
     install_package python-unittest2 patch
     pip_install discover
diff --git a/tools/ironic/scripts/configure-vm b/tools/ironic/scripts/configure-vm
index 4c42c49..378fcb8 100755
--- a/tools/ironic/scripts/configure-vm
+++ b/tools/ironic/scripts/configure-vm
@@ -78,8 +78,10 @@
             params['emulator'] = "/usr/bin/qemu-kvm"
 
     if args.console_log:
+        params['bios_serial'] = "<bios useserial='yes'/>"
         params['console_log'] = CONSOLE_LOG % {'console_log': args.console_log}
     else:
+        params['bios_serial'] = ''
         params['console_log'] = ''
     libvirt_template = source_template % params
     conn = libvirt.open("qemu:///system")
diff --git a/tools/ironic/templates/vm.xml b/tools/ironic/templates/vm.xml
index 4f40334..ae7d685 100644
--- a/tools/ironic/templates/vm.xml
+++ b/tools/ironic/templates/vm.xml
@@ -6,6 +6,7 @@
     <type arch='%(arch)s' machine='pc-1.0'>hvm</type>
     <boot dev='%(bootdev)s'/>
     <bootmenu enable='no'/>
+    %(bios_serial)s
   </os>
   <features>
     <acpi/>