Merge "Enable Swift's newer feature of container-sync"
diff --git a/.gitignore b/.gitignore
index b0a65f5..67ab722 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,8 +8,8 @@
 .tox
 .stackenv
 accrc
-docs/files
-docs/html
+doc/files
+doc/build
 files/*.gz
 files/*.qcow2
 files/images
diff --git a/HACKING.rst b/HACKING.rst
index d69bb49..3ffe1e2 100644
--- a/HACKING.rst
+++ b/HACKING.rst
@@ -10,8 +10,8 @@
 Shell script was chosen because it best illustrates the steps used to
 set up and interact with OpenStack components.
 
-DevStack's official repository is located on GitHub at
-https://github.com/openstack-dev/devstack.git.  Besides the master branch that
+DevStack's official repository is located on git.openstack.org at
+https://git.openstack.org/openstack-dev/devstack.  Besides the master branch that
 tracks the OpenStack trunk branches a separate branch is maintained for all
 OpenStack releases starting with Diablo (stable/diablo).
 
@@ -126,14 +126,9 @@
 Documentation
 -------------
 
-The official DevStack repo on GitHub does not include a gh-pages branch that
-GitHub uses to create static web sites.  That branch is maintained in the
-`CloudBuilders DevStack repo`__ mirror that supports the
-http://devstack.org site.  This is the primary DevStack
-documentation along with the DevStack scripts themselves.
-
-__ repo_
-.. _repo: https://github.com/cloudbuilders/devstack
+The DevStack repo now contains all of the static pages of devstack.org in
+the ``doc/source`` directory. The OpenStack CI system rebuilds the docs after every
+commit and updates devstack.org (now a redirect to docs.openstack.org/developer/devstack).
 
 All of the scripts are processed with shocco_ to render them with the comments
 as text describing the script below.  For this reason we tend to be a little
@@ -144,6 +139,8 @@
 .. _shocco: https://github.com/dtroyer/shocco/tree/rst_support
 
 The script used to drive <code>shocco</code> is <code>tools/build_docs.sh</code>.
+The complete docs build is also handled with <code>tox -edocs</code> per the
+OpenStack project standard.
 
 
 Exercises
@@ -235,8 +232,12 @@
 collections of bash scripts. These should be considered as part of the
 review process.
 
-We have a preliminary enforcing script for this called bash8 (only a
-small number of these rules are enforced).
+DevStack uses the bashate_ style checker
+to enforce basic guidelines, similar to pep8 and flake8 tools for Python. The
+list below is not complete for what bashate checks, nor is it all checked
+by bashate.  So many lines of code, so little time.
+
+.. _bashate: https://pypi.python.org/pypi/bashate
 
 Whitespace Rules
 ----------------
diff --git a/MAINTAINERS.rst b/MAINTAINERS.rst
index d754c08..d55135d 100644
--- a/MAINTAINERS.rst
+++ b/MAINTAINERS.rst
@@ -48,7 +48,7 @@
 OpenDaylight
 ~~~~~~~~~~~~
 
-* Kyle Mestery <kmestery@cisco.com>
+* Kyle Mestery <mestery@mestery.com>
 
 OpenFlow Agent (ofagent)
 ~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/docs/source/assets/css/bootstrap.css b/doc/source/assets/css/bootstrap.css
similarity index 100%
rename from docs/source/assets/css/bootstrap.css
rename to doc/source/assets/css/bootstrap.css
diff --git a/docs/source/assets/css/local.css b/doc/source/assets/css/local.css
similarity index 99%
rename from docs/source/assets/css/local.css
rename to doc/source/assets/css/local.css
index 5c703af..c8667c4 100644
--- a/docs/source/assets/css/local.css
+++ b/doc/source/assets/css/local.css
@@ -71,7 +71,7 @@
 	margin-bottom: 14px;
 }
 
-li#github {
+li#git {
 	background-position: left -70px !important;
 	height: 61px;
 	padding: ;
@@ -119,4 +119,4 @@
 
 .wat {
 	margin-top: 33px;
-}
\ No newline at end of file
+}
diff --git a/docs/source/assets/images/devstack.png b/doc/source/assets/images/devstack.png
similarity index 100%
rename from docs/source/assets/images/devstack.png
rename to doc/source/assets/images/devstack.png
Binary files differ
diff --git a/docs/source/assets/images/header_bg.png b/doc/source/assets/images/header_bg.png
similarity index 100%
rename from docs/source/assets/images/header_bg.png
rename to doc/source/assets/images/header_bg.png
Binary files differ
diff --git a/docs/source/assets/images/logo.png b/doc/source/assets/images/logo.png
similarity index 100%
rename from docs/source/assets/images/logo.png
rename to doc/source/assets/images/logo.png
Binary files differ
diff --git a/doc/source/assets/images/quickstart.png b/doc/source/assets/images/quickstart.png
new file mode 100644
index 0000000..735617b
--- /dev/null
+++ b/doc/source/assets/images/quickstart.png
Binary files differ
diff --git a/docs/source/assets/images/small_logo.png b/doc/source/assets/images/small_logo.png
similarity index 100%
rename from docs/source/assets/images/small_logo.png
rename to doc/source/assets/images/small_logo.png
Binary files differ
diff --git a/docs/source/assets/js/bootstrap.js b/doc/source/assets/js/bootstrap.js
similarity index 100%
rename from docs/source/assets/js/bootstrap.js
rename to doc/source/assets/js/bootstrap.js
diff --git a/docs/source/assets/js/bootstrap.min.js b/doc/source/assets/js/bootstrap.min.js
similarity index 100%
rename from docs/source/assets/js/bootstrap.min.js
rename to doc/source/assets/js/bootstrap.min.js
diff --git a/docs/source/assets/js/jquery-1.7.1.min.js b/doc/source/assets/js/jquery-1.7.1.min.js
similarity index 100%
rename from docs/source/assets/js/jquery-1.7.1.min.js
rename to doc/source/assets/js/jquery-1.7.1.min.js
diff --git a/doc/source/changes.rst b/doc/source/changes.rst
new file mode 100644
index 0000000..ccd96e8
--- /dev/null
+++ b/doc/source/changes.rst
@@ -0,0 +1,14 @@
+`DevStack </>`__
+
+-  `Overview <overview.html>`__
+-  `Changes <changes.html>`__
+-  `FAQ <faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+Recent Changes What's been happening?
+-------------------------------------
+
+These are the commits to DevStack for the last six months. For the
+complete list see `the DevStack project in
+Gerrit <https://review.openstack.org/#/q/status:merged+project:openstack-dev/devstack,n,z>`__.
diff --git a/doc/source/conf.py b/doc/source/conf.py
new file mode 100644
index 0000000..3e9aa45
--- /dev/null
+++ b/doc/source/conf.py
@@ -0,0 +1,263 @@
+# -*- coding: utf-8 -*-
+#
+# Tempest documentation build configuration file, created by
+# sphinx-quickstart on Tue May 21 17:43:32 2013.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys
+import os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.insert(0, os.path.abspath('.'))
+
+# -- General configuration -----------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = [ 'oslosphinx' ]
+
+todo_include_todos = True
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'DevStack'
+copyright = u'2014, OpenStack Foundation'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ['_build']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+add_module_names = False
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+modindex_common_prefix = ['DevStack-doc.']
+
+# -- Options for man page output ----------------------------------------------
+man_pages = []
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+html_theme = 'nature'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+git_cmd = "git log --pretty=format:'%ad, commit %h' --date=local -n1"
+html_last_updated_fmt = os.popen(git_cmd).read()
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+html_domain_indices = False
+
+# If false, no index is generated.
+html_use_index = False
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'DevStack-doc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+latex_elements = {
+# The paper size ('letterpaper' or 'a4paper').
+#'papersize': 'letterpaper',
+
+# The font size ('10pt', '11pt' or '12pt').
+#'pointsize': '10pt',
+
+# Additional stuff for the LaTeX preamble.
+#'preamble': '',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+  ('index', 'DevStack-doc.tex', u'DevStack Docs',
+   u'OpenStack DevStack Team', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+# -- Options for Texinfo output ------------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+  ('index', 'DevStack-doc', u'DevStack Docs',
+   u'OpenStack DevStack Team', 'DevStack-doc', 'DevStack documentation',
+   'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'
+
+
+# -- Options for Epub output ---------------------------------------------------
+
+# Bibliographic Dublin Core info.
+epub_title = u'DevStack Documentation'
+epub_author = u'OpenStack DevStack Team'
+epub_publisher = u'OpenStack DevStack Team'
+epub_copyright = u'2014, OpenStack DevStack Team'
+
+# The language of the text. It defaults to the language option
+# or en if the language is not set.
+#epub_language = ''
+
+# The scheme of the identifier. Typical schemes are ISBN or URL.
+#epub_scheme = ''
+
+# The unique identifier of the text. This can be a ISBN number
+# or the project homepage.
+#epub_identifier = ''
+
+# A unique identification for the text.
+#epub_uid = ''
+
+# A tuple containing the cover image and cover page html template filenames.
+#epub_cover = ()
+
+# HTML files that should be inserted before the pages created by sphinx.
+# The format is a list of tuples containing the path and title.
+#epub_pre_files = []
+
+# HTML files shat should be inserted after the pages created by sphinx.
+# The format is a list of tuples containing the path and title.
+#epub_post_files = []
+
+# A list of files that should not be packed into the epub file.
+#epub_exclude_files = []
+
+# The depth of the table of contents in toc.ncx.
+#epub_tocdepth = 3
+
+# Allow duplicate toc entries.
+#epub_tocdup = True
diff --git a/doc/source/configuration.rst b/doc/source/configuration.rst
new file mode 100644
index 0000000..9befc90
--- /dev/null
+++ b/doc/source/configuration.rst
@@ -0,0 +1,356 @@
+`DevStack </>`__
+
+-  `Overview <overview.html>`__
+-  `Changes <changes.html>`__
+-  `FAQ <faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+Configuration Making it go my way
+---------------------------------
+
+DevStack has always tried to be mostly-functional with a minimal amount
+of configuration. The number of options has ballooned as projects add
+features, new projects added and more combinations need to be tested.
+Historically DevStack obtained all local configuration and
+customizations from a ``localrc`` file. The number of configuration
+variables that are simply passed-through to the individual project
+configuration files is also increasing. The old mechanism for this
+(``EXTRAS_OPTS`` and friends) required specific code for each file and
+did not scale well.
+
+In Oct 2013 a new configuration method was introduced (in `review
+46768 <https://review.openstack.org/#/c/46768/>`__) to hopefully
+simplify this process and meet the following goals:
+
+-  contain all non-default local configuration in a single file
+-  be backward-compatible with ``localrc`` to smooth the transition
+   process
+-  allow settings in arbitrary configuration files to be changed
+
+local.conf
+~~~~~~~~~~
+
+The new configuration file is ``local.conf`` and resides in the root
+DevStack directory like the old ``localrc`` file. It is a modified INI
+format file that introduces a meta-section header to carry additional
+information regarding the configuration files to be changed.
+
+The new header is similar to a normal INI section header but with double
+brackets (``[[ ... ]]``) and two internal fields separated by a pipe
+(``|``):
+
+::
+
+    [[ <phase> | <config-file-name> ]]
+
+where ``<phase>`` is one of a set of phase names defined by ``stack.sh``
+and ``<config-file-name>`` is the configuration filename. The filename
+is eval'ed in the ``stack.sh`` context so all environment variables are
+available and may be used. Using the project config file variables in
+the header is strongly suggested (see the ``NOVA_CONF`` example below).
+If the path of the config file does not exist it is skipped.
+
+The defined phases are:
+
+-  **local** - extracts ``localrc`` from ``local.conf`` before
+   ``stackrc`` is sourced
+-  **pre-install** - runs after the system packages are installed but
+   before any of the source repositories are installed
+-  **install** - runs immediately after the repo installations are
+   complete
+-  **post-config** - runs after the layer 2 services are configured and
+   before they are started
+-  **extra** - runs after services are started and before any files in
+   ``extra.d`` are executed
+
+The file is processed strictly in sequence; meta-sections may be
+specified more than once but if any settings are duplicated the last to
+appear in the file will be used.
+
+::
+
+    [[post-config|$NOVA_CONF]]
+    [DEFAULT]
+    use_syslog = True
+
+    [osapi_v3]
+    enabled = False
+
+A specific meta-section ``local|localrc`` is used to provide a default
+``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.
+
+::
+
+    [[local|localrc]]
+    FIXED_RANGE=10.254.1.0/24
+    ADMIN_PASSWORD=speciale
+    LOGFILE=$DEST/logs/stack.sh.log
+
+Note that ``Q_PLUGIN_CONF_FILE`` is unique in that it is assumed to
+*NOT* start with a ``/`` (slash) character. A slash will need to be
+added:
+
+::
+
+    [[post-config|/$Q_PLUGIN_CONF_FILE]]
+
+Also note that the ``localrc`` section is sourced as a shell script
+fragment amd MUST conform to the shell requirements, specifically no
+whitespace around ``=`` (equals).
+
+Minimal Configuration
+~~~~~~~~~~~~~~~~~~~~~
+
+While ``stack.sh`` is happy to run without a ``localrc`` section in
+``local.conf``, devlife is better when there are a few minimal variables
+set. This is an example of a minimal configuration that touches the
+values that most often need to be set.
+
+-  no logging
+-  pre-set the passwords to prevent interactive prompts
+-  move network ranges away from the local network (``FIXED_RANGE`` and
+   ``FLOATING_RANGE``, commented out below)
+-  set the host IP if detection is unreliable (``HOST_IP``, commented
+   out below)
+
+::
+
+    [[local|localrc]]
+    ADMIN_PASSWORD=secrete
+    DATABASE_PASSWORD=$ADMIN_PASSWORD
+    RABBIT_PASSWORD=$ADMIN_PASSWORD
+    SERVICE_PASSWORD=$ADMIN_PASSWORD
+    SERVICE_TOKEN=a682f596-76f3-11e3-b3b2-e716f9080d50
+    #FIXED_RANGE=172.31.1.0/24
+    #FLOATING_RANGE=192.168.20.0/25
+    #HOST_IP=10.3.4.5
+
+If the ``*_PASSWORD`` variables are not set here you will be prompted to
+enter values for them by ``stack.sh``.
+
+The network ranges must not overlap with any networks in use on the
+host. Overlap is not uncommon as RFC-1918 'private' ranges are commonly
+used for both the local networking and Nova's fixed and floating ranges.
+
+``HOST_IP`` is normally detected on the first run of ``stack.sh`` but
+often is indeterminate on later runs due to the IP being moved from an
+Ethernet integace to a bridge on the host. Setting it here also makes it
+available for ``openrc`` to set ``OS_AUTH_URL``. ``HOST_IP`` is not set
+by default.
+
+Common Configuration Variables
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Set DevStack install directory
+    | *Default: ``DEST=/opt/stack``*
+    |  The DevStack install directory is set by the ``DEST`` variable.
+    |  By setting it early in the ``localrc`` section you can reference it
+       in later variables. It can be useful to set it even though it is not
+       changed from the default value.
+    |
+
+    ::
+
+        DEST=/opt/stack
+
+stack.sh logging
+    | *Defaults: ``LOGFILE="" LOGDAYS=7 LOG_COLOR=True``*
+    |  By default ``stack.sh`` output is only written to the console
+       where is runs. It can be sent to a file in addition to the console
+       by setting ``LOGFILE`` to the fully-qualified name of the
+       destination log file. A timestamp will be appended to the given
+       filename for each run of ``stack.sh``.
+    |
+
+    ::
+
+        LOGFILE=$DEST/logs/stack.sh.log
+
+    Old log files are cleaned automatically if ``LOGDAYS`` is set to the
+    number of days of old log files to keep.
+
+    ::
+
+        LOGDAYS=1
+
+    The some of the project logs (Nova, Cinder, etc) will be colorized
+    by default (if ``SYSLOG`` is not set below); this can be turned off
+    by setting ``LOG_COLOR`` False.
+
+    ::
+
+        LOG_COLOR=False
+
+Screen logging
+    | *Default: ``SCREEN_LOGDIR=""``*
+    |  By default DevStack runs the OpenStack services using ``screen``
+       which is useful for watching log and debug output. However, in
+       automated testing the interactive ``screen`` sessions may not be
+       available after the fact; setting ``SCREEN_LOGDIR`` enables logging
+       of the ``screen`` sessions in the specified diretory. There will be
+       one file per ``screen`` session named for the session name and a
+       timestamp.
+    |
+
+    ::
+
+        SCREEN_LOGDIR=$DEST/logs/screen
+
+    *Note the use of ``DEST`` to locate the main install directory; this
+    is why we suggest setting it in ``local.conf``.*
+
+One syslog to bind them all
+    | *Default: ``SYSLOG=False SYSLOG_HOST=$HOST_IP SYSLOG_PORT=516``*
+    |  Logging all services to a single syslog can be convenient. Enable
+       syslogging by setting ``SYSLOG`` to ``True``. If the destination log
+       host is not localhost ``SYSLOG_HOST`` and ``SYSLOG_PORT`` can be
+       used to direct the message stream to the log host.
+    |
+
+    ::
+
+        SYSLOG=True
+        SYSLOG_HOST=$HOST_IP
+        SYSLOG_PORT=516
+
+A clean install every time
+    | *Default: ``RECLONE=""``*
+    |  By default ``stack.sh`` only clones the project repos if they do
+       not exist in ``$DEST``. ``stack.sh`` will freshen each repo on each
+       run if ``RECLONE`` is set to ``yes``. This avoids having to manually
+       remove repos in order to get the current branch from ``$GIT_BASE``.
+    |
+
+    ::
+
+        RECLONE=yes
+
+                    Swift
+                    Default: SWIFT_HASH="" SWIFT_REPLICAS=1 SWIFT_DATA_DIR=$DEST/data/swift
+                    Swift is now used as the back-end for the S3-like object store.  When enabled Nova's objectstore (n-obj in ENABLED_SERVICES) is automatically disabled. Enable Swift by adding it services to ENABLED_SERVICES:
+                    enable_service s-proxy s-object s-container s-account
+
+    Setting Swift's hash value is required and you will be prompted for
+    it if Swift is enabled so just set it to something already:
+
+    ::
+
+        SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5
+
+    For development purposes the default number of replicas is set to
+    ``1`` to reduce the overhead required. To better simulate a
+    production deployment set this to ``3`` or more.
+
+    ::
+
+        SWIFT_REPLICAS=3
+
+    The data for Swift is stored in the source tree by default (in
+    ``$DEST/swift/data``) and can be moved by setting
+    ``SWIFT_DATA_DIR``. The specified directory will be created if it
+    does not exist.
+
+    ::
+
+        SWIFT_DATA_DIR=$DEST/data/swift
+
+    *Note: Previously just enabling ``swift`` was sufficient to start
+    the Swift services. That does not provide proper service
+    granularity, particularly in multi-host configurations, and is
+    considered deprecated. Some service combination tests now check for
+    specific Swift services and the old blanket acceptance will longer
+    work correctly.*
+
+Service Catalog Backend
+    | *Default: ``KEYSTONE_CATALOG_BACKEND=sql``*
+    |  DevStack uses Keystone's ``sql`` service catalog backend. An
+       alternate ``template`` backend is also available. However, it does
+       not support the ``service-*`` and ``endpoint-*`` commands of the
+       ``keystone`` CLI. To do so requires the ``sql`` backend be enabled:
+    |
+
+    ::
+
+        KEYSTONE_CATALOG_BACKEND=template
+
+    DevStack's default configuration in ``sql`` mode is set in
+    ``files/keystone_data.sh``
+
+Cinder
+    | Default:
+    | VOLUME_GROUP="stack-volumes" VOLUME_NAME_PREFIX="volume-" VOLUME_BACKING_FILE_SIZE=10250M
+    |  The logical volume group used to hold the Cinder-managed volumes
+       is set by ``VOLUME_GROUP``, the logical volume name prefix is set
+       with ``VOLUME_NAME_PREFIX`` and the size of the volume backing file
+       is set with ``VOLUME_BACKING_FILE_SIZE``.
+    |
+
+    ::
+
+        VOLUME_GROUP="stack-volumes"
+        VOLUME_NAME_PREFIX="volume-"
+        VOLUME_BACKING_FILE_SIZE=10250M
+
+Multi-host DevStack
+    | *Default: ``MULTI_HOST=False``*
+    |  Running DevStack with multiple hosts requires a custom
+       ``local.conf`` section for each host. The master is the same as a
+       single host installation with ``MULTI_HOST=True``. The slaves have
+       fewer services enabled and a couple of host variables pointing to
+       the master.
+    |  **Master**
+
+    ::
+
+        MULTI_HOST=True
+
+    **Slave**
+
+    ::
+
+        MYSQL_HOST=w.x.y.z
+        RABBIT_HOST=w.x.y.z
+        GLANCE_HOSTPORT=w.x.y.z:9292
+        ENABLED_SERVICES=n-vol,n-cpu,n-net,n-api
+
+API rate limits
+    | Default: ``API_RATE_LIMIT=True``
+    | Integration tests such as Tempest will likely run afoul of the
+      default rate limits configured for Nova. Turn off rate limiting
+      during testing by setting ``API_RATE_LIMIT=False``.*
+    |
+
+    ::
+
+        API_RATE_LIMIT=False
+
+Examples
+~~~~~~~~
+
+-  Eliminate a Cinder pass-through (``CINDER_PERIODIC_INTERVAL``):
+
+   ::
+
+       [[post-config|$CINDER_CONF]]
+       [DEFAULT]
+       periodic_interval = 60
+
+-  Sample ``local.conf`` with screen logging enabled:
+
+   ::
+
+       [[local|localrc]]
+       FIXED_RANGE=10.254.1.0/24
+       NETWORK_GATEWAY=10.254.1.1
+       LOGDAYS=1
+       LOGFILE=$DEST/logs/stack.sh.log
+       SCREEN_LOGDIR=$DEST/logs/screen
+       ADMIN_PASSWORD=quiet
+       DATABASE_PASSWORD=$ADMIN_PASSWORD
+       RABBIT_PASSWORD=$ADMIN_PASSWORD
+       SERVICE_PASSWORD=$ADMIN_PASSWORD
+       SERVICE_TOKEN=a682f596-76f3-11e3-b3b2-e716f9080d50
diff --git a/doc/source/contributing.rst b/doc/source/contributing.rst
new file mode 100644
index 0000000..73069e7
--- /dev/null
+++ b/doc/source/contributing.rst
@@ -0,0 +1,100 @@
+`DevStack </>`__
+
+-  `Overview <overview.html>`__
+-  `Changes <changes.html>`__
+-  `FAQ <faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+Contributing Help us help you
+-----------------------------
+
+DevStack uses the standard OpenStack contribution process as outlined in
+`the OpenStack wiki 'How To
+Contribute' <https://wiki.openstack.org/wiki/How_To_Contribute>`__. This
+means that you will need to meet the requirements of the Contribututors
+License Agreement (CLA). If you have already done that for another
+OpenStack project you are good to go.
+
+Things To Know
+~~~~~~~~~~~~~~
+
+| 
+| **Where Things Are**
+
+The official DevStack repository is located at
+``git://git.openstack.org/openstack-dev/devstack.git``, replicated from
+the repo maintained by Gerrit. GitHub also has a mirror at
+``git://github.com/openstack-dev/devstack.git``.
+
+The `blueprint <https://blueprints.launchpad.net/devstack>`__ and `bug
+trackers <https://bugs.launchpad.net/devstack>`__ are on Launchpad. It
+should be noted that DevStack generally does not use these as strongly
+as other projects, but we're trying to change that.
+
+The `Gerrit review
+queue <https://review.openstack.org/#/q/project:openstack-dev/devstack,n,z>`__
+is, however, used for all commits except for the text of this website.
+That should also change in the near future.
+
+| 
+| **HACKING.rst**
+
+Like most OpenStack projects, DevStack includes a ``HACKING.rst`` file
+that describes the layout, style and conventions of the project. Because
+``HACKING.rst`` is in the main DevStack repo it is considered
+authoritative. Much of the content on this page is taken from there.
+
+| 
+| **bashate Formatting**
+
+Around the time of the OpenStack Havana release we added a tool to do
+style checking in DevStack similar to what pep8/flake8 do for Python
+projects. It is still \_very\_ simplistic, focusing mostly on stray
+whitespace to help prevent -1 on reviews that are otherwise acceptable.
+Oddly enough it is called ``bashate``. It will be expanded to enforce
+some of the documentation rules in comments that are used in formatting
+the script pages for devstack.org and possibly even simple code
+formatting. Run it on the entire project with ``./run_tests.sh``.
+
+Code
+~~~~
+
+| 
+| **Repo Layout**
+
+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``.
+
+``exercises`` - Contains the test scripts used to validate 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.
+
+``files`` - Contains a variety of otherwise lost files used in
+configuring and operating DevStack. This includes templates for
+configuration files and the system dependency information. This is also
+where image files are downloaded and expanded if necessary.
+
+``lib`` - Contains the sub-scripts specific to each project. This is
+where the work of managing a project's services is located. Each
+top-level project (Keystone, Nova, etc) has a file here. Additionally
+there are some for system services and project plugins.
+
+``samples`` - Contains a sample of the local files not included in the
+DevStack repo.
+
+``tests`` - the DevStack test suite is rather sparse, mostly consisting
+of test of specific fragile functions in the ``functions`` file.
+
+``tools`` - Contains a collection of stand-alone scripts, some of which
+have aged a bit (does anyone still do ramdisk installs?). 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/eucarc.rst b/doc/source/eucarc.rst
new file mode 100644
index 0000000..c91d341
--- /dev/null
+++ b/doc/source/eucarc.rst
@@ -0,0 +1,52 @@
+`DevStack </>`__
+
+-  `Overview <overview.html>`__
+-  `Changes <changes.html>`__
+-  `FAQ <faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+eucarc EC2 settings
+-------------------
+
+``eucarc`` creates EC2 credentials for the current user as defined by
+``OS_TENANT_NAME:OS_USERNAME``. ``eucarc`` sources ``openrc`` at the
+beginning (which in turn sources ``stackrc`` and ``localrc``) in order
+to set credentials to create EC2 credentials in Keystone.
+
+EC2\_URL
+    Set the EC2 url for euca2ools. The endpoint is extracted from the
+    service catalog for ``OS_TENANT_NAME:OS_USERNAME``.
+
+    ::
+
+        EC2_URL=$(keystone catalog --service ec2 | awk '/ publicURL / { print $4 }')
+
+S3\_URL
+    Set the S3 endpoint for euca2ools. The endpoint is extracted from
+    the service catalog for ``OS_TENANT_NAME:OS_USERNAME``.
+
+    ::
+
+        export S3_URL=$(keystone catalog --service s3 | awk '/ publicURL / { print $4 }')
+
+EC2\_ACCESS\_KEY, EC2\_SECRET\_KEY
+    Create EC2 credentials for the current tenant:user in Keystone.
+
+    ::
+
+        CREDS=$(keystone ec2-credentials-create)
+        export EC2_ACCESS_KEY=$(echo "$CREDS" | awk '/ access / { print $4 }')
+        export EC2_SECRET_KEY=$(echo "$CREDS" | awk '/ secret / { print $4 }')
+
+Certificates for Bundling
+    Euca2ools requires certificate files to enable bundle uploading. The
+    exercise script ``exercises/bundle.sh`` demonstrated retrieving
+    certificates using the Nova CLI.
+
+    ::
+
+        EC2_PRIVATE_KEY=pk.pem
+        EC2_CERT=cert.pem
+        NOVA_CERT=cacert.pem
+        EUCALYPTUS_CERT=${NOVA_CERT}
diff --git a/doc/source/exerciserc.rst b/doc/source/exerciserc.rst
new file mode 100644
index 0000000..ed3f2e8
--- /dev/null
+++ b/doc/source/exerciserc.rst
@@ -0,0 +1,49 @@
+`DevStack </>`__
+
+-  `Overview <overview.html>`__
+-  `Changes <changes.html>`__
+-  `FAQ <faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+exerciserc Exercise settings
+----------------------------
+
+``exerciserc`` is used to configure settings for the exercise scripts.
+The values shown below are the default values. Thse can all be
+overridden by setting them in the ``localrc`` section.
+
+ACTIVE\_TIMEOUT
+    Max time to wait while vm goes from build to active state
+
+    ::
+
+        ACTIVE_TIMEOUT==30
+
+ASSOCIATE\_TIMEOUT
+    Max time to wait for proper IP association and dis-association.
+
+    ::
+
+        ASSOCIATE_TIMEOUT=15
+
+BOOT\_TIMEOUT
+    Max time till the vm is bootable
+
+    ::
+
+        BOOT_TIMEOUT=30
+
+RUNNING\_TIMEOUT
+    Max time from run instance command until it is running
+
+    ::
+
+        RUNNING_TIMEOUT=$(($BOOT_TIMEOUT + $ACTIVE_TIMEOUT))
+
+TERMINATE\_TIMEOUT
+    Max time to wait for a vm to terminate
+
+    ::
+
+        TERMINATE_TIMEOUT=30
diff --git a/doc/source/faq.rst b/doc/source/faq.rst
new file mode 100644
index 0000000..36b25b3
--- /dev/null
+++ b/doc/source/faq.rst
@@ -0,0 +1,180 @@
+`DevStack </>`__
+
+-  `Overview <overview.html>`__
+-  `Changes <changes.html>`__
+-  `FAQ <faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+FAQ: Using DevStack Making to behave
+------------------------------------
+
+-  `General Questions <#general>`__
+-  `Operation and Configuration <#ops_conf>`__
+-  `Miscellaneous <#misc>`__
+
+General Questions
+~~~~~~~~~~~~~~~~~
+
+Q: Can I use DevStack for production?
+    A: No. We mean it. Really. DevStack makes some implementation
+    choices that are not appropriate for production deployments. We
+    warned you!
+Q: Then why selinux in enforcing mode?
+    A: That is the default on current Fedora and RHEL releases. DevStack
+    has (rightly so) a bad reputation for its security practices; it has
+    always been meant as a development tool first and system integration
+    later. This is changing as the security issues around OpenStack's
+    use of root (for example) have been tightened and developers need to
+    be better equipped to work in these environments. ``stack.sh``'s use
+    of root is primarily to support the activities that would be handled
+    by packaging in "real" deployments. To remove additional protections
+    that will be desired/required in production would be a step
+    backward.
+Q: But selinux is disabled in RHEL 6!
+    A: Today it is, yes. That is a specific exception that certain
+    DevStack contributors fought strongly against. The primary reason it
+    was allowed was to support using RHEL6 as the Python 2.6 test
+    platform and that took priority time-wise. This will not be the case
+    with RHEL 7.
+Q: Why a shell script, why not chef/puppet/...
+    A: The script is meant to be read by humans (as well as ran by
+    computers); it is the primary documentation after all. Using a
+    recipe system requires everyone to agree and understand chef or
+    puppet.
+Q: Why not use Crowbar?
+    A: DevStack is optimized for documentation & developers. As some of
+    us use `Crowbar <https://github.com/dellcloudedge/crowbar>`__ for
+    production deployments, we hope developers documenting how they
+    setup systems for new features supports projects like Crowbar.
+Q: I'd like to help!
+    A: That isn't a question, but please do! The source for DevStack is
+    at
+    `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+    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.
+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
+    people are doing the hard work of packaging and recipes for
+    production deployments. We hope this script serves as a way to
+    communicate configuration changes between developers and packagers.
+Q: Why isn't $MY\_FAVORITE\_DISTRO supported?
+    A: DevStack is meant for developers and those who want to see how
+    OpenStack really works. DevStack is known to run on the
+    distro/release combinations listed in ``README.md``. DevStack is
+    only supported on releases other than those documented in
+    ``README.md`` on a best-effort basis.
+Q: What about Fedora/RHEL/CentOS?
+    A: Fedora and CentOS/RHEL are supported via rpm dependency files and
+    specific checks in ``stack.sh``. Support will follow the pattern set
+    with the Ubuntu testing, i.e. only a single release of the distro
+    will receive regular testing, others will be handled on a
+    best-effort basis.
+Q: Are there any differences between Ubuntu and Fedora support?
+    A: Neutron is not fully supported prior to Fedora 18 due lack of
+    OpenVSwitch packages.
+Q: How about RHEL 6?
+    A: RHEL 6 has Python 2.6 and many old modules packaged and is a
+    challenge to support. There are a number of specific RHEL6
+    work-arounds in ``stack.sh`` to handle this. But the testing on py26
+    is valuable so we do it...
+
+Operation and Configuration
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Q: Can DevStack handle a multi-node installation?
+    A: Indirectly, yes. You run DevStack on each node with the
+    appropriate configuration in ``local.conf``. The primary
+    considerations are turning off the services not required on the
+    secondary nodes, making sure the passwords match and setting the
+    various API URLs to the right place.
+Q: How can I document the environment that DevStack is using?
+    A: DevStack includes a script (``tools/info.sh``) that gathers the
+    versions of the relevant installed apt packages, pip packages and
+    git repos. This is a good way to verify what Python modules are
+    installed.
+Q: How do I turn off a service that is enabled by default?
+    A: Services can be turned off by adding ``disable_service xxx`` to
+    ``local.conf`` (using ``n-vol`` in this example):
+
+    ::
+
+        disable_service n-vol
+
+Q: Is enabling a service that defaults to off done with the reverse of the above?
+    A: Of course!
+
+    ::
+
+        enable_service qpid
+
+Q: How do I run a specific OpenStack milestone?
+    A: OpenStack milestones have tags set in the git repo. Set the appropriate tag in the ``*_BRANCH`` variables in ``local.conf``.  Swift is on its own release schedule so pick a tag in the Swift repo that is just before the milestone release. For example:
+
+    ::
+
+        [[local|localrc]]
+        GLANCE_BRANCH=stable/grizzly
+        HORIZON_BRANCH=stable/grizzly
+        KEYSTONE_BRANCH=stable/grizzly
+        NOVA_BRANCH=stable/grizzly
+        GLANCE_BRANCH=stable/grizzly
+        NEUTRON_BRANCH=stable/grizzly
+        SWIFT_BRANCH=1.10.0
+
+Q: Why not use [STRIKEOUT:``tools/pip-requires``]\ ``requirements.txt`` to grab project dependencies?
+    [STRIKEOUT:The majority of deployments will use packages to install
+    OpenStack that will have distro-based packages as dependencies.
+    DevStack installs as many of these Python packages as possible to
+    mimic the expected production environemnt.] Certain Linux
+    distributions have a 'lack of workaround' in their Python
+    configurations that installs vendor packaged Python modules and
+    pip-installed modules to the SAME DIRECTORY TREE. This is causing
+    heartache and moving us in the direction of installing more modules
+    from PyPI than vendor packages. However, that is only being done as
+    necessary as the packaging needs to catch up to the development
+    cycle anyway so this is kept to a minimum.
+Q: What can I do about RabbitMQ not wanting to start on my fresh new VM?
+    A: This is often caused by ``erlang`` not being happy with the
+    hostname resolving to a reachable IP address. Make sure your
+    hostname resolves to a working IP address; setting it to 127.0.0.1
+    in ``/etc/hosts`` is often good enough for a single-node
+    installation. And in an extreme case, use ``clean.sh`` to eradicate
+    it and try again.
+Q: How can I set up Heat in stand-alone configuration?
+    A: Configure ``local.conf`` thusly:
+
+    ::
+
+        [[local|localrc]]
+        HEAT_STANDALONE=True
+        ENABLED_SERVICES=rabbit,mysql,heat,h-api,h-api-cfn,h-api-cw,h-eng
+        KEYSTONE_SERVICE_HOST=<keystone-host>
+        KEYSTONE_AUTH_HOST=<keystone-host>
+
+Q: Why are my configuration changes ignored?
+    A: You may have run into the package prerequisite installation
+    timeout. ``tools/install_prereqs.sh`` has a timer that skips the
+    package installation checks if it was run within the last
+    ``PREREQ_RERUN_HOURS`` hours (default is 2). To override this, set
+    ``FORCE_PREREQ=1`` and the package checks will never be skipped.
+
+Miscellaneous
+~~~~~~~~~~~~~
+
+Q: ``tools/fixup_stuff.sh`` is broken and shouldn't 'fix' just one version of packages.
+    A: [Another not-a-question] No it isn't. Stuff in there is to
+    correct problems in an environment that need to be fixed elsewhere
+    or may/will be fixed in a future release. In the case of
+    ``httplib2`` and ``prettytable`` specific problems with specific
+    versions are being worked around. If later releases have those
+    problems than we'll add them to the script. Knowing about the broken
+    future releases is valuable rather than polling to see if it has
+    been fixed.
diff --git a/doc/source/guides/multinode-lab.rst b/doc/source/guides/multinode-lab.rst
new file mode 100644
index 0000000..a63260f
--- /dev/null
+++ b/doc/source/guides/multinode-lab.rst
@@ -0,0 +1,378 @@
+`DevStack </>`__
+
+-  `Overview <../overview.html>`__
+-  `Changes <../changes.html>`__
+-  `FAQ <../faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+Multi-Node Lab: Serious Stuff
+=============================
+
+Here is OpenStack in a realistic test configuration with multiple
+physical servers.
+
+Prerequisites Linux & Network
+-----------------------------
+
+Minimal Install
+~~~~~~~~~~~~~~~
+
+You need to have a system with a fresh install of Linux. You can
+download the `Minimal
+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>`__
+and
+`CentOS/RHEL <http://mirrors.kernel.org/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-netinstall.iso>`__.
+
+Install a couple of packages to bootstrap configuration:
+
+::
+
+    apt-get install -y git sudo || yum install -y git sudo
+
+Network Configuration
+~~~~~~~~~~~~~~~~~~~~~
+
+The first iteration of the lab uses OpenStack's FlatDHCP network
+controller so only a single network will be required. It should be on
+its own subnet without DHCP; the host IPs and floating IP pool(s) will
+come out of this block. This example uses the following:
+
+-  Gateway: 192.168.42.1
+-  Physical nodes: 192.168.42.11-192.168.42.99
+-  Floating IPs: 192.168.42.128-192.168.42.254
+
+Configure each node with a static IP. For Ubuntu edit
+``/etc/network/interfaces``:
+
+::
+
+    auto eth0
+    iface eth0 inet static
+        address 192.168.42.11
+        netmask 255.255.255.0
+        gateway 192.168.42.1
+
+For Fedora and CentOS/RHEL edit
+``/etc/sysconfig/network-scripts/ifcfg-eth0``:
+
+::
+
+    BOOTPROTO=static
+    IPADDR=192.168.42.11
+    NETMASK=255.255.255.0
+    GATEWAY=192.168.42.1
+
+Installation shake and bake
+---------------------------
+
+Add the DevStack User
+~~~~~~~~~~~~~~~~~~~~~
+
+OpenStack runs as a non-root user that has sudo access to root. There is
+nothing special about the name, we'll use ``stack`` here. Every node
+must use the same name and preferably uid. If you created a user during
+the OS install you can use it and give it sudo privileges below.
+Otherwise create the stack user:
+
+::
+
+    groupadd stack
+    useradd -g stack -s /bin/bash -d /opt/stack -m stack
+
+This user will be making many changes to your system during installation
+and operation so it needs to have sudo privileges to root without a
+password:
+
+::
+
+    echo "stack ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
+
+From here on use the ``stack`` user. **Logout** and **login** as the
+``stack`` user.
+
+Set Up Ssh
+~~~~~~~~~~
+
+Set up the stack user on each node with an ssh key for access:
+
+::
+
+    mkdir ~/.ssh; chmod 700 ~/.ssh
+    echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyYjfgyPazTvGpd8OaAvtU2utL8W6gWC4JdRS1J95GhNNfQd657yO6s1AH5KYQWktcE6FO/xNUC2reEXSGC7ezy+sGO1kj9Limv5vrvNHvF1+wts0Cmyx61D2nQw35/Qz8BvpdJANL7VwP/cFI/p3yhvx2lsnjFE3hN8xRB2LtLUopUSVdBwACOVUmH2G+2BWMJDjVINd2DPqRIA4Zhy09KJ3O1Joabr0XpQL0yt/I9x8BVHdAx6l9U0tMg9dj5+tAjZvMAFfye3PJcYwwsfJoFxC8w/SLtqlFX7Ehw++8RtvomvuipLdmWCy+T9hIkl+gHYE4cS3OIqXH7f49jdJf jesse@spacey.local" > ~/.ssh/authorized_keys
+
+Download DevStack
+~~~~~~~~~~~~~~~~~
+
+Grab the latest version of DevStack:
+
+::
+
+    git clone https://git.openstack.org/openstack-dev/devstack
+    cd devstack
+
+Up to this point all of the steps apply to each node in the cluster.
+From here on there are some differences between the cluster controller
+(aka 'head node') and the compute nodes.
+
+Configure Cluster Controller
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The cluster controller runs all OpenStack services. Configure the
+cluster controller's DevStack in ``local.conf``:
+
+::
+
+    [[local|localrc]]
+    HOST_IP=192.168.42.11
+    FLAT_INTERFACE=eth0
+    FIXED_RANGE=10.4.128.0/20
+    FIXED_NETWORK_SIZE=4096
+    FLOATING_RANGE=192.168.42.128/25
+    MULTI_HOST=1
+    LOGFILE=/opt/stack/logs/stack.sh.log
+    ADMIN_PASSWORD=labstack
+    MYSQL_PASSWORD=supersecret
+    RABBIT_PASSWORD=supersecrete
+    SERVICE_PASSWORD=supersecrete
+    SERVICE_TOKEN=xyzpdqlazydog
+
+In the multi-node configuration the first 10 or so IPs in the private
+subnet are usually reserved. Add this to ``local.sh`` to have it run
+after every ``stack.sh`` run:
+
+::
+
+    for i in `seq 2 10`; do /opt/stack/nova/bin/nova-manage fixed reserve 10.4.128.$i; done
+
+Fire up OpenStack:
+
+::
+
+    ./stack.sh
+
+A stream of activity ensues. When complete you will see a summary of
+``stack.sh``'s work, including the relevant URLs, accounts and passwords
+to poke at your shiny new OpenStack. The most recent log file is
+available in ``stack.sh.log``.
+
+Configure Compute Nodes
+~~~~~~~~~~~~~~~~~~~~~~~
+
+The compute nodes only run the OpenStack worker services. For additional
+machines, create a ``local.conf`` with:
+
+::
+
+    HOST_IP=192.168.42.12 # change this per compute node
+    FLAT_INTERFACE=eth0
+    FIXED_RANGE=10.4.128.0/20
+    FIXED_NETWORK_SIZE=4096
+    FLOATING_RANGE=192.168.42.128/25
+    MULTI_HOST=1
+    LOGFILE=/opt/stack/logs/stack.sh.log
+    ADMIN_PASSWORD=labstack
+    MYSQL_PASSWORD=supersecret
+    RABBIT_PASSWORD=supersecrete
+    SERVICE_PASSWORD=supersecrete
+    SERVICE_TOKEN=xyzpdqlazydog
+    DATABASE_TYPE=mysql
+    SERVICE_HOST=192.168.42.11
+    MYSQL_HOST=192.168.42.11
+    RABBIT_HOST=192.168.42.11
+    GLANCE_HOSTPORT=192.168.42.11:9292
+    ENABLED_SERVICES=n-cpu,n-net,n-api,c-sch,c-api,c-vol
+    NOVA_VNC_ENABLED=True
+    NOVNCPROXY_URL="http://192.168.42.11:6080/vnc_auto.html"
+    VNCSERVER_LISTEN=$HOST_IP
+    VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN
+
+Fire up OpenStack:
+
+::
+
+    ./stack.sh
+
+A stream of activity ensues. When complete you will see a summary of
+``stack.sh``'s work, including the relevant URLs, accounts and passwords
+to poke at your shiny new OpenStack. The most recent log file is
+available in ``stack.sh.log``.
+
+Cleaning Up After DevStack
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Shutting down OpenStack is now as simple as running the included
+``unstack.sh`` script:
+
+::
+
+    ./unstack.sh
+
+A more aggressive cleanup can be performed using ``clean.sh``. It
+removes certain troublesome packages and attempts to leave the system in
+a state where changing the database or queue manager can be reliably
+performed.
+
+::
+
+    ./clean.sh
+
+Sometimes running instances are not cleaned up. DevStack attempts to do
+this when it runs but there are times it needs to still be done by hand:
+
+::
+
+    sudo rm -rf /etc/libvirt/qemu/inst*
+    sudo virsh list | grep inst | awk '{print $1}' | xargs -n1 virsh destroy
+
+Options pimp your stack
+-----------------------
+
+Additional Users
+~~~~~~~~~~~~~~~~
+
+DevStack creates two OpenStack users (``admin`` and ``demo``) and two
+tenants (also ``admin`` and ``demo``). ``admin`` is exactly what it
+sounds like, a privileged administrative account that is a member of
+both the ``admin`` and ``demo`` tenants. ``demo`` is a normal user
+account that is only a member of the ``demo`` tenant. Creating
+additional OpenStack users can be done through the dashboard, sometimes
+it is easier to do them in bulk from a script, especially since they get
+blown away every time ``stack.sh`` runs. The following steps are ripe
+for scripting:
+
+::
+
+    # Get admin creds
+    . openrc admin admin
+            
+    # List existing tenants
+    keystone tenant-list
+
+    # List existing users
+    keystone user-list
+
+    # Add a user and tenant
+    NAME=bob
+    PASSWORD=BigSecrete
+    TENANT=$NAME
+    keystone tenant-create --name=$NAME
+    keystone user-create --name=$NAME --pass=$PASSWORD
+    keystone user-role-add --user-id=<bob-user-id> --tenant-id=<bob-tenant-id> --role-id=<member-role-id>
+    # member-role-id comes from the existing member role created by stack.sh
+    # keystone role-list
+
+Swift
+~~~~~
+
+Swift requires a significant amount of resources and is disabled by
+default in DevStack. The support in DevStack is geared toward a minimal
+installation but can be used for testing. To implement a true multi-node
+test of Swift required more than DevStack provides. Enabling it is as
+simple as enabling the ``swift`` service in ``local.conf``:
+
+::
+
+    enable_service s-proxy s-object s-container s-account
+
+Swift will put its data files in ``SWIFT_DATA_DIR`` (default
+``/opt/stack/data/swift``). The size of the data 'partition' created
+(really a loop-mounted file) is set by ``SWIFT_LOOPBACK_DISK_SIZE``. The
+Swift config files are located in ``SWIFT_CONFIG_DIR`` (default
+``/etc/swift``). All of these settings can be overridden in (wait for
+it...) ``local.conf``.
+
+Volumes
+~~~~~~~
+
+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
+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``.
+
+``stack-volumes`` can be pre-created on any physical volume supported by
+Linux's LVM. The name of the volume group can be changed by setting
+``VOLUME_GROUP`` in ``localrc``. ``stack.sh`` deletes all logical
+volumes in ``VOLUME_GROUP`` that begin with ``VOLUME_NAME_PREFIX`` as
+part of cleaning up from previous runs. It is recommended to not use the
+root volume group as ``VOLUME_GROUP``.
+
+The details of creating the volume group depends on the server hardware
+involved but looks something like this:
+
+::
+
+    pvcreate /dev/sdc
+    vgcreate stack-volumes /dev/sdc
+
+Syslog
+~~~~~~
+
+DevStack is capable of using ``rsyslog`` to aggregate logging across the
+cluster. It is off by default; to turn it on set ``SYSLOG=True`` in
+``local.conf``. ``SYSLOG_HOST`` defaults to ``HOST_IP``; on the compute
+nodes it must be set to the IP of the cluster controller to send syslog
+output there. In the example above, add this to the compute node
+``local.conf``:
+
+::
+
+    SYSLOG_HOST=192.168.42.11
+
+Using Alternate Repositories/Branches
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The git repositories for all of the OpenStack services are defined in
+``stackrc``. Since this file is a part of the DevStack package changes
+to it will probably be overwritten as updates are applied. Every setting
+in ``stackrc`` can be redefined in ``local.conf``.
+
+To change the repository or branch that a particular OpenStack service
+is created from, simply change the value of ``*_REPO`` or ``*_BRANCH``
+corresponding to that service.
+
+After making changes to the repository or branch, if ``RECLONE`` is not
+set in ``localrc`` it may be necessary to remove the corresponding
+directory from ``/opt/stack`` to force git to re-clone the repository.
+
+For example, to pull Nova from a proposed release candidate in the
+primary Nova repository:
+
+::
+
+    NOVA_BRANCH=rc-proposed
+
+To pull Glance from an experimental fork:
+
+::
+
+    GLANCE_BRANCH=try-something-big
+    GLANCE_REPO=https://github.com/mcuser/glance.git
+
+Notes stuff you might need to know
+----------------------------------
+
+Reset the Bridge
+~~~~~~~~~~~~~~~~
+
+How to reset the bridge configuration:
+
+::
+
+    sudo brctl delif br100 eth0.926
+    sudo ip link set dev br100 down
+    sudo brctl delbr br100
+
+Set MySQL Password
+~~~~~~~~~~~~~~~~~~
+
+If you forgot to set the root password you can do this:
+
+::
+
+    mysqladmin -u root -pnova password 'supersecret'
diff --git a/doc/source/guides/pxe-boot.rst b/doc/source/guides/pxe-boot.rst
new file mode 100644
index 0000000..f745abb
--- /dev/null
+++ b/doc/source/guides/pxe-boot.rst
@@ -0,0 +1,140 @@
+`DevStack </>`__
+
+-  `Overview <../overview.html>`__
+-  `Changes <../changes.html>`__
+-  `FAQ <../faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+PXE Boot Server Guide: Magic Dust for Network Boot
+==================================================
+
+Boot DevStack from a PXE server to a RAM disk.
+
+Prerequisites Hardware & OpenWRT
+--------------------------------
+
+Hardware
+~~~~~~~~
+
+The whole point of this exercise is to have a highly portable boot
+server, so using a small router with a USB port is the desired platform.
+This guide uses a Buffalo WZR-HP-G300NH as an example, but it is easily
+generalized for other supported platforms. See openwrt.org for more.
+
+OpenWRT
+~~~~~~~
+
+Any recent 'Backfire' build of OpenWRT will work for the boot server
+project. We build from trunk and have made the images available at
+`http://openwrt.xr7.org/openwrt <http://openwrt.xr7.org/openwrt>`__.
+
+Installation bit blasting
+-------------------------
+
+Install the Image
+~~~~~~~~~~~~~~~~~
+
+This process follows `the OpenWRT doc OEM
+Install <http://wiki.openwrt.org/toh/buffalo/wzr-hp-g300h>`__ to tftp
+the new image onto the router. You need a computer to set up the router,
+we assume it is a recent Linux or OS/X installation.
+
+-  Get openwrt-ar71xx-wzr-hp-g300nh-squashfs-tftp.bin
+
+   ::
+
+       wget http://openwrt.xr7.org/openwrt/ar71xx/openwrt-ar71xx-wzr-hp-g300nh-squashfs-tftp.bin
+
+-  Connect computer to LAN port 4 (closest to WAN port)
+-  Set computer interface to IP address in the 192.168.11.2
+-  Add static arp entry for router
+
+   ::
+
+       arp -s 192.168.11.1 <mac-address>
+
+-  Start TFTP transfer attempt
+
+   ::
+
+       tftp 192.168.11.1
+       binary
+       rexmt 1
+       timeout 60
+       put openwrt-ar71xx-wzr-hp-g300nh-squashfs-tftp.bin
+
+-  Power on router. Router will reboot and initialize on 192.168.1.1.
+-  Delete static arp entry for router
+
+   ::
+
+       arp -d 192.168.11.1
+
+-  Set computer to DHCP, connect and telnet to router and set root
+   password.
+
+Configure the Router
+~~~~~~~~~~~~~~~~~~~~
+
+-  Update ``/etc/opkg.conf`` to point to our repo:
+
+   ::
+
+       src/gz packages http://192.168.5.13/openwrt/build/ar71xx/packages
+
+-  Configure anon mounts:
+
+   ::
+
+       uci delete fstab.@mount[0]
+       uci commit fstab
+       /etc/init.d/fstab restart
+
+-  Reset the DHCP address range. DevStack will claim the upper /25 of
+   the router's LAN address space for floating IPs so the default DHCP
+   address range needs to be moved:
+
+   ::
+
+       uci set dhcp.lan.start=65
+       uci set dhcp.lan.limit=60
+       uci commit dhcp
+
+-  Enable TFTP:
+
+   ::
+
+       uci set dhcp.@dnsmasq[0].enable_tftp=1
+       uci set dhcp.@dnsmasq[0].tftp_root=/mnt/sda1/tftpboot
+       uci set dhcp.@dnsmasq[0].dhcp_boot=pxelinux.0
+       uci commit dhcp
+       /etc/init.d/dnsmasq restart
+
+Set Up tftpboot
+~~~~~~~~~~~~~~~
+
+-  Create the ``/tmp/tftpboot`` structure and populate it:
+
+   ::
+
+       cd ~/devstack
+       tools/build_pxe_boot.sh /tmp
+
+   This calls ``tools/build_ramdisk.sh`` to create a 2GB ramdisk
+   containing a complete development Oneiric OS plus the OpenStack code
+   checkouts.
+
+-  Copy ``tftpboot`` to a USB drive:
+
+   ::
+
+       mount /dev/sdb1 /mnt/tmp
+       rsync -a /tmp/tftpboot/ /mnt/tmp/tftpboot/
+       umount /mnt/tmp
+
+-  Plug USB drive into router. It will be automounted and is ready to
+   serve content.
+
+Now `return <ramdisk.html>`__ to the RAM disk Guide to kick off your
+DevStack experience.
diff --git a/doc/source/guides/ramdisk.rst b/doc/source/guides/ramdisk.rst
new file mode 100644
index 0000000..1ba74f2
--- /dev/null
+++ b/doc/source/guides/ramdisk.rst
@@ -0,0 +1,86 @@
+`DevStack </>`__
+
+-  `Overview <../overview.html>`__
+-  `Changes <../changes.html>`__
+-  `FAQ <../faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+Stack-in-a-Box: Try before you mkfs
+===================================
+
+Run DevStack from a RAM disk to give it a whirl before making the
+commitment to install it. We'll cover booting from a USB drive or over
+the network via PXE. We'll even thow in configuring a home router to
+handle the PXE boot. You will need a minimum of 3GB for both of these
+configurations as the RAM disk itself is 2GB.
+
+Prerequisites Hardware
+----------------------
+
+USB Boot
+~~~~~~~~
+
+`This guide <usb-boot.html>`__ covers the creation of a bootable USB
+drive. Your computer BIOS must support booting from USB.
+
+PXE Boot
+~~~~~~~~
+
+`This guide <pxe-boot.html>`__ covers the installation of OpenWRT on a
+home router and configuring it as a PXE server, plus the creation of the
+boot images and PXE support files.
+
+Installation bit blasting
+-------------------------
+
+Install DevStack
+~~~~~~~~~~~~~~~~
+
+Grab the latest version of DevStack via https:
+
+::
+
+    sudo apt-get install git -y
+    git clone https://git.openstack.org/openstack-dev/devstack
+    cd devstack
+
+Prepare the Boot RAMdisk
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+Pick your boot method and follow the guide to prepare to build the RAM
+disk and set up the boot process:
+
+-  `USB boot <usb-boot.html>`__
+-  `PXE boot <pxe-boot.html>`__
+
+Fire It Up
+~~~~~~~~~~
+
+-  Boot the computer into the RAM disk. The details will vary from
+   machine to machine but most BIOSes have a method to select the boot
+   device, often by pressing F12 during POST.
+-  Select 'DevStack' from the Boot Menu.
+-  Log in with the 'stack' user and 'pass' password.
+-  Create ``devstack/localrc`` if you wish to change any of the
+   configuration variables. You will probably want to at least set the
+   admin login password to something memorable rather than the default
+   20 random characters:
+
+   ::
+
+       ADMIN_PASSWORD=openstack
+
+-  Fire up OpenStack!
+
+   ::
+
+       ./run.sh
+
+-  See the processes running in screen:
+
+   ::
+
+       screen -x
+
+-  Connect to the dashboard at ``http://<ip-address>/``
diff --git a/doc/source/guides/single-machine.rst b/doc/source/guides/single-machine.rst
new file mode 100644
index 0000000..3e0a39c
--- /dev/null
+++ b/doc/source/guides/single-machine.rst
@@ -0,0 +1,140 @@
+`DevStack </>`__
+
+-  `Overview <../overview.html>`__
+-  `Changes <../changes.html>`__
+-  `FAQ <../faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+All-In-One: Dedicated Hardware
+==============================
+
+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
+with hardware.
+
+Prerequisites Linux & Network
+-----------------------------
+
+Minimal Install
+~~~~~~~~~~~~~~~
+
+You need to have a system with a fresh install of Linux. You can
+download the `Minimal
+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>`__
+and
+`CentOS/RHEL <http://mirrors.kernel.org/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-netinstall.iso>`__.
+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.
+
+Network Configuration
+~~~~~~~~~~~~~~~~~~~~~
+
+Determine the network configuration on the interface used to integrate
+your OpenStack cloud with your existing network. For example, if the IPs
+given out on your network by DHCP are 192.168.1.X - where X is between
+100 and 200 you will be able to use IPs 201-254 for **floating ips**.
+
+To make things easier later change your host to use a static IP instead
+of DHCP (i.e. 192.168.1.201).
+
+Installation shake and bake
+---------------------------
+
+Add your user
+~~~~~~~~~~~~~
+
+We need to add a user to install DevStack. (if you created a user during
+install you can skip this step and just give the user sudo privileges
+below)
+
+::
+
+    adduser stack
+
+Since this user will be making many changes to your system, it will need
+to have sudo privileges:
+
+::
+
+    apt-get install sudo -y || yum install -y sudo
+    echo "stack ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
+
+From here on you should use the user you created. **Logout** and
+**login** as that user.
+
+Download DevStack
+~~~~~~~~~~~~~~~~~
+
+We'll grab the latest version of DevStack via https:
+
+::
+
+    sudo apt-get install git -y || yum install -y git
+    git clone https://git.openstack.org/openstack-dev/devstack
+    cd devstack
+
+Run DevStack
+~~~~~~~~~~~~
+
+Now to configure ``stack.sh``. DevStack includes a sample in
+``devstack/samples/local.conf``. Create ``local.conf`` as shown below to
+do the following:
+
+-  Set ``FLOATING_RANGE`` to a range not used on the local network, i.e.
+   192.168.1.224/27. This configures IP addresses ending in 225-254 to
+   be used as floating IPs.
+-  Set ``FIXED_RANGE`` and ``FIXED_NETWORK_SIZE`` to configure the
+   internal address space used by the instances.
+-  Set ``FLAT_INTERFACE`` to the Ethernet interface that connects the
+   host to your local network. This is the interface that should be
+   configured with the static IP address mentioned above.
+-  Set the administrative password. This password is used for the
+   **admin** and **demo** accounts set up as OpenStack users.
+-  Set the MySQL administrative password. The default here is a random
+   hex string which is inconvenient if you need to look at the database
+   directly for anything.
+-  Set the RabbitMQ password.
+-  Set the service password. This is used by the OpenStack services
+   (Nova, Glance, etc) to authenticate with Keystone.
+
+``local.conf`` should look something like this:
+
+::
+
+    [[local|localrc]]
+    FLOATING_RANGE=192.168.1.224/27
+    FIXED_RANGE=10.11.12.0/24
+    FIXED_NETWORK_SIZE=256
+    FLAT_INTERFACE=eth0
+    ADMIN_PASSWORD=supersecret
+    MYSQL_PASSWORD=iheartdatabases
+    RABBIT_PASSWORD=flopsymopsy
+    SERVICE_PASSWORD=iheartksl
+
+Run DevStack:
+
+::
+
+    ./stack.sh
+
+A seemingly endless stream of activity ensues. When complete you will
+see a summary of ``stack.sh``'s work, including the relevant URLs,
+accounts and passwords to poke at your shiny new OpenStack.
+
+Using OpenStack
+~~~~~~~~~~~~~~~
+
+At this point you should be able to access the dashboard from other
+computers on the local network. In this example that would be
+http://192.168.1.201/ for the dashboard (aka Horizon). Launch VMs and if
+you give them floating IPs and security group access those VMs will be
+accessible from other machines on your network.
+
+Some examples of using the OpenStack command-line clients ``nova`` and
+``glance`` are in the shakedown scripts in ``devstack/exercises``.
+``exercise.sh`` will run all of those scripts and report on the results.
diff --git a/doc/source/guides/single-vm.rst b/doc/source/guides/single-vm.rst
new file mode 100644
index 0000000..35efb14
--- /dev/null
+++ b/doc/source/guides/single-vm.rst
@@ -0,0 +1,106 @@
+`DevStack </>`__
+
+-  `Overview <../overview.html>`__
+-  `Changes <../changes.html>`__
+-  `FAQ <../faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+Running a Cloud in a 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
+launched in the cloud will be slow as they are running in QEMU
+(emulation), but their primary use is testing OpenStack development and
+operation. Speed not required.
+
+Prerequisites Cloud & Image
+---------------------------
+
+Virtual Machine
+~~~~~~~~~~~~~~~
+
+DevStack should run in any virtual machine running a supported Linux
+release. It will perform best with 2Gb or more of RAM.
+
+OpenStack Deployment & cloud-init
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If the cloud service has an image with ``cloud-init`` pre-installed, use
+it. You can get one from `Ubuntu's Daily
+Build <http://uec-images.ubuntu.com>`__ site if necessary. This will
+enable you to launch VMs with userdata that installs everything at boot
+time. The userdata script below will install and run DevStack with a
+minimal configuration. The use of ``cloud-init`` is outside the scope of
+this document, refer to the ``cloud-init`` docs for more information.
+
+If you are directly using a hypervisor like Xen, kvm or VirtualBox you
+can manually kick off the script below as a non-root user in a
+bare-bones server installation.
+
+Installation shake and bake
+---------------------------
+
+Launching With Cloud-Init
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This cloud config grabs the latest version of DevStack via git, creates
+a minimal ``local.conf`` file and kicks off ``stack.sh``. It should be
+passed as the user-data file when booting the VM.
+
+::
+
+    #cloud-config
+
+    users:
+      - default
+      - name: stack
+        lock_passwd: False
+        sudo: ["ALL=(ALL) NOPASSWD:ALL\nDefaults:stack !requiretty"]
+        shell: /bin/bash
+
+    write_files:
+      - content: |
+            #!/bin/sh
+            DEBIAN_FRONTEND=noninteractive sudo apt-get -qqy update || sudo yum update -qy
+            DEBIAN_FRONTEND=noninteractive sudo apt-get install -qqy git || sudo yum install -qy git
+            sudo chown stack:stack /home/stack
+            cd /home/stack
+            git clone https://git.openstack.org/openstack-dev/devstack
+            cd devstack
+            echo '[[local|localrc]]' > local.conf
+            echo ADMIN_PASSWORD=password >> local.conf
+            echo MYSQL_PASSWORD=password >> local.conf
+            echo RABBIT_PASSWORD=password >> local.conf
+            echo SERVICE_PASSWORD=password >> local.conf
+            echo SERVICE_TOKEN=tokentoken >> local.conf
+            ./stack.sh
+        path: /home/stack/start.sh
+        permissions: 0755
+
+    runcmd:
+      - su -l stack ./start.sh
+
+As DevStack will refuse to run as root, this configures ``cloud-init``
+to create a non-root user and run the ``start.sh`` script as that user.
+
+Launching By Hand
+~~~~~~~~~~~~~~~~~
+
+Using a hypervisor directly, launch the VM and either manually perform
+the steps in the embedded shell script above or copy it into the VM.
+
+Using OpenStack
+~~~~~~~~~~~~~~~
+
+At this point you should be able to access the dashboard. Launch VMs and
+if you give them floating IPs access those VMs from other machines on
+your network.
+
+One interesting use case is for developers working on a VM on their
+laptop. Once ``stack.sh`` has completed once, all of the pre-requisite
+packages are installed in the VM and the source trees checked out.
+Setting ``OFFLINE=True`` in ``local.conf`` enables ``stack.sh`` to run
+multiple times without an Internet connection. DevStack, making hacking
+at the lake possible since 2012!
diff --git a/doc/source/guides/usb-boot.rst b/doc/source/guides/usb-boot.rst
new file mode 100644
index 0000000..4f7a494
--- /dev/null
+++ b/doc/source/guides/usb-boot.rst
@@ -0,0 +1,57 @@
+`DevStack </>`__
+
+-  `Overview <../overview.html>`__
+-  `Changes <../changes.html>`__
+-  `FAQ <../faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+USB Boot: Undoable Stack Boot
+=============================
+
+Boot DevStack from a USB disk into a RAM disk.
+
+Prerequisites
+-------------
+
+Hardware
+~~~~~~~~
+
+This guide covers the creation of a bootable USB drive. Your computer
+BIOS must support booting from USB and You will want at least 3GB of
+RAM. You also will need a USB drive of at least 2GB.
+
+Software
+~~~~~~~~
+
+Ubuntu 11.10 (Oneiric Ocelot) is required on host to create images.
+
+Installation bit blasting
+-------------------------
+
+Set Up USB Drive
+~~~~~~~~~~~~~~~~
+
+-  Insert the USB drive into the computer. Make a note of the device
+   name, such as ``sdb``. Do not mount the device.
+-  Install the boot system:
+
+   ::
+
+       tools/build_usb_boot.sh /dev/sdb1
+
+   This calls tools/build\_ramdisk.sh to create a 2GB ramdisk containing
+   a complete development Oneiric OS plus the OpenStack code checkouts.
+   It then writes a syslinux boot sector to the specified device and
+   creates ``/syslinux``.
+
+-  If desired, you may now mount the device:
+
+   ::
+
+       mount /dev/sdb1 /mnt/tmp
+       # foo
+       umount /mnt/tmp
+
+Now `return <ramdisk.html>`__ to the RAM disk Guide to kick off your
+DevStack experience.
diff --git a/doc/source/index.rst b/doc/source/index.rst
new file mode 100644
index 0000000..6f7cab6
--- /dev/null
+++ b/doc/source/index.rst
@@ -0,0 +1,379 @@
+`DevStack </>`__
+
+-  `Overview <overview.rst>`__
+-  `Changes <changes.rst>`__
+-  `FAQ <faq.rst>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+.. toctree::
+   :glob:
+   :maxdepth: 2
+
+   *
+   guides/*
+   
+
+
+DevStack - an OpenStack Community Production
+============================================
+
+| A documented shell script to build complete OpenStack development environments.
+|  An OpenStack program maintained by the developer community.
+
+#. Setup a fresh supported Linux installation.
+#. Clone devstack from git.openstack.org.
+
+   ::
+
+       git clone https://git.openstack.org/openstack-dev/devstack
+
+#. Deploy your OpenStack Cloud
+
+   ::
+
+       cd devstack && ./stack.sh
+

+
+Quick Start This ain't your first rodeo
+---------------------------------------
+
+#. Select a Linux Distribution
+
+   Only Ubuntu 14.04 (Trusty), Fedora 20 and CentOS/RHEL 6.5 are
+   documented here. OpenStack also runs and is packaged on other flavors
+   of Linux such as OpenSUSE and Debian.
+
+#. Install Selected OS
+
+   In order to correctly install all the dependencies, we assume a
+   specific minimal version of the supported distributions to make it as
+   easy as possible. We recommend using a minimal install of Ubuntu or
+   Fedora server in a VM if this is your first time.
+
+#. Download DevStack
+
+   ::
+
+       git clone https://git.openstack.org/openstack-dev/devstack
+
+   The ``devstack`` repo contains a script that installs OpenStack and
+   templates for configuration files
+
+#. Configure
+
+   We recommend at least a `minimal
+   configuration <configuration.html>`__ be set up.
+
+#. Start the install
+
+   ::
+
+       cd devstack; ./stack.sh
+
+   It takes a few minutes, we recommend `reading the
+   script <stack.sh.html>`__ while it is building.
+
+Guides Walk through various setups used by stackers
+---------------------------------------------------
+
+OpenStack on VMs
+----------------
+
+Title
+
+Description
+
+Link
+
+Virtual Machine
+
+Run OpenStack in a 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.
+
+`Read » <guides/single-vm.html>`__
+
+1 Guide
+
+What is this?
+^^^^^^^^^^^^^
+
+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.
+
+OpenStack on Hardware
+---------------------
+
+Title
+
+Description
+
+Link
+
+All-In-One
+
+Run OpenStack on dedicated hardware to get real performance in your VMs.
+This can include a server-class machine or a laptop at home.
+
+`Read » <guides/single-machine.html>`__
+
+Multi-Node + VLANs
+
+Setup a multi-node cluster with dedicated VLANs for VMs & Management.
+
+`Read » <guides/multinode-lab.html>`__
+
+2 Guides
+
+What is this?
+^^^^^^^^^^^^^
+
+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.
+
+Documentation Help yourself to stack
+------------------------------------
+
+Overview
+--------
+
+`An overview of DevStack goals and priorities <overview.html>`__
+
+Configuration
+-------------
+
+`Configuring and customizing the stack <configuration.html>`__
+
+Plugins
+-------
+
+`Extending DevStack with new features <plugins.html>`__
+
+Recent Changes
+--------------
+
+`An incomplete summary of recent changes <changes.html>`__
+
+FAQ
+---
+
+`The DevStack FAQ <faq.html>`__
+
+Contributing
+------------
+
+`Pitching in to make DevStack a better place <contributing.html>`__
+
+Code A look at the bits that make it all go
+-------------------------------------------
+
+Scripts Generated documentation of DevStack scripts.
+----------------------------------------------------
+
++-------------------------------+----------------------------------------------+
+| 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>`__        |
++-------------------------------+----------------------------------------------+
+
+Configuration Setting the table
+-------------------------------
+
++--------------+--------------------------------+
+| 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 Support scripts
+---------------------
+
++-----------------------------+----------------------------------------------+
+| 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 Generated documentation of DevStack scripts.
+------------------------------------------------------
+
+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>`__
diff --git a/doc/source/local.conf.rst b/doc/source/local.conf.rst
new file mode 100644
index 0000000..e1de44c
--- /dev/null
+++ b/doc/source/local.conf.rst
@@ -0,0 +1,16 @@
+`DevStack </>`__
+
+-  `Overview <overview.html>`__
+-  `Changes <changes.html>`__
+-  `FAQ <faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+local.conf User settings
+------------------------
+
+``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
+of the file.
diff --git a/doc/source/localrc.rst b/doc/source/localrc.rst
new file mode 100644
index 0000000..487280b
--- /dev/null
+++ b/doc/source/localrc.rst
@@ -0,0 +1,16 @@
+`DevStack </>`__
+
+-  `Overview <overview.html>`__
+-  `Changes <changes.html>`__
+-  `FAQ <faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+localrc User settings
+---------------------
+
+``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
new file mode 100644
index 0000000..ce5765a
--- /dev/null
+++ b/doc/source/openrc.rst
@@ -0,0 +1,83 @@
+`DevStack </>`__
+
+-  `Overview <overview.html>`__
+-  `Changes <changes.html>`__
+-  `FAQ <faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+openrc User authentication settings
+-----------------------------------
+
+``openrc`` configures login credentials suitable for use with the
+OpenStack command-line tools. ``openrc`` sources ``stackrc`` at the
+beginning (which in turn sources the ``localrc`` setion of
+``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_TENANT_NAME=demo
+
+OS\_USERNAME
+    In addition to the owning entity (tenant), Nova stores the entity
+    performing the action as the *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.
+
+    ::
+
+        OS_PASSWORD=secrete
+
+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
+    ``localrc`` section.
+
+    ::
+
+        HOST_IP=127.0.0.1
+        SERVICE_HOST=$HOST_IP
+
+OS\_AUTH\_URL
+    Authenticating against an OpenStack cloud using Keystone returns a
+    *Token* and *Service Catalog*. The catalog contains the endpoints
+    for all services the user/tenant has access to - including Nova,
+    Glance, Keystone and Swift.
+
+    ::
+
+        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.
+
+    ::
+
+        # export KEYSTONECLIENT_DEBUG=1
+        # export NOVACLIENT_DEBUG=1
diff --git a/doc/source/overview.rst b/doc/source/overview.rst
new file mode 100644
index 0000000..cedf941
--- /dev/null
+++ b/doc/source/overview.rst
@@ -0,0 +1,99 @@
+`DevStack </>`__
+
+-  `Overview <overview.html>`__
+-  `Changes <changes.html>`__
+-  `FAQ <faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+Overview DevStack from a cloud-height view
+------------------------------------------
+
+DevStack has evolved to support a large number of configuration options
+and alternative platforms and support services. That evolution has grown
+well beyond what was originally intended and the majority of
+configuration combinations are rarely, if ever, tested. DevStack is not
+a general OpenStack installer and was never meant to be everything to
+everyone..
+
+Below is a list of what is specifically is supported (read that as
+"tested") going forward.
+
+Supported Components
+--------------------
+
+Base OS
+~~~~~~~
+
+*The OpenStack Technical Committee (TC) has defined the current CI
+strategy to include the latest Ubuntu release and the latest RHEL
+release (for Python 2.6 testing).*
+
+-  Ubuntu: current LTS release plus current development release
+-  Fedora: current release plus previous release
+-  RHEL: current major release
+-  Other OS platforms may continue to be included but the maintenance of
+   those platforms shall not be assumed simply due to their presence.
+   Having a listed point-of-contact for each additional OS will greatly
+   increase its chance of being well-maintained.
+-  Patches for Ubuntu and/or Fedora will not be held up due to
+   side-effects on other OS platforms.
+
+Databases
+~~~~~~~~~
+
+*As packaged by the host OS*
+
+-  MySQL
+-  PostgreSQL
+
+Queues
+~~~~~~
+
+*As packaged by the host OS*
+
+-  Rabbit
+-  Qpid
+
+Web Server
+~~~~~~~~~~
+
+*As packaged by the host OS*
+
+-  Apache
+
+OpenStack Network
+~~~~~~~~~~~~~~~~~
+
+*Default to Nova Network, optionally use Neutron*
+
+-  Nova Network: FlatDHCP
+-  Neutron: A basic configuration approximating the original FlatDHCP
+   mode using linuxbridge or OpenVSwitch.
+
+Services
+~~~~~~~~
+
+The default services configured by DevStack are Identity (Keystone),
+Object Storage (Swift), Image Storage (Glance), Block Storage (Cinder),
+Compute (Nova), Network (Nova), Dashboard (Horizon), Orchestration
+(Heat)
+
+Additional services not included directly in DevStack can be tied in to
+``stack.sh`` using the `plugin mechanism <plugins.html>`__ to call
+scripts that perform the configuration and startup of the service.
+
+Node Configurations
+~~~~~~~~~~~~~~~~~~~
+
+-  single node
+-  multi-node is not tested regularly by the core team, and even then
+   only minimal configurations are reviewed
+
+Exercises
+~~~~~~~~~
+
+The DevStack exercise scripts are no longer used as integration and gate
+testing as that job has transitioned to Tempest. They are still
+maintained as a demonstrations of using OpenStack from the command line
+and for quick operational testing.
diff --git a/doc/source/plugins.rst b/doc/source/plugins.rst
new file mode 100644
index 0000000..0747b59
--- /dev/null
+++ b/doc/source/plugins.rst
@@ -0,0 +1,119 @@
+`DevStack </>`__
+
+-  `Overview <overview.html>`__
+-  `Changes <changes.html>`__
+-  `FAQ <faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+Plugins Add stuff
+-----------------
+
+DevStack has a couple of plugin mechanisms to allow easily adding
+support for additional projects and features.
+
+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
+``clean.sh``. A number of the higher-layer projects are implemented in
+DevStack using this mechanism.
+
+The script in ``extras.d`` is expected to be mostly a dispatcher to
+functions in a ``lib/*`` script. The scripts are named with a
+zero-padded two digits sequence number prefix to control the order that
+the scripts are called, and with a suffix of ``.sh``. DevSack reserves
+for itself the sequence numbers 00 through 09 and 90 through 99.
+
+Below is a template that shows handlers for the possible command-line
+arguments:
+
+::
+
+    # template.sh - DevStack extras.d dispatch script template
+
+    # check for service enabled
+    if is_service_enabled template; then
+
+        if [[ "$1" == "source" ]]; then
+            # Initial source of lib script
+            source $TOP_DIR/lib/template
+        fi
+
+        if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then
+            # Set up system services
+            echo_summary "Configuring system services Template"
+            install_package cowsay
+
+        elif [[ "$1" == "stack" && "$2" == "install" ]]; then
+            # Perform installation of service source
+            echo_summary "Installing Template"
+            install_template
+
+        elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
+            # Configure after the other layer 1 and 2 services have been configured
+            echo_summary "Configuring Template"
+            configure_template
+
+        elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
+            # Initialize and start the template service
+            echo_summary "Initializing Template"
+            ##init_template
+        fi
+
+        if [[ "$1" == "unstack" ]]; then
+            # Shut down template services
+            # no-op
+            :
+        fi
+
+        if [[ "$1" == "clean" ]]; then
+            # Remove state and transient data
+            # Remember clean.sh first calls unstack.sh
+            # no-op
+            :
+        fi
+    fi
+
+The arguments are:
+
+-  **source** - Called by each script that utilizes ``extras.d`` hooks;
+   this replaces directly sourcing the ``lib/*`` script.
+-  **stack** - Called by ``stack.sh`` three times for different phases
+   of its run:
+
+   -  **pre-install** - Called after system (OS) setup is complete and
+      before project source is installed.
+   -  **install** - Called after the layer 1 and 2 projects source and
+      their dependencies have been installed.
+   -  **post-config** - Called after the layer 1 and 2 services have
+      been configured. All configuration files for enabled services
+      should exist at this point.
+   -  **extra** - Called near the end after layer 1 and 2 services have
+      been started. This is the existing hook and has not otherwise
+      changed.
+
+-  **unstack** - Called by ``unstack.sh`` before other services are shut
+   down.
+-  **clean** - Called by ``clean.sh`` before other services are cleaned,
+   but after ``unstack.sh`` has been called.
+
+Hypervisor
+~~~~~~~~~~
+
+Hypervisor plugins are fairly new and condense most hypervisor
+configuration into one place.
+
+The initial plugin implemented was for Docker support and is a useful
+template for the required support. Plugins are placed in
+``lib/nova_plugins`` and named ``hypervisor-<name>`` where ``<name>`` is
+the value of ``VIRT_DRIVER``. Plugins must define the following
+functions:
+
+-  ``install_nova_hypervisor`` - install any external requirements
+-  ``configure_nova_hypervisor`` - make configuration changes, including
+   those to other services
+-  ``start_nova_hypervisor`` - start any external services
+-  ``stop_nova_hypervisor`` - stop any external services
+-  ``cleanup_nova_hypervisor`` - remove transient data and cache
diff --git a/doc/source/stackrc.rst b/doc/source/stackrc.rst
new file mode 100644
index 0000000..5d9d221
--- /dev/null
+++ b/doc/source/stackrc.rst
@@ -0,0 +1,73 @@
+`DevStack </>`__
+
+-  `Overview <overview.html>`__
+-  `Changes <changes.html>`__
+-  `FAQ <faq.html>`__
+-  `git.openstack.org <https://git.openstack.org/cgit/openstack-dev/devstack>`__
+-  `Gerrit <https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z>`__
+
+stackrc DevStack settings
+-------------------------
+
+``stackrc`` is the primary configuration file for DevStack. It contains
+all of the settings that control the services started and the
+repositories used to download the source for those services. ``stackrc``
+sources the ``localrc`` section of ``local.conf`` to perform the default
+overrides.
+
+DATABASE\_TYPE
+    Select the database backend to use. The default is ``mysql``,
+    ``postgresql`` is also available.
+ENABLED\_SERVICES
+    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, 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
+
+    Other services that are not enabled by default can be enabled in
+    ``localrc``. For example, to add Swift, use the following service
+    names:
+
+    ::
+
+        enable_service s-proxy s-object s-container s-account
+
+    A service can similarly be disabled:
+
+    ::
+
+        disable_service horizon
+
+Service Repos
+    The Git repositories used to check out the source for each service
+    are controlled by a pair of variables set for each service.
+    ``*_REPO`` points to the repository and ``*_BRANCH`` selects which
+    branch to check out. These may be overridden in ``local.conf`` to
+    pull source from a different repo for testing, such as a Gerrit
+    branch proposal. ``GIT_BASE`` points to the primary repository
+    server.
+
+    ::
+
+        NOVA_REPO=$GIT_BASE/openstack/nova.git
+        NOVA_BRANCH=master
+
+    To pull a branch directly from Gerrit, get the repo and branch from
+    the Gerrit review page:
+
+    ::
+
+        git fetch https://review.openstack.org/p/openstack/nova refs/changes/50/5050/1 && git checkout FETCH_HEAD
+
+    The repo is the stanza following ``fetch`` and the branch is the
+    stanza following that:
+
+    ::
+
+        NOVA_REPO=https://review.openstack.org/p/openstack/nova
+        NOVA_BRANCH=refs/changes/50/5050/1
diff --git a/docs/source/assets/images/quickstart.png b/docs/source/assets/images/quickstart.png
deleted file mode 100644
index 5400a6f..0000000
--- a/docs/source/assets/images/quickstart.png
+++ /dev/null
Binary files differ
diff --git a/docs/source/changes.html b/docs/source/changes.html
deleted file mode 100644
index 966b0c9..0000000
--- a/docs/source/changes.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>DevStack - Recent Changes</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="assets/css/bootstrap.css" rel="stylesheet">
-    <link href="assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-    
-    <!-- Le javascripts -->
-    <script src="assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="overview.html">Overview</a></li>
-            <li><a href="changes.html">Changes</a></li>
-            <li><a href="faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container" id="home">
-      
-      <section id="faq" class="span12">
-
-        <div class='row pull-left'>
-          <h2>Recent Changes <small>What's been happening?</small></h2>
-          <p>These are the commits to DevStack for the last six months.  For the complete list see <a href="https://review.openstack.org/#/q/status:merged+project:openstack-dev/devstack,n,z">the DevStack project in Gerrit</a>.</p>
-
-          <ul class='pull-left'>
-            <!--
-              This list is generated by:
-              git log --pretty=format:'            <li>%s - <em>Commit <a href="https://review.openstack.org/#q,%h,n,z">%h</a> %cd</em></li>' --date=short --since 2014-01-01 | grep -v Merge
-            -->
-            <!-- Begin git log %GIT_LOG% -->
-            <!-- End git log -->
-          </ul>
-        </div>        
-
-      </section>
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-  </body>
-</html>
diff --git a/docs/source/configuration.html b/docs/source/configuration.html
deleted file mode 100644
index 044bafc..0000000
--- a/docs/source/configuration.html
+++ /dev/null
@@ -1,237 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>DevStack - Overview</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="assets/css/bootstrap.css" rel="stylesheet">
-    <link href="assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-
-    <!-- Le javascripts -->
-    <script src="assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="overview.html">Overview</a></li>
-            <li><a href="changes.html">Changes</a></li>
-            <li><a href="faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container" id="home">
-
-      <section id="overview" class="span12">
-
-        <div class='row pull-left'>
-          <h2>Configuration <small>Making it go my way</small></h2>
-          <p>DevStack has always tried to be mostly-functional with a minimal amount of configuration.  The number of options has ballooned as projects add features, new projects added and more combinations need to be tested.  Historically DevStack obtained all local configuration and customizations from a <code>localrc</code> file.  The number of configuration variables that are simply passed-through to the individual project configuration files is also increasing.  The old mechanism for this (<code>EXTRAS_OPTS</code> and friends) required specific code for each file and did not scale well.</p>
-          <p>In Oct 2013 a new configuration method was introduced (in <a href="https://review.openstack.org/#/c/46768/">review 46768</a>) to hopefully simplify this process and meet the following goals:</p>
-          <ul>
-            <li>contain all non-default local configuration in a single file</li>
-            <li>be backward-compatible with <code>localrc</code> to smooth the transition process</li>
-            <li>allow settings in arbitrary configuration files to be changed</li>
-          </ul>
-
-          <h3>local.conf</h3>
-          <p>The new configuration file is <code>local.conf</code> and resides in the root DevStack directory like the old <code>localrc</code> file.  It is a modified INI format file that introduces a meta-section header to carry additional information regarding the configuration files to be changed.</p>
-
-          <p>The new header is similar to a normal INI section header but with double brackets (<code>[[ ... ]]</code>) and two internal fields separated by a pipe (<code>|</code>):</p>
-<pre>[[ &lt;phase&gt; | &lt;config-file-name&gt; ]]
-</pre>
-
-          <p>where <code>&lt;phase&gt;</code> is one of a set of phase names defined by <code>stack.sh</code> and <code>&lt;config-file-name&gt;</code> is the configuration filename.  The filename is eval'ed in the <code>stack.sh</code> context so all environment variables are available and may be used.  Using the project config file variables in the header is strongly suggested (see the <code>NOVA_CONF</code> example below).  If the path of the config file does not exist it is skipped.</p>
-
-          <p>The defined phases are:</p>
-          <ul>
-            <li><strong>local</strong> - extracts <code>localrc</code> from <code>local.conf</code> before <code>stackrc</code> is sourced</li>
-            <li><strong>pre-install</strong> - runs after the system packages are installed but before any of the source repositories are installed</li>
-            <li><strong>install</strong> - runs immediately after the repo installations are complete</li>
-            <li><strong>post-config</strong> - runs after the layer 2 services are configured and before they are started</li>
-            <li><strong>extra</strong> - runs after services are started and before any files in <code>extra.d</code> are executed
-          </ul>
-
-          <p>The file is processed strictly in sequence; meta-sections may be specified more than once but if any settings are duplicated the last to appear in the file will be used.</p>
-<pre>[[post-config|$NOVA_CONF]]
-[DEFAULT]
-use_syslog = True
-
-[osapi_v3]
-enabled = False
-</pre>
-
-          <p>A specific meta-section <code>local|localrc</code> is used to
-          provide a default <code>localrc</code> file (actually
-          <code>.localrc.auto</code>).  This allows all custom settings
-          for DevStack to be contained in a single file.  If <code>localrc</code>
-          exists it will be used instead to preserve backward-compatibility.  More
-          details on the <a href="localrc.html">contents of localrc</a> are available.</p>
-<pre>[[local|localrc]]
-FIXED_RANGE=10.254.1.0/24
-ADMIN_PASSWORD=speciale
-LOGFILE=$DEST/logs/stack.sh.log
-</pre>
-
-          <p>Note that <code>Q_PLUGIN_CONF_FILE</code> is unique in that it is assumed to <em>NOT</em> start with a <code>/</code> (slash) character.  A slash will need to be added:</p>
-<pre>[[post-config|/$Q_PLUGIN_CONF_FILE]]
-</pre>
-
-          <p>Also note that the <code>localrc</code> section is sourced as a shell script fragment amd <string>MUST</strong> conform to the shell requirements, specifically no whitespace around <code>=</code> (equals).</p>
-
-          <a id="minimal"></a>
-          <h3>Minimal Configuration</h3>
-          <p>While <code>stack.sh</code> is happy to run without a <code>localrc</code> section in <code>local.conf</code>, devlife is better when there are a few minimal variables set. This is an example of a minimal configuration that touches the values that most often need to be set.</p>
-          <ul>
-            <li>no logging</li>
-            <li>pre-set the passwords to prevent interactive prompts</li>
-            <li>move network ranges away from the local network (<code>FIXED_RANGE</code> and <code>FLOATING_RANGE</code>, commented out below)</li>
-            <li>set the host IP if detection is unreliable (<code>HOST_IP</code>, commented out below)</li>
-          </ul>
-          <pre>[[local|localrc]]
-ADMIN_PASSWORD=secrete
-DATABASE_PASSWORD=$ADMIN_PASSWORD
-RABBIT_PASSWORD=$ADMIN_PASSWORD
-SERVICE_PASSWORD=$ADMIN_PASSWORD
-SERVICE_TOKEN=a682f596-76f3-11e3-b3b2-e716f9080d50
-#FIXED_RANGE=172.31.1.0/24
-#FLOATING_RANGE=192.168.20.0/25
-#HOST_IP=10.3.4.5</pre>
-          <p>If the <code>*_PASSWORD</code> variables are not set here you will be prompted to enter values for them by <code>stack.sh</code>.</p>
-          <p>The network ranges must not overlap with any networks in use on the host.  Overlap is not uncommon as RFC-1918 'private' ranges are commonly used for both the local networking and Nova's fixed and floating ranges.</p>
-          <p><code>HOST_IP</code> is normally detected on the first run of <code>stack.sh</code> but often is indeterminate on later runs due to the IP being moved from an Ethernet integace to a bridge on the host.  Setting it here also makes it available for <code>openrc</code> to set <code>OS_AUTH_URL</code>.  <code>HOST_IP</code> is not set by default.</p>
-
-          <h3>Common Configuration Variables</h3>
-          <dl>
-            <dt>Set DevStack install directory</dt>
-            <dd><em>Default: <code>DEST=/opt/stack</code></em><br />
-            The DevStack install directory is set by the <code>DEST</code> variable. By setting it early in the <code>localrc</code> section you can reference it in later variables.  It can be useful to set it even though it is not changed from the default value.
-            <pre>DEST=/opt/stack</pre></dd>
-
-            <dt>stack.sh logging</dt>
-            <dd><em>Defaults: <code>LOGFILE="" LOGDAYS=7 LOG_COLOR=True</code></em><br />
-            By default <code>stack.sh</code> output is only written to the console where is runs.  It can be sent to a file in addition to the console by setting <code>LOGFILE</code> to the fully-qualified name of the destination log file.  A timestamp will be appended to the given filename for each run of <code>stack.sh</code>.
-            <pre>LOGFILE=$DEST/logs/stack.sh.log</pre>
-            Old log files are cleaned automatically if <code>LOGDAYS</code> is set to the number of days of old log files to keep.
-            <pre>LOGDAYS=1</pre>
-            The some of the project logs (Nova, Cinder, etc) will be colorized by default (if <code>SYSLOG</code> is not set below); this can be turned off by setting <code>LOG_COLOR</code> False.
-            <pre>LOG_COLOR=False</pre></dd>
-
-            <dt>Screen logging</dt>
-            <dd><em>Default: <code>SCREEN_LOGDIR=""</code></em><br />
-            By default DevStack runs the OpenStack services using <code>screen</code> which is useful for watching log and debug output.  However, in automated testing the interactive <code>screen</code> sessions may not be available after the fact; setting <code>SCREEN_LOGDIR</code> enables logging of the <code>screen</code> sessions in the specified diretory.  There will be one file per <code>screen</code> session named for the session name and a timestamp.  
-            <pre>SCREEN_LOGDIR=$DEST/logs/screen</pre>
-            <em>Note the use of <code>DEST</code> to locate the main install directory; this is why we suggest setting it in <code>local.conf</code>.</em></dd><br />
-
-            <dt>One syslog to bind them all</dt>
-            <dd><em>Default: <code>SYSLOG=False SYSLOG_HOST=$HOST_IP SYSLOG_PORT=516</code></em><br />
-            Logging all services to a single syslog can be convenient.  Enable syslogging by setting <code>SYSLOG</code> to <code>True</code>. If the destination log host is not localhost <code>SYSLOG_HOST</code> and <code>SYSLOG_PORT</code> can be used to direct the message stream to the log host.
-            <pre>SYSLOG=True
-SYSLOG_HOST=$HOST_IP
-SYSLOG_PORT=516</pre></dd>
-
-            <dt>A clean install every time</dt>
-            <dd><em>Default: <code>RECLONE=""</code></em><br />
-            By default <code>stack.sh</code> only clones the project repos if they do not exist in <code>$DEST</code>.  <code>stack.sh</code> will freshen each repo on each run if <code>RECLONE</code> is set to <code>yes</code>. This avoids having to manually remove repos in order to get the current branch from <code>$GIT_BASE</code>.
-            <pre>RECLONE=yes</code></dd>
-
-            <dt>Swift</dt>
-            <dd><em>Default: <code>SWIFT_HASH="" SWIFT_REPLICAS=1 SWIFT_DATA_DIR=$DEST/data/swift</code></em><br />
-            Swift is now used as the back-end for the S3-like object store.  When enabled Nova's objectstore (n-obj in <code>ENABLED_SERVICES</code>) is automatically disabled. Enable Swift by adding it services to <code>ENABLED_SERVICES</code>:
-            <pre>enable_service s-proxy s-object s-container s-account</pre>
-            Setting Swift's hash value is required and you will be prompted for it if Swift is enabled so just set it to something already:
-            <pre>SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5</pre>
-            For development purposes the default number of replicas is set to <code>1</code> to reduce the overhead required.  To better simulate a production deployment set this to <code>3</code> or more.
-            <pre>SWIFT_REPLICAS=3</pre>
-            The data for Swift is stored in the source tree by default
-            (in <code>$DEST/swift/data</code>) and can be moved by setting
-            <code>SWIFT_DATA_DIR</code>.  The specified directory will be created if it does not exist.
-            <pre>SWIFT_DATA_DIR=$DEST/data/swift</pre>
-            <em>Note: Previously just enabling <code>swift</code> was sufficient to start the Swift services.  That does not provide proper service granularity, particularly in multi-host configurations, and is considered deprecated.  Some service combination tests now check for specific Swift services and the old blanket acceptance will longer work correctly.</em>
-            </dd>
-
-            <dt>Service Catalog Backend</dt>
-            <dd><em>Default: <code>KEYSTONE_CATALOG_BACKEND=sql</code></em><br />
-            DevStack uses Keystone's <code>sql</code> service catalog backend.  An alternate <code>template</code> backend is also available.  However, it does not support the <code>service-*</code> and <code>endpoint-*</code> commands of the <code>keystone</code> CLI.  To
-            do so requires the <code>sql</code> backend be enabled:
-            <pre>KEYSTONE_CATALOG_BACKEND=template</pre>
-            DevStack's default configuration in <code>sql</code> mode is set in
-            <code>files/keystone_data.sh</code></dd>
-
-            <dt>Cinder</dt>
-            <dd><em>Default: <code>VOLUME_GROUP="stack-volumes" VOLUME_NAME_PREFIX="volume-" VOLUME_BACKING_FILE_SIZE=10250M</code></em><br />
-            The logical volume group used to hold the Cinder-managed volumes is set by <code>VOLUME_GROUP</code>, the logical volume name prefix is set with <code>VOLUME_NAME_PREFIX</code> and the size of the volume backing file is set with <code>VOLUME_BACKING_FILE_SIZE</code>.
-            <pre>VOLUME_GROUP="stack-volumes"
-VOLUME_NAME_PREFIX="volume-"
-VOLUME_BACKING_FILE_SIZE=10250M</pre></dd>
-
-            <dt>Multi-host DevStack</dt>
-            <dd><em>Default: <code>MULTI_HOST=False</code></em><br />
-            Running DevStack with multiple hosts requires a custom <code>local.conf</code> section for each host.  The master is the same as a single host installation with <code>MULTI_HOST=True</code>.  The slaves have fewer services enabled and a couple of host variables pointing to the master.  
-            <br /><br />
-            <strong>Master</strong>
-            <pre>MULTI_HOST=True</pre>
-
-            <strong>Slave</strong>
-            <pre>MYSQL_HOST=w.x.y.z
-RABBIT_HOST=w.x.y.z
-GLANCE_HOSTPORT=w.x.y.z:9292
-ENABLED_SERVICES=n-vol,n-cpu,n-net,n-api</pre></dd>
-
-            <dt>API rate limits</dt>
-            <dd><em>Default: <code>API_RATE_LIMIT=True</code><br />
-            Integration tests such as Tempest will likely run afoul of the default rate limits configured for Nova.  Turn off rate limiting during testing by setting <code>API_RATE_LIMIT=False</code>.
-            <pre>API_RATE_LIMIT=False</pre></dd>
-          </dl>
-
-          <h3>Examples</h3>
-          <ul>
-            <li>Eliminate a Cinder pass-through (<code>CINDER_PERIODIC_INTERVAL</code>):
-<pre>[[post-config|$CINDER_CONF]]
-[DEFAULT]
-periodic_interval = 60
-</pre></li>
-            <li>Sample <code>local.conf</code> with screen logging enabled:
-<pre>[[local|localrc]]
-FIXED_RANGE=10.254.1.0/24
-NETWORK_GATEWAY=10.254.1.1
-LOGDAYS=1
-LOGFILE=$DEST/logs/stack.sh.log
-SCREEN_LOGDIR=$DEST/logs/screen
-ADMIN_PASSWORD=quiet
-DATABASE_PASSWORD=$ADMIN_PASSWORD
-RABBIT_PASSWORD=$ADMIN_PASSWORD
-SERVICE_PASSWORD=$ADMIN_PASSWORD
-SERVICE_TOKEN=a682f596-76f3-11e3-b3b2-e716f9080d50</pre></li>
-          </ul>
-
-      </section>
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-  </body>
-</html>
diff --git a/docs/source/contributing.html b/docs/source/contributing.html
deleted file mode 100644
index f3d4b5a..0000000
--- a/docs/source/contributing.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>DevStack - Overview</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="assets/css/bootstrap.css" rel="stylesheet">
-    <link href="assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-
-    <!-- Le javascripts -->
-    <script src="assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="overview.html">Overview</a></li>
-            <li><a href="changes.html">Changes</a></li>
-            <li><a href="faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container" id="home">
-
-      <section id="overview" class="span12">
-
-        <div class='row pull-left'>
-          <h2>Contributing <small>Help us help you</small></h2>
-          <p>DevStack uses the standard OpenStack contribution process as outlined in <a href="https://wiki.openstack.org/wiki/How_To_Contribute">the OpenStack wiki 'How To Contribute'</a>.  This means that you will need to meet the requirements of the Contribututors License Agreement (CLA).  If you have already done that for another OpenStack project you are good to go.</p>
-
-          <h3>Things To Know</h3>
-
-          <br /><strong>Where Things Are</strong>
-          <p>The official DevStack repository is located at <code>git://github.com/openstack-dev/devstack.git</code> and <code>git://git.openstack.org/openstack-dev/devstack.git</code>, both mirrors of the official repo maintained by Gerrit.</p>
-          <p>The <a href="https://blueprints.launchpad.net/devstack">blueprint</a> and <a href="https://bugs.launchpad.net/devstack">bug trackers</a> are on Launchpad.  It should be noted that DevStack generally does not use these as strongly as other projects, but we're trying to change that.</p>
-          <p>The <a href="https://review.openstack.org/#/q/project:openstack-dev/devstack,n,z">Gerrit review queue</a> is, however, used for all commits except for the text of this website.  That should also change in the near future.</p>
-
-          <br /><strong>HACKING.rst</strong>
-          <p>Like most OpenStack projects, DevStack includes a <code>HACKING.rst</code> file that describes the layout, style and conventions of the project.  Because <code>HACKING.rst</code> is in the main DevStack repo it is considered authoritative.  Much of the content on this page is taken from there.</p>
-
-          <br /><strong>bashate Formatting</strong>
-          <p>Around the time of the OpenStack Havana release we added a tool to do style checking in DevStack similar to what pep8/flake8 do for Python projects.  It is still _very_ simplistic, focusing mostly on stray whitespace to help prevent -1 on reviews that are otherwise acceptable.  Oddly enough it is called <code>bashate</code>.  It will be expanded to enforce some of the documentation rules in comments that are used in formatting the script pages for devstack.org and possibly even simple code formatting.  Run it on the entire project with <code>./run_tests.sh</code>.</p>
-
-          <h3>Code</h3>
-
-          <br /><strong>Repo Layout</strong>
-          <p>The DevStack repo generally keeps all of the primary scripts at the root level.</p>
-          <p><code>docs</code> - Contains the source for this website.  It is built using <code>tools/build_docs.sh</code>.</p>
-          <p><code>exercises</code> - Contains the test scripts used to validate and demonstrate some OpenStack functions.  These scripts know how to exit early or skip services that are not enabled.</p>
-          <p><code>extras.d</code> - Contains the dispatch scripts called by the hooks in <code>stack.sh</code>, <code>unstack.sh</code> and <code>clean.sh</code>.  See <a href="plugins.html">the plugins docs</a> for more information.</p>
-          <p><code>files</code> - Contains a variety of otherwise lost files used in configuring and operating DevStack.  This includes templates for configuration files and the system dependency information.  This is also where image files are downloaded and expanded if necessary.</p>
-          <p><code>lib</code> - Contains the sub-scripts specific to each project.  This is where the work of managing a project's services is located.  Each top-level project (Keystone, Nova, etc) has a file here.  Additionally there are some for system services and project plugins.</p>
-          <p><code>samples</code> - Contains a sample of the local files not included in the DevStack repo.</p>
-          <p><code>tests</code> - the DevStack test suite is rather sparse, mostly consisting of test of specific fragile functions in the <code>functions</code> file.</p>
-          <p><code>tools</code> - Contains a collection of stand-alone scripts, some of which have aged a bit (does anyone still do ramdisk installs?).  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.</p>
-          
-
-
-      </section>
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2013 &mdash; An <a href="https://wiki.openstack.org/wiki/Programs">OpenStack program</a> created by <a href="http://www.rackspace.com/cloud/private_edition/">Rackspace Cloud Builders</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-  </body>
-</html>
diff --git a/docs/source/eucarc.html b/docs/source/eucarc.html
deleted file mode 100644
index df52972..0000000
--- a/docs/source/eucarc.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>DevStack - eucarc</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="assets/css/bootstrap.css" rel="stylesheet">
-    <link href="assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-    
-    <!-- Le javascripts -->
-    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="overview.html">Overview</a></li>
-            <li><a href="changes.html">Changes</a></li>
-            <li><a href="faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container">
-
-      <section class="span12">
-        <div class="page-header">
-          <h2>eucarc <small>EC2 settings</small></h2>
-          <p><code>eucarc</code> creates EC2 credentials for the current user as
-            defined by <code>OS_TENANT_NAME:OS_USERNAME</code>.
-            <code>eucarc</code> sources <code>openrc</code> at the beginning
-            (which in turn sources <code>stackrc</code> and <code>localrc</code>)
-            in order to set credentials to create EC2 credentials in Keystone.
-        </div>
-        <dl>
-
-          <dt>EC2_URL</dt>
-          <dd>Set the EC2 url for euca2ools.  The endpoint is extracted from the
-            service catalog for <code>OS_TENANT_NAME:OS_USERNAME</code>.
-            <pre>EC2_URL=$(keystone catalog --service ec2 | awk '/ publicURL / { print $4 }')</pre></dd>
-
-          <dt>S3_URL</dt>
-          <dd>Set the S3 endpoint for euca2ools.  The endpoint is extracted from the
-            service catalog for <code>OS_TENANT_NAME:OS_USERNAME</code>.
-            <pre>export S3_URL=$(keystone catalog --service s3 | awk '/ publicURL / { print $4 }')</pre></dd>
-
-          <dt>EC2_ACCESS_KEY, EC2_SECRET_KEY</dt>
-          <dd>Create EC2 credentials for the current tenant:user in Keystone.
-            <pre>CREDS=$(keystone ec2-credentials-create)
-export EC2_ACCESS_KEY=$(echo "$CREDS" | awk '/ access / { print $4 }')
-export EC2_SECRET_KEY=$(echo "$CREDS" | awk '/ secret / { print $4 }')</pre></dd>
-
-          <dt>Certificates for Bundling</dt>
-          <dd>Euca2ools requires certificate files to enable bundle uploading.
-            The exercise script <code>exercises/bundle.sh</code> demonstrated
-            retrieving certificates using the Nova CLI.
-            <pre>EC2_PRIVATE_KEY=pk.pem
-EC2_CERT=cert.pem
-NOVA_CERT=cacert.pem
-EUCALYPTUS_CERT=${NOVA_CERT}</pre></dd>
-
-        </dl>
-      </section
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2013 &mdash; An
-        <a href="https://wiki.openstack.org/wiki/Programs">OpenStack program</a>
-        created by <a href="http://www.rackspace.com/cloud/private_edition/">Rackspace Cloud Builders</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-
-  </body>
-</html>
diff --git a/docs/source/exerciserc.html b/docs/source/exerciserc.html
deleted file mode 100644
index 7e4dd54..0000000
--- a/docs/source/exerciserc.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>DevStack - exerciserc</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="assets/css/bootstrap.css" rel="stylesheet">
-    <link href="assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-    
-    <!-- Le javascripts -->
-    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="overview.html">Overview</a></li>
-            <li><a href="changes.html">Changes</a></li>
-            <li><a href="faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container">
-
-      <section class="span12">
-        <div class="page-header">
-          <h2>exerciserc <small>Exercise settings</small></h2>
-          <p><code>exerciserc</code> is used to configure settings for the
-          exercise scripts.  The values shown below are the default values.
-          Thse can all be overridden by setting them in the <code>localrc</code>
-          section.</p>
-        </div>
-        <dl>
-
-          <dt>ACTIVE_TIMEOUT</dt>
-          <dd>Max time to wait while vm goes from build to active state
-            <pre>ACTIVE_TIMEOUT==30</pre></dd>
-
-          <dt>ASSOCIATE_TIMEOUT</dt>
-          <dd>Max time to wait for proper IP association and dis-association.
-            <pre>ASSOCIATE_TIMEOUT=15</pre></dd>
-
-          <dt>BOOT_TIMEOUT</dt>
-          <dd>Max time till the vm is bootable
-            <pre>BOOT_TIMEOUT=30</pre></dd>
-
-          <dt>RUNNING_TIMEOUT</dt>
-          <dd>Max time from run instance command until it is running
-            <pre>RUNNING_TIMEOUT=$(($BOOT_TIMEOUT + $ACTIVE_TIMEOUT))</pre></dd>
-
-          <dt>TERMINATE_TIMEOUT</dt>
-          <dd>Max time to wait for a vm to terminate
-            <pre>TERMINATE_TIMEOUT=30</pre></dd>
-
-        </dl>
-      </section
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2013 &mdash; An
-        <a href="https://wiki.openstack.org/wiki/Programs">OpenStack program</a>
-        created by <a href="http://www.rackspace.com/cloud/private_edition/">Rackspace Cloud Builders</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-
-  </body>
-</html>
diff --git a/docs/source/faq.html b/docs/source/faq.html
deleted file mode 100644
index 2c74a66..0000000
--- a/docs/source/faq.html
+++ /dev/null
@@ -1,169 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>DevStack - Frequently Asked Questions</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="assets/css/bootstrap.css" rel="stylesheet">
-    <link href="assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-
-    <!-- Le javascripts -->
-    <script src="assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="overview.html">Overview</a></li>
-            <li><a href="changes.html">Changes</a></li>
-            <li><a href="faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container" id="home">
-
-      <section id="faq" class="span12">
-
-        <div class='row pull-left'>
-          <h2>FAQ: Using DevStack <small>Making to behave</small></h2>
-
-          <ul>
-            <li><a href="#general">General Questions</a></li>
-            <li><a href="#ops_conf">Operation and Configuration</a></li>
-            <li><a href="#misc">Miscellaneous</a></li>
-          </ul>
-
-          <h3><a name="general">General Questions</a></h3>
-
-          <dl class='pull-left'>
-            <dt>Q: Can I use DevStack for production?</dt>
-            <dd>A: No.  We mean it.  Really.  DevStack makes some implementation choices that are not appropriate for production deployments.  We warned you!</dd>
-
-            <dt>Q: Then why selinux in enforcing mode?</dt>
-            <dd>A: That is the default on current Fedora and RHEL releases.  DevStack has (rightly so) a bad reputation for its security practices; it has always been meant as a development tool first and system integration later.  This is changing as the security issues around OpenStack's use of root (for example) have been tightened and developers need to be better equipped to work in these environments.  <code>stack.sh</code>'s use of root is primarily to support the activities that would be handled by packaging in "real" deployments.  To remove additional protections that will be desired/required in production would be a step backward.</dd>
-
-            <dt>Q: But selinux is disabled in RHEL 6!</dt>
-            <dd>A: Today it is, yes.  That is a specific exception that certain DevStack contributors fought strongly against.  The primary reason it was allowed was to support using RHEL6 as the Python 2.6 test platform and that took priority time-wise.  This will not be the case with RHEL 7.</dd>
-
-            <dt>Q: Why a shell script, why not chef/puppet/...</dt>
-            <dd>A: The script is meant to be read by humans (as well as ran by computers); it is the primary documentation after all.  Using a recipe system requires everyone to agree and understand chef or puppet.</dd>
-
-            <dt>Q: Why not use Crowbar?</dt>
-            <dd>A: DevStack is optimized for documentation &amp; developers.  As some of us use <a href="https://github.com/dellcloudedge/crowbar">Crowbar</a> for production deployments, we hope developers documenting how they setup systems for new features supports projects like Crowbar.</dd>
-
-            <dt>Q: I'd like to help!</dt>
-            <dd>A: That isn't a question, but please do!  The source for DevStack is <a href="http://github.com/openstack-dev/devstack">github</a> and bug reports go to <a href="http://bugs.launchpad.net/devstack/">LaunchPad</a>.  Contributions follow the usual process as described in the <a href="http://wiki.openstack.org/HowToContribute">OpenStack wiki</a> even though DevStack is not an official OpenStack project.  This site is housed in the CloudBuilder's <a href="http://github.com/cloudbuilders/devstack">github</a> in the gh-pages branch.</dd>
-
-            <dt>Q: Why not use packages?</dt>
-            <dd>A: Unlike packages, DevStack leaves your cloud ready to develop - checkouts of the code and services running in screen. However, many people are doing the hard work of packaging and recipes for production deployments.  We hope this script serves as a way to communicate configuration changes between developers and packagers.</dd>
-
-            <dt>Q: Why isn't $MY_FAVORITE_DISTRO supported?</dt>
-            <dd>A: DevStack is meant for developers and those who want to see how OpenStack really works.  DevStack is known to run on the distro/release combinations listed in <code>README.md</code>.  DevStack is only supported on releases other than those documented in <code>README.md</code> on a best-effort basis.</dd>
-
-            <dt>Q: What about Fedora/RHEL/CentOS?</dt>
-            <dd>A: Fedora and CentOS/RHEL are supported via rpm dependency files and specific checks in <code>stack.sh</code>.  Support will follow the pattern set with the Ubuntu testing, i.e. only a single release of the distro will receive regular testing, others will be handled on a best-effort basis.</dd>
-
-            <dt>Q: Are there any differences between Ubuntu and Fedora support?</dt>
-            <dd>A: Neutron is not fully supported prior to Fedora 18 due lack of OpenVSwitch packages.</dd>
-
-            <dt>Q: How about RHEL 6?</dt>
-            <dd>A: RHEL 6 has Python 2.6 and many old modules packaged and is a challenge to support.  There are a number of specific RHEL6 work-arounds in <code>stack.sh</code> to handle this.  But the testing on py26 is valuable so we do it...</dd>
-          </dl>
-
-          <h3><a name="ops_conf">Operation and Configuration</a></h3>
-
-          <dl class='pull-left'>
-            <dt>Q: Can DevStack handle a multi-node installation?</dt>
-            <dd>A: Indirectly, yes.  You run DevStack on each node with the appropriate configuration in <code>local.conf</code>.  The primary considerations are turning off the services not required on the secondary nodes, making sure the passwords match and setting the various API URLs to the right place.</dd>
-
-            <dt>Q: How can I document the environment that DevStack is using?</dt>
-            <dd>A: DevStack includes a script (<code>tools/info.sh</code>) that gathers the versions of the relevant installed apt packages, pip packages and git repos.  This is a good way to verify what Python modules are installed.</dd>
-
-            <dt>Q: How do I turn off a service that is enabled by default?</dt>
-            <dd>A: Services can be turned off by adding <code>disable_service xxx</code> to <code>local.conf</code> (using <code>n-vol</code> in this example):
-              <pre>disable_service n-vol</pre>
-            </dd>
-
-            <dt>Q: Is enabling a service that defaults to off done with the reverse of the above?</dt>
-            <dd>A: Of course!
-              <pre>enable_service qpid</pre>
-            </dd>
-
-            <dt>Q: How do I run a specific OpenStack milestone?</dt>
-            <dd>A: OpenStack milestones have tags set in the git repo.  Set the appropriate tag in the <code>*_BRANCH</code> variables in <code>local.conf</code>.  Swift is on its own release schedule so pick a tag in the Swift repo that is just before the milestone release.  For example:
-              <pre>[[local|localrc]]
-GLANCE_BRANCH=stable/grizzly
-HORIZON_BRANCH=stable/grizzly
-KEYSTONE_BRANCH=stable/grizzly
-NOVA_BRANCH=stable/grizzly
-GLANCE_BRANCH=stable/grizzly
-NEUTRON_BRANCH=stable/grizzly
-SWIFT_BRANCH=1.10.0</pre>
-            </dd>
-<!---  this is incomplete, remove it until populating the sql catalog is complete
-            <dt>Q: How do I use the SQL catalog backend in Keystone?</dt>
-            <dd>A: Comment out the template backend lines in the <code>[catalog]</code> section of <code>keystone/etc/keystone.conf</code> and add the SQL backend config like this:
-              <pre>[catalog]
-#driver = keystone.catalog.backends.templated.TemplatedCatalog
-#template_file = ./etc/default_catalog.templates
-driver = keystone.catalog.backends.sql.Catalog</pre>
-            </dd>
--->
-            <dt>Q: Why not use <strike><code>tools/pip-requires</code></strike><code>requirements.txt</code> to grab project dependencies?</dt>
-            <dd><strike>The majority of deployments will use packages to install OpenStack that will have distro-based packages as dependencies.  DevStack installs as many of these Python packages as possible to mimic the expected production environemnt.</strike> Certain Linux distributions have a 'lack of workaround' in their Python configurations that installs vendor packaged Python modules and pip-installed modules to the SAME DIRECTORY TREE.  This is causing heartache and moving us in the direction of installing more modules from PyPI than vendor packages.  However, that is only being done as necessary as the packaging needs to catch up to the development cycle anyway so this is kept to a minimum.</dd>
-
-            <dt>Q: What can I do about RabbitMQ not wanting to start on my fresh new VM?</dt>
-            <dd>A: This is often caused by <code>erlang</code> not being happy with the hostname resolving to a reachable IP address.  Make sure your hostname resolves to a working IP address; setting it to 127.0.0.1 in <code>/etc/hosts</code> is often good enough for a single-node installation.  And in an extreme case, use <code>clean.sh</code> to eradicate it and try again.</dd>
-
-            <dt>Q: How can I set up Heat in stand-alone configuration?</dt>
-            <dd>A: Configure <code>local.conf</code> thusly:
-              <pre>[[local|localrc]]
-HEAT_STANDALONE=True
-ENABLED_SERVICES=rabbit,mysql,heat,h-api,h-api-cfn,h-api-cw,h-eng
-KEYSTONE_SERVICE_HOST=&lt;keystone-host&gt;
-KEYSTONE_AUTH_HOST=&lt;keystone-host&gt;</pre>
-            </dd>
-
-            <dt>Q: Why are my configuration changes ignored?</dt>
-            <dd>A: You may have run into the package prerequisite installation timeout.  <code>tools/install_prereqs.sh</code> has a timer that skips the package installation checks if it was run within the last <code>PREREQ_RERUN_HOURS</code> hours (default is 2).  To override this, set <code>FORCE_PREREQ=1</code> and the package checks will never be skipped.
-            </dd>
-          </dl>
-
-          <h3><a name="misc">Miscellaneous</a></h3>
-
-          <dl class='pull-left'>
-            <dt>Q: <code>tools/fixup_stuff.sh</code> is broken and shouldn't 'fix' just one version of packages.</dt>
-            <dd>A: [Another not-a-question]  No it isn't.  Stuff in there is to correct problems in an environment that need to be fixed elsewhere or may/will be fixed in a future release.  In the case of <code>httplib2</code> and <code>prettytable</code> specific problems with specific versions are being worked around.  If later releases have those problems than we'll add them to the script.  Knowing about the broken future releases is valuable rather than polling to see if it has been fixed.</dd>
-          </dl>
-        </div>
-
-      </section>
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-  </body>
-</html>
diff --git a/docs/source/guides/multinode-lab.html b/docs/source/guides/multinode-lab.html
deleted file mode 100644
index db8be08..0000000
--- a/docs/source/guides/multinode-lab.html
+++ /dev/null
@@ -1,336 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>Multi-Node Lab Server Guide - DevStack</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="../assets/css/bootstrap.css" rel="stylesheet">
-    <link href="../assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-    
-    <!-- Le javascripts -->
-    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="../overview.html">Overview</a></li>
-            <li><a href="../changes.html">Changes</a></li>
-            <li><a href="../faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container">
-
-      <section id="overview">
-        <h1>Multi-Node Lab: Serious Stuff</h1>
-        <p>Here is OpenStack in a realistic test configuration with multiple physical servers.</p>
-      </section>
-
-      <section id="prerequisites">
-        <div class="page-header">
-          <h2>Prerequisites <small>Linux & Network</small></h2>
-        </div>
-        
-        <h3>Minimal Install</h3>
-        <p>You need to have a system with a fresh install of Linux.  You can download the <a href="https://help.ubuntu.com/community/Installation/MinimalCD">Minimal CD</a> for Ubuntu releases since DevStack will download &amp; install all the additional dependencies.  The netinstall ISO is available for <a href="http://mirrors.kernel.org/fedora/releases/18/Fedora/x86_64/iso/Fedora-20-x86_64-netinst.iso">Fedora</a> and <a href="http://mirrors.kernel.org/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-netinstall.iso">CentOS/RHEL</a>.</p>
-
-        <p>Install a couple of packages to bootstrap configuration:</p>
-        <pre>apt-get install -y git sudo || yum install -y git sudo</pre>
-
-        <h3>Network Configuration</h3>
-        <p>The first iteration of the lab uses OpenStack's FlatDHCP network controller so
-        only a single network will be required.  It should be on its own subnet without DHCP;
-        the host IPs and floating IP pool(s) will come out of this block. This example 
-        uses the following:</p>
-        <ul>
-          <li>Gateway: 192.168.42.1</li>
-          <li>Physical nodes: 192.168.42.11-192.168.42.99</li>
-          <li>Floating IPs: 192.168.42.128-192.168.42.254</li>
-        </ul>
-        <p>Configure each node with a static IP.
-        For Ubuntu edit <code>/etc/network/interfaces</code>:</p>
-
-        <pre>auto eth0
-iface eth0 inet static
-    address 192.168.42.11
-    netmask 255.255.255.0
-    gateway 192.168.42.1
-</pre>
-        <p>For Fedora and CentOS/RHEL edit
-        <code>/etc/sysconfig/network-scripts/ifcfg-eth0</code>:</p>
-
-        <pre>BOOTPROTO=static
-IPADDR=192.168.42.11
-NETMASK=255.255.255.0
-GATEWAY=192.168.42.1
-</pre>
-
-<!-- save these for the VLAN version
-   auto eth0.926
-   iface eth0.926 inet static
-           address 10.4.144.3
-           netmask 255.255.240.0
-           #gateway 10.4.144.1
-           up ifconfig eth0.926
-   
-   auto eth0.605
-   iface eth0.605 inet static
-           address 172.16.103.3
-           netmask 255.255.255.0
-           #gateway 172.16.103.1
-           up ifconfig eth0.605 up
--->
-
-      </section>
-
-      <section id="installation">
-        <div class="page-header">
-          <h2>Installation <small>shake and bake</small></h2>
-        </div>
-
-        <h3>Add the DevStack User</h3>
-        <p>OpenStack runs as a non-root user that has sudo access to root.  There is nothing special
-        about the name, we'll use <code>stack</code> here. Every node must use the same name and
-        preferably uid. If you created a user during the OS install you can use it and give it
-        sudo privileges below.  Otherwise create the stack user:</p>
-        <pre>groupadd stack
-useradd -g stack -s /bin/bash -d /opt/stack -m stack</pre>
-        <p>This user will be making many changes to your system during installation and operation
-        so it needs to have sudo privileges to root without a password:</p>
-        <pre>echo "stack ALL=(ALL) NOPASSWD: ALL" &gt;&gt; /etc/sudoers</pre>
-        <p>From here on use the <code>stack</code> user.  <b>Logout</b> and <b>login</b> as the 
-        <code>stack</code> user.</p>
-
-        <h3>Set Up Ssh</h3>
-        <p>Set up the stack user on each node with an ssh key for access:</p>
-        <pre>mkdir ~/.ssh; chmod 700 ~/.ssh
-echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyYjfgyPazTvGpd8OaAvtU2utL8W6gWC4JdRS1J95GhNNfQd657yO6s1AH5KYQWktcE6FO/xNUC2reEXSGC7ezy+sGO1kj9Limv5vrvNHvF1+wts0Cmyx61D2nQw35/Qz8BvpdJANL7VwP/cFI/p3yhvx2lsnjFE3hN8xRB2LtLUopUSVdBwACOVUmH2G+2BWMJDjVINd2DPqRIA4Zhy09KJ3O1Joabr0XpQL0yt/I9x8BVHdAx6l9U0tMg9dj5+tAjZvMAFfye3PJcYwwsfJoFxC8w/SLtqlFX7Ehw++8RtvomvuipLdmWCy+T9hIkl+gHYE4cS3OIqXH7f49jdJf jesse@spacey.local" > ~/.ssh/authorized_keys</pre>
-
-        <h3>Download DevStack</h3>
-        <p>Grab the latest version of DevStack from github:</p>
-        <pre>git clone https://github.com/openstack-dev/devstack.git
-cd devstack</pre>
-
-        <p>Up to this point all of the steps apply to each node in the cluster.  From here on
-        there are some differences between the cluster controller (aka 'head node') and the
-        compute nodes.</p>
-
-        <h3>Configure Cluster Controller</h3>
-        <p>The cluster controller runs all OpenStack services.  Configure the cluster controller's DevStack in <code>local.conf</code>:</p>
-        <pre>[[local|localrc]]
-HOST_IP=192.168.42.11
-FLAT_INTERFACE=eth0
-FIXED_RANGE=10.4.128.0/20
-FIXED_NETWORK_SIZE=4096
-FLOATING_RANGE=192.168.42.128/25
-MULTI_HOST=1
-LOGFILE=/opt/stack/logs/stack.sh.log
-ADMIN_PASSWORD=labstack
-MYSQL_PASSWORD=supersecret
-RABBIT_PASSWORD=supersecrete
-SERVICE_PASSWORD=supersecrete
-SERVICE_TOKEN=xyzpdqlazydog</pre>
-<!-- save for vlan
-FLAT_INTERFACE=eth0.926
--->
-
-        <p>In the multi-node configuration the first 10 or so IPs in the private subnet are usually reserved.  Add this to <code>local.sh</code> to have it run after every <code>stack.sh</code> run:</p>
-        <pre>for i in `seq 2 10`; do /opt/stack/nova/bin/nova-manage fixed reserve 10.4.128.$i; done</pre>
-
-        <p>Fire up OpenStack:</p>
-        <pre>./stack.sh</pre>
-        <p>A stream of activity ensues.  When complete you will see a summary of
-        <code>stack.sh</code>'s work, including the relevant URLs, accounts and passwords to poke at your
-        shiny new OpenStack.  The most recent log file is available in <code>stack.sh.log</code>.</p>
-
-        <h3>Configure Compute Nodes</h3>
-        <p>The compute nodes only run the OpenStack worker services.  For additional machines, create a <code>local.conf</code> with:</p>
-        <pre>HOST_IP=192.168.42.12 # change this per compute node
-FLAT_INTERFACE=eth0
-FIXED_RANGE=10.4.128.0/20
-FIXED_NETWORK_SIZE=4096
-FLOATING_RANGE=192.168.42.128/25
-MULTI_HOST=1
-LOGFILE=/opt/stack/logs/stack.sh.log
-ADMIN_PASSWORD=labstack
-MYSQL_PASSWORD=supersecret
-RABBIT_PASSWORD=supersecrete
-SERVICE_PASSWORD=supersecrete
-SERVICE_TOKEN=xyzpdqlazydog
-DATABASE_TYPE=mysql
-SERVICE_HOST=192.168.42.11
-MYSQL_HOST=192.168.42.11
-RABBIT_HOST=192.168.42.11
-GLANCE_HOSTPORT=192.168.42.11:9292
-ENABLED_SERVICES=n-cpu,n-net,n-api,c-sch,c-api,c-vol
-NOVA_VNC_ENABLED=True
-NOVNCPROXY_URL="http://192.168.42.11:6080/vnc_auto.html"
-VNCSERVER_LISTEN=$HOST_IP
-VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN
-</pre>
-
-<!-- save for vlan
-FLAT_INTERFACE=eth0.926
--->
-
-        <p>Fire up OpenStack:</p>
-        <pre>./stack.sh</pre>
-        <p>A stream of activity ensues.  When complete you will see a summary of
-        <code>stack.sh</code>'s work, including the relevant URLs, accounts and passwords to poke at your
-        shiny new OpenStack.  The most recent log file is available in <code>stack.sh.log</code>.</p>
-
-        <h3>Cleaning Up After DevStack</h3>
-        <p>Shutting down OpenStack is now as simple as running the included <code>unstack.sh</code> script:</p>
-        <pre>./unstack.sh</pre>
-
-        <p>A more aggressive cleanup can be performed using <code>clean.sh</code>.  It removes certain troublesome packages and attempts to leave the system in a state where changing the database or queue manager can be reliably performed.
-        <pre>./clean.sh</pre>
-
-        <p>Sometimes running instances are not cleaned up.  DevStack attempts to do this when it
-        runs but there are times it needs to still be done by hand:</p>
-        <pre>sudo rm -rf /etc/libvirt/qemu/inst*
-sudo virsh list | grep inst | awk '{print $1}' | xargs -n1 virsh destroy</pre>
-
-      </section>
-
-      <section id="options">
-        <div class="page-header">
-          <h2>Options <small>pimp your stack</small></h2>
-        </div>
-
-        <h3>Additional Users</h3>
-        <p>DevStack creates two OpenStack users (<code>admin</code> and <code>demo</code>) and two tenants (also <code>admin</code> and <code>demo</code>).  <code>admin</code> is exactly what it sounds like, a privileged administrative account that is a member of both the <code>admin</code> and <code>demo</code> tenants.  <code>demo</code> is a normal user account that is only a member of the <code>demo</code> tenant.  Creating additional OpenStack users can be done through the dashboard, sometimes it is easier to do them in bulk from a script, especially since they get blown away every time
-        <code>stack.sh</code> runs.  The following steps are ripe for scripting:</p>
-        <pre># Get admin creds
-. openrc admin admin
-        
-# List existing tenants
-keystone tenant-list
-
-# List existing users
-keystone user-list
-
-# Add a user and tenant
-NAME=bob
-PASSWORD=BigSecrete
-TENANT=$NAME
-keystone tenant-create --name=$NAME
-keystone user-create --name=$NAME --pass=$PASSWORD
-keystone user-role-add --user-id=&lt;bob-user-id&gt; --tenant-id=&lt;bob-tenant-id&gt; --role-id=&lt;member-role-id&gt;
-# member-role-id comes from the existing member role created by stack.sh
-# keystone role-list</pre>
-
-        <h3>Swift</h3>
-        <p>Swift requires a significant amount of resources and is disabled by default in DevStack.
-        The support in DevStack is geared toward a minimal installation but can be used for
-        testing.  To implement a true multi-node test of Swift required more than DevStack provides.  
-        Enabling it is as simple as enabling the <code>swift</code> service in <code>local.conf</code>:
-        <pre>enable_service swift</pre>
-
-        <p>Swift will put its data files in <code>SWIFT_DATA_DIR</code> (default <code>/opt/stack/data/swift</code>).
-        The size of the data 'partition' created (really a loop-mounted file) is set by
-        <code>SWIFT_LOOPBACK_DISK_SIZE</code>.  The Swift config files are located in 
-        <code>SWIFT_CONFIG_DIR</code> (default <code>/etc/swift</code>).  All of these settings can be overridden in
-        (wait for it...) <code>local.conf</code>.</p>
-
-        <h3>Volumes</h3>
-        <p>DevStack will automatically use an existing LVM volume group named <code>stack-volumes</code> 
-        to store cloud-created volumes. If <code>stack-volumes</code> doesn't exist, DevStack 
-        will set up a 5Gb 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 <code>VOLUME_BACKING_FILE_SIZE</code> in <code>local.conf</code>.</p>
-
-        <p><code>stack-volumes</code> can be pre-created on any physical volume supported by
-        Linux's LVM.  The name of the volume group can be changed by setting <code>VOLUME_GROUP</code>
-        in <code>localrc</code>. <code>stack.sh</code> deletes
-        all logical volumes in <code>VOLUME_GROUP</code> that begin with 
-        <code>VOLUME_NAME_PREFIX</code> as part of cleaning up from previous runs.
-        It is recommended to not use the root volume group as <code>VOLUME_GROUP</code>.</p>
-
-        <p>The details of creating the volume group depends on the server hardware involved 
-        but looks something like this:</p>
-        <pre>pvcreate /dev/sdc
-vgcreate stack-volumes /dev/sdc</pre>
-
-        <h3>Syslog</h3>
-        <p>DevStack is capable of using <code>rsyslog</code> to aggregate logging across the cluster.
-        It is off by default; to turn it on set <code>SYSLOG=True</code> in <code>local.conf</code>.
-        <code>SYSLOG_HOST</code> defaults to <code>HOST_IP</code>; on the compute nodes it 
-        must be set to the IP of the cluster controller to send syslog output there.  In the example
-        above, add this to the compute node <code>local.conf</code>:</p>
-        <pre>SYSLOG_HOST=192.168.42.11</pre>
-
-        <h3>Using Alternate Repositories/Branches</h3>
-        <p>The git repositories for all of the OpenStack services are defined in <code>stackrc</code>.
-        Since this file is a part of the DevStack package changes to it will probably be overwritten
-        as updates are applied.  Every setting in <code>stackrc</code> can be redefined in
-        <code>local.conf</code>.</p>
-
-        <p>To change the repository or branch that a particular OpenStack service is created from,
-        simply change the value of <code>*_REPO</code> or <code>*_BRANCH</code> corresponding to
-        that service.</p>
-
-        <p>After making changes to the repository or branch, if <code>RECLONE</code> is not set
-        in <code>localrc</code> it may be necessary to remove the corresponding directory from
-        <code>/opt/stack</code> to force git to re-clone the repository.</p>
-
-        <p>For example, to pull Nova from a proposed release candidate in the primary Nova 
-        repository:</p>
-        <pre>NOVA_BRANCH=rc-proposed</pre>
-
-        <p>To pull Glance from an experimental fork:</p>
-        <pre>GLANCE_BRANCH=try-something-big
-GLANCE_REPO=https://github.com/mcuser/glance.git</pre>
-
-      </section>
-
-      <section id="Notes">
-        <div class="page-header">
-          <h2>Notes <small>stuff you might need to know</small></h2>
-        </div>
-
-        <h3>Reset the Bridge</h3>
-        <p>How to reset the bridge configuration:</p>
-        <pre>sudo brctl delif br100 eth0.926
-sudo ip link set dev br100 down
-sudo brctl delbr br100</pre>
-<!--
-   sudo rm /etc/libvirt/qemu/*.xml
--->
-
-        <h3>Set MySQL Password</h3>
-        <p>If you forgot to set the root password you can do this:</p>
-        <pre>mysqladmin -u root -pnova password 'supersecret'</pre>
-
-      </section>
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-
-  </body>
-</html>
diff --git a/docs/source/guides/pxe-boot.html b/docs/source/guides/pxe-boot.html
deleted file mode 100644
index 4dc61a3..0000000
--- a/docs/source/guides/pxe-boot.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>PXE Boot Server Guide - DevStack</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="../assets/css/bootstrap.css" rel="stylesheet">
-    <link href="../assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-    
-    <!-- Le javascripts -->
-    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="../overview.html">Overview</a></li>
-            <li><a href="../changes.html">Changes</a></li>
-            <li><a href="../faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container">
-      <section id="overview">
-        <h1>PXE Boot Server Guide: Magic Dust for Network Boot</h1>
-        <p>Boot DevStack from a PXE server to a RAM disk.</p>
-      </section>
-
-      <section id="requirements">
-        <div class="page-header">
-          <h2>Prerequisites <small>Hardware & OpenWRT</small></h2>
-        </div>
-        
-        <h3>Hardware</h3>
-        <p>The whole point of this exercise is to have a highly portable boot server, so using a small router with a USB port is the desired platform.  This guide uses a Buffalo WZR-HP-G300NH as an example, but it is easily generalized for other supported platforms. See openwrt.org for more.</p>
-        
-        <h3>OpenWRT</h3>
-        <p>Any recent 'Backfire' build of OpenWRT will work for the boot server project.  We build from trunk and have made the images available at <a href="http://openwrt.xr7.org/openwrt">http://openwrt.xr7.org/openwrt</a>.</p>
-      </section>
-
-      <section id="installation">
-        <div class="page-header">
-          <h2>Installation <small>bit blasting</small></h2>
-        </div>
-
-        <h3>Install the Image</h3>
-        <p>This process follows <a href="http://wiki.openwrt.org/toh/buffalo/wzr-hp-g300h">the OpenWRT doc OEM Install</a> to tftp the new image onto the router.  You need a computer to set up the router, we assume it is a recent Linux or OS/X installation.</p>
-        <ul>
-          <li>Get openwrt-ar71xx-wzr-hp-g300nh-squashfs-tftp.bin
-            <pre>wget http://openwrt.xr7.org/openwrt/ar71xx/openwrt-ar71xx-wzr-hp-g300nh-squashfs-tftp.bin</pre>
-          </li>
-          <li>Connect computer to LAN port 4 (closest to WAN port)</li>
-          <li>Set computer interface to IP address in the 192.168.11.2</li>
-          <li>Add static arp entry for router
-            <pre>arp -s 192.168.11.1 &lt;mac-address&gt;</pre>
-          </li>
-          <li>Start TFTP transfer attempt
-            <pre>tftp 192.168.11.1
-binary
-rexmt 1
-timeout 60
-put openwrt-ar71xx-wzr-hp-g300nh-squashfs-tftp.bin</pre>
-          </li>
-          <li>Power on router. Router will reboot and initialize on 192.168.1.1.</li>
-          <li>Delete static arp entry for router
-            <pre>arp -d 192.168.11.1</pre>
-          </li>
-          <li>Set computer to DHCP, connect and telnet to router and set root password.</li>
-        </ul>
-
-        <h3>Configure the Router</h3>
-        <ul>
-          <li>Update <code>/etc/opkg.conf</code> to point to our repo:
-            <pre>src/gz packages http://192.168.5.13/openwrt/build/ar71xx/packages</pre>
-          </li>
-          <li>Configure anon mounts:
-            <pre>uci delete fstab.@mount[0]
-uci commit fstab
-/etc/init.d/fstab restart</pre>
-          </li>
-          <li>Reset the DHCP address range.  DevStack will claim the upper 
-            /25 of the router's LAN address space for floating IPs so the
-            default DHCP address range needs to be moved:
-            <pre>uci set dhcp.lan.start=65
-uci set dhcp.lan.limit=60
-uci commit dhcp</pre>
-          </li>
-          <li>Enable TFTP:
-            <pre>uci set dhcp.@dnsmasq[0].enable_tftp=1
-uci set dhcp.@dnsmasq[0].tftp_root=/mnt/sda1/tftpboot
-uci set dhcp.@dnsmasq[0].dhcp_boot=pxelinux.0
-uci commit dhcp
-/etc/init.d/dnsmasq restart</pre>
-          </li>
-        </ul>
-
-        <h3>Set Up tftpboot</h3>
-        <ul>
-          <li>Create the <code>/tmp/tftpboot</code> structure and populate it:
-            <pre>cd ~/devstack
-tools/build_pxe_boot.sh /tmp</pre>
-            This calls <code>tools/build_ramdisk.sh</code> to create a 2GB ramdisk 
-            containing a complete development Oneiric OS plus the 
-            OpenStack code checkouts.
-          </li>
-          <li>Copy <code>tftpboot</code> to a USB drive:
-            <pre>mount /dev/sdb1 /mnt/tmp
-rsync -a /tmp/tftpboot/ /mnt/tmp/tftpboot/
-umount /mnt/tmp</pre>
-          </li>
-          <li>Plug USB drive into router.  It will be automounted and is ready to serve content.</li>
-        </ul>
-
-        <p>Now <a href="ramdisk.html">return</a> to the RAM disk Guide to kick
-           off your DevStack experience.</p>
-
-      </section>
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2013 &mdash; this is not an official OpenStack project...</p>
-      </footer>
-
-    </div> <!-- /container -->
-
-  </body>
-</html>
diff --git a/docs/source/guides/ramdisk.html b/docs/source/guides/ramdisk.html
deleted file mode 100644
index eaef16e..0000000
--- a/docs/source/guides/ramdisk.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>RAMdisk Boot Guide - DevStack</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="../assets/css/bootstrap.css" rel="stylesheet">
-    <link href="../assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-    
-    <!-- Le javascripts -->
-    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="../overview.html">Overview</a></li>
-            <li><a href="../changes.html">Changes</a></li>
-            <li><a href="../faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container">
-      <section id="overview">
-        <h1>Stack-in-a-Box: Try before you mkfs</h1>
-        <p>Run DevStack from a RAM disk to give it a whirl before making the 
-           commitment to install it.  We'll cover booting from a USB drive or 
-           over the network via PXE.  We'll even thow in configuring a home
-           router to handle the PXE boot.  You will need a minimum of 3GB 
-           for both of these configurations as the RAM disk itself is 2GB.</p>
-      </section>
-
-      <section id="requirements">
-        <div class="page-header">
-          <h2>Prerequisites <small>Hardware</small></h2>
-        </div>
-        
-        <h3>USB Boot</h3>
-        <p><a href="usb-boot.html">This guide</a> covers the creation of a bootable USB drive.  Your 
-        computer BIOS must support booting from USB.</p>
-        
-        <h3>PXE Boot</h3>
-        <p><a href="pxe-boot.html">This guide</a> covers the installation of OpenWRT on a home router
-        and configuring it as a PXE server, plus the creation of the
-        boot images and PXE support files.
-      </section>
-
-      <section id="installation">
-        <div class="page-header">
-          <h2>Installation <small>bit blasting</small></h2>
-        </div>
-
-        <h3>Install DevStack</h3>
-        <p>Grab the latest version of DevStack via https:</p>
-		<pre>sudo apt-get install git -y
-git clone https://github.com/openstack-dev/devstack.git
-cd devstack</pre>
-
-        <h3>Prepare the Boot RAMdisk</h3>
-        <p>Pick your boot method and follow the guide to prepare to build
-           the RAM disk and set up the boot process:</p>
-        <ul>
-          <li><a href="usb-boot.html">USB boot</a></li>
-          <li><a href="pxe-boot.html">PXE boot</a></li>
-        </ul>
-
-        <h3>Fire It Up</h3>
-        <ul>
-          <li>Boot the computer into the RAM disk.  The details will vary from
-              machine to machine but most BIOSes have a method to select the
-              boot device, often by pressing F12 during POST.</li>
-          <li>Select 'DevStack' from the Boot Menu.</li>
-          <li>Log in with the 'stack' user and 'pass' password.</li>
-          <li>Create <code>devstack/localrc</code> if you wish to change any 
-              of the configuration variables.  You will probably want to at 
-              least set the admin login password to something memorable rather 
-              than the default 20 random characters:
-            <pre>ADMIN_PASSWORD=openstack</pre>
-          </li>
-          <li>Fire up OpenStack!
-            <pre>./run.sh</pre>
-          </li>
-          <li>See the processes running in screen:
-            <pre>screen -x</pre>
-          </li>
-          <li>Connect to the dashboard at <code>http://&lt;ip-address&gt;/</code></li>
-        </ul>
-
-      </section>
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2013 &mdash; this is not an official OpenStack project...</p>
-      </footer>
-
-    </div> <!-- /container -->
-
-  </body>
-</html>
diff --git a/docs/source/guides/single-machine.html b/docs/source/guides/single-machine.html
deleted file mode 100644
index 9471972..0000000
--- a/docs/source/guides/single-machine.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>Single Machine Guide - DevStack</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="../assets/css/bootstrap.css" rel="stylesheet">
-    <link href="../assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-    
-    <!-- Le javascripts -->
-    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="../overview.html">Overview</a></li>
-            <li><a href="../changes.html">Changes</a></li>
-            <li><a href="../faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container">
-      <section id="overview">
-        <h1>All-In-One: Dedicated Hardware</h1>
-        <p>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 with hardware.</p>
-      </section>
-
-      <section id="prerequisites">
-        <div class="page-header">
-          <h2>Prerequisites <small>Linux & Network</small></h2>
-        </div>
-        
-        <h3>Minimal Install</h3>
-        <p>You need to have a system with a fresh install of Linux.  You can download the <a href="https://help.ubuntu.com/community/Installation/MinimalCD">Minimal CD</a> for Ubuntu releases since DevStack will download &amp; install all the additional dependencies.  The netinstall ISO is available for <a href="http://mirrors.kernel.org/fedora/releases/18/Fedora/x86_64/iso/Fedora-20-x86_64-netinst.iso">Fedora</a> and <a href="http://mirrors.kernel.org/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-netinstall.iso">CentOS/RHEL</a>.  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.</p>
-        
-        <h3>Network Configuration</h3>
-        <p>Determine the network configuration on the interface used to integrate your 
-        OpenStack cloud with your existing network. For example, if the IPs given out on your network 
-        by DHCP are 192.168.1.X - where X is between 100 and 200 you will be able to use IPs 
-        201-254 for <b>floating ips</b>.</p>
-        <p>To make things easier later change your host to use a static IP instead of DHCP (i.e. 192.168.1.201).</p>
-      </section>
-
-      <section id="installation">
-        <div class="page-header">
-          <h2>Installation <small>shake and bake</small></h2>
-        </div>
-
-        <h3>Add your user</h3>
-        <p>We need to add a user to install DevStack.  (if you created a user during install you can skip this step and just give the user sudo privileges below)</p>
-        <pre>adduser stack</pre>
-        <p>Since this user will be making many changes to your system, it will need to have sudo privileges:</p>
-        <pre>apt-get install sudo -y || yum install -y sudo
-echo "stack ALL=(ALL) NOPASSWD: ALL" &gt;&gt; /etc/sudoers</pre>
-        <p>From here on you should use the user you created.  <b>Logout</b> and <b>login</b> as that user.</p>
-
-        <h3>Download DevStack</h3>
-        <p>We'll grab the latest version of DevStack via https:</p>
-        <pre>sudo apt-get install git -y || yum install -y git
-git clone https://github.com/openstack-dev/devstack.git
-cd devstack</pre>
-
-        <h3>Run DevStack</h3>
-        <p>Now to configure <code>stack.sh</code>.  DevStack includes a sample in <code>devstack/samples/local.conf</code>.  Create <code>local.conf</code> as shown below to do the following:</p>
-        <ul>
-          <li>Set <code>FLOATING_RANGE</code> to a range not used on the local network, i.e. 192.168.1.224/27.  This configures IP addresses ending in 225-254 to be used as floating IPs.</li>
-          <li>Set <code>FIXED_RANGE</code> and <code>FIXED_NETWORK_SIZE</code> to configure the internal address space used by the instances.</li>
-          <li>Set <code>FLAT_INTERFACE</code> to the Ethernet interface that connects the host to your local network.  This is the interface that should be configured with the static IP address mentioned above.</li>
-          <li>Set the administrative password.  This password is used for the <b>admin</b> and <b>demo</b> accounts set up as OpenStack users.</li>
-          <li>Set the MySQL administrative password.  The default here is a random hex string which is inconvenient if you need to look at the database directly for anything.</li>
-          <li>Set the RabbitMQ password.</li>
-          <li>Set the service password.  This is used by the OpenStack services (Nova, Glance, etc) to authenticate with Keystone.</li>
-        </ul>
-        <p><code>local.conf</code> should look something like this:</p>
-        <pre>[[local|localrc]]
-FLOATING_RANGE=192.168.1.224/27
-FIXED_RANGE=10.11.12.0/24
-FIXED_NETWORK_SIZE=256
-FLAT_INTERFACE=eth0
-ADMIN_PASSWORD=supersecret
-MYSQL_PASSWORD=iheartdatabases
-RABBIT_PASSWORD=flopsymopsy
-SERVICE_PASSWORD=iheartksl</pre>
-
-        <p>Run DevStack:</p>
-        <pre>./stack.sh</pre>
-        <p>A seemingly endless stream of activity ensues.  When complete you will see a summary of
-        <code>stack.sh</code>'s work, including the relevant URLs, accounts and passwords to poke at your
-        shiny new OpenStack.</p>
-
-        <h3>Using OpenStack</h3>
-        <p>At this point you should be able to access the dashboard from other computers on the 
-        local network.  In this example that would be http://192.168.1.201/ for the dashboard (aka Horizon).
-        Launch VMs and if you give them floating IPs and security group access those VMs will be accessible from other machines on your network.</p>
-
-        <p>Some examples of using the OpenStack command-line clients <code>nova</code> and <code>glance</code>
-        are in the shakedown scripts in <code>devstack/exercises</code>.  <code>exercise.sh</code>
-        will run all of those scripts and report on the results.</p>
-
-      </section>
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2013 &mdash; An <a href="https://wiki.openstack.org/wiki/Programs">OpenStack program</a> created by <a href="http://www.rackspace.com/cloud/private_edition/">Rackspace Cloud Builders</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-
-  </body>
-</html>
diff --git a/docs/source/guides/single-vm.html b/docs/source/guides/single-vm.html
deleted file mode 100644
index 2f1990a..0000000
--- a/docs/source/guides/single-vm.html
+++ /dev/null
@@ -1,137 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>Single Machine Guide - DevStack</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="../assets/css/bootstrap.css" rel="stylesheet">
-    <link href="../assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-    
-    <!-- Le javascripts -->
-    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="../overview.html">Overview</a></li>
-            <li><a href="../changes.html">Changes</a></li>
-            <li><a href="../faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container">
-      <section id="overview">
-        <h1>Running a Cloud in a VM</h1>
-        <p>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 launched in the cloud will 
-        be slow as they are running in QEMU (emulation), but their primary use is testing
-        OpenStack development and operation.  Speed not required.</p>
-      </section>
-
-      <section id="prerequisites">
-        <div class="page-header">
-          <h2>Prerequisites <small>Cloud & Image</small></h2>
-        </div>
-
-        <h3>Virtual Machine</h3>
-        <p>DevStack should run in any virtual machine running a supported Linux release.  It will perform best with 2Gb or more of RAM.</p>
-
-        <h3>OpenStack Deployment &amp; cloud-init</h3>
-        <p>If the cloud service has an image with <code>cloud-init</code> pre-installed, use it.  You can
-        get one from <a href="http://uec-images.ubuntu.com">Ubuntu's Daily Build</a>
-        site if necessary.  This will enable you to launch VMs with userdata that installs 
-        everything at boot time.  The userdata script below will install and run
-        DevStack with a minimal configuration.  The use of <code>cloud-init</code>
-        is outside the scope of this document, refer to <a href"http://cloudinit.readthedocs.org/en/latest/index.html">the
-        <code>cloud-init</code> docs</a> for more information.</p>
-
-        <p>If you are directly using a hypervisor like Xen, kvm or VirtualBox you can manually kick off
-        the script below as a non-root user in a bare-bones server installation.</p>
-      </section>
-
-      <section id="requirements">
-        <div class="page-header">
-          <h2>Installation <small>shake and bake</small></h2>
-        </div>
-
-        <h3>Launching With Cloud-Init</h3>
-        <p>This cloud config grabs the latest version of DevStack via git, creates a minimal 
-        <code>local.conf</code> file and kicks off <code>stack.sh</code>.  It should
-        be passed as the user-data file when booting the VM.</p>
-        <pre>#cloud-config
-
-users:
-  - default
-  - name: stack
-    lock_passwd: False
-    sudo: ["ALL=(ALL) NOPASSWD:ALL\nDefaults:stack !requiretty"]
-    shell: /bin/bash
-
-write_files:
-  - content: |
-        #!/bin/sh
-        DEBIAN_FRONTEND=noninteractive sudo apt-get -qqy update || sudo yum update -qy
-        DEBIAN_FRONTEND=noninteractive sudo apt-get install -qqy git || sudo yum install -qy git
-        sudo chown stack:stack /home/stack
-        cd /home/stack
-        git clone https://github.com/openstack-dev/devstack.git
-        cd devstack
-        echo '[[local|localrc]]' > local.conf
-        echo ADMIN_PASSWORD=password >> local.conf
-        echo MYSQL_PASSWORD=password >> local.conf
-        echo RABBIT_PASSWORD=password >> local.conf
-        echo SERVICE_PASSWORD=password >> local.conf
-        echo SERVICE_TOKEN=tokentoken >> local.conf
-        ./stack.sh
-    path: /home/stack/start.sh
-    permissions: 0755
-
-runcmd:
-  - su -l stack ./start.sh</pre>
-        <p>As DevStack will refuse to run as root, this configures <code>cloud-init</code>
-        to create a non-root user and run the <code>start.sh</code> script as that user.</p>
-
-        <h3>Launching By Hand</h3>
-        <p>Using a hypervisor directly, launch the VM and either manually perform the steps in the 
-        embedded shell script above or copy it into the VM.</p>
-
-        <h3>Using OpenStack</h3>
-        <p>At this point you should be able to access the dashboard.  Launch VMs and if you give them floating IPs access those VMs from other machines on your network.</p>
-
-        <p>One interesting use case is for developers working on a VM on their laptop.  Once
-        <code>stack.sh</code> has completed once, all of the pre-requisite packages are installed
-        in the VM and the source trees checked out.  Setting <code>OFFLINE=True</code> in
-        <code>local.conf</code> enables <code>stack.sh</code> to run multiple times without an Internet
-        connection.  DevStack, making hacking at the lake possible since 2012!</p>
-      </section>
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-
-  </body>
-</html>
diff --git a/docs/source/guides/usb-boot.html b/docs/source/guides/usb-boot.html
deleted file mode 100644
index 75adc6f..0000000
--- a/docs/source/guides/usb-boot.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>USB Boot Server Guide - DevStack</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="../assets/css/bootstrap.css" rel="stylesheet">
-    <link href="../assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-    
-    <!-- Le javascripts -->
-    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="../overview.html">Overview</a></li>
-            <li><a href="../changes.html">Changes</a></li>
-            <li><a href="../faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container">
-      <section id="overview">
-        <h1>USB Boot: Undoable Stack Boot</h1>
-        <p>Boot DevStack from a USB disk into a RAM disk.</p>
-      </section>
-
-      <section id="requirements">
-        <div class="page-header">
-          <h2>Prerequisites</h2>
-        </div>
-        
-        <h3>Hardware</h3>
-        <p>This guide covers the creation of a bootable USB drive.  Your 
-           computer BIOS must support booting from USB and You will want at least 3GB of 
-           RAM.  You also will need a USB drive of at least 2GB.</p>
-
-        <h3>Software</h3>
-        <p>Ubuntu 11.10 (Oneiric Ocelot) is required on host to create images.</p>
-      </section>
-
-      <section id="installation">
-        <div class="page-header">
-          <h2>Installation <small>bit blasting</small></h2>
-        </div>
-
-        <h3>Set Up USB Drive</h3>
-        <ul>
-          <li>Insert the USB drive into the computer.  Make a note of the device name, such as 
-          <code>sdb</code>. Do not mount the device.</li>
-          <li>Install the boot system:
-            <pre>tools/build_usb_boot.sh /dev/sdb1</pre>
-            <p>This calls tools/build_ramdisk.sh to create a 2GB ramdisk 
-               containing a complete development Oneiric OS plus the 
-               OpenStack code checkouts.  It then writes a syslinux boot sector
-               to the specified device and creates <code>/syslinux</code>.</p>
-          </li>
-          <li>If desired, you may now mount the device:
-            <pre>mount /dev/sdb1 /mnt/tmp
-# foo
-umount /mnt/tmp</pre>
-          </li>
-        </ul>
-
-        <p>Now <a href="ramdisk.html">return</a> to the RAM disk Guide to kick
-           off your DevStack experience.</p>
-
-      </section>
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2013 &mdash; this is not an official OpenStack project...</p>
-      </footer>
-
-    </div> <!-- /container -->
-
-  </body>
-</html>
diff --git a/docs/source/index.html b/docs/source/index.html
deleted file mode 100644
index dada57d..0000000
--- a/docs/source/index.html
+++ /dev/null
@@ -1,562 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>DevStack - Deploying OpenStack for Developers</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="assets/css/bootstrap.css" rel="stylesheet">
-    <link href="assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-
-    <!-- Le javascripts -->
-    <script src="assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="overview.html">Overview</a></li>
-            <li><a href="changes.html">Changes</a></li>
-            <li><a href="faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container" id="home">
-
-      <div class="hero-unit">
-        <div class="pull-left">
-          <h1 id="main_header">DevStack - an OpenStack Community Production</h1>
-          <div class="sub_header">
-            <p></p>
-            <p>A documented shell script to build complete OpenStack development environments. <br /><br />
-              An OpenStack program maintained by the developer community.</p>
-          </div>
-        </div>
-        <div class="pull-left">
-          <ol id="getting_started">
-            <li id="ubuntu">Setup a fresh supported Linux installation.</li>
-            <li id="github">
-              Clone devstack from devstack.
-              <pre>git clone https://github.com/openstack-dev/devstack.git</pre>
-            </li>
-            <li id="install">
-              Deploy your OpenStack Cloud
-              <pre>cd devstack &amp;&amp; ./stack.sh</pre>
-            </li>
-          </ol>
-        </div>
-        <div class="clear">&nbsp;</div>
-      </div>
-
-
-      <section id="quickstart" class="span12">
-        <div class="page-header">
-          <h2>Quick Start <small>This ain't your first rodeo</small></h2>
-        </div>
-        <ol>
-            <li value="0">
-              <h3>Select a Linux Distribution</h3>
-              <p>Only Ubuntu 14.04 (Trusty), Fedora 20 and CentOS/RHEL 6.5 are documented here.  OpenStack also runs and is packaged on other flavors of Linux such as OpenSUSE and Debian.</p>
-            </li>
-            <li>
-              <h3>Install Selected OS</h3>
-              <p>In order to correctly install all the dependencies, we assume a specific minimal version of the supported distributions to make it as easy as possible.  We recommend using a minimal install of Ubuntu or Fedora server in a VM if this is your first time.</p>
-            </li>
-            <li>
-              <h3>Download DevStack</h3>
-              <pre>git clone https://github.com/openstack-dev/devstack.git</pre>
-              <p>The <code>devstack</code> repo contains a script that installs OpenStack and templates for configuration files</p>
-            </li>
-            <li>
-              <h3>Configure</h3>
-              <p>We recommend at least a <a href="configuration.html">minimal configuration</a> be set up.</p>
-            </li>
-            <li>
-              <h3>Start the install</h3>
-              <pre>cd devstack; ./stack.sh</pre>
-              <p>It takes a few minutes, we recommend <a href="stack.sh.html">reading the script</a> while it is building.</p>
-            </li>
-        </ol>
-      </section>
-
-      <section id="guides" class='span12'>
-        <div class="page-header">
-          <h2>Guides <small>Walk through various setups used by stackers</small></h2>
-        </div>
-
-        <div class='row span8'>
-          <h2>OpenStack on VMs</h2>
-          <table class='table table-striped table-bordered'>
-            <thead>
-              <tr>
-                <th>Title</th>
-                <th>Description</th>
-                <th>Link</th>
-              </tr>
-            </thead>
-            <tbody>
-              <tr>
-                <td>Virtual Machine</td>
-                <td>Run OpenStack in a 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.</td>
-                <td><a class="btn btn-small btn-primary table-action" href="guides/single-vm.html">Read &raquo;</a></td>
-              </tr>
-
-<!--
-              <tr>
-                <td>LXC Containers</td>
-                <td>Already running Ubuntu on your machine?  Using containers lets you build even faster.</td>
-                <td>Coming soon!</td>
-              </tr>
--->
-            </tbody>
-            <tfoot>
-              <td colspan="3">1 Guide</td>
-            </tfoot>
-          </table>
-        </div>
-        <div class="wat span3 pull-right">
-          <h4>What is this?</h4>
-          <p>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.</p>
-        </div>
-
-        <div class='row span8'>
-          <h2>OpenStack on Hardware</h2>
-          <table class='table table-striped table-bordered'>
-            <thead>
-              <tr>
-                <th>Title</th>
-                <th>Description</th>
-                <th>Link</th>
-              </tr>
-            </thead>
-            <tbody>
-              <tr>
-                <td>All-In-One</td>
-                <td>Run OpenStack on dedicated hardware to get real performance in your VMs.  This can include a server-class machine or a laptop at home.</td>
-                <td><a class="btn btn-small btn-primary table-action" href="guides/single-machine.html">Read &raquo;</a></td>
-              </tr>
-
-              <tr>
-                <td>Multi-Node + VLANs</td>
-                <td>Setup a multi-node cluster with dedicated VLANs for VMs &amp; Management.</td>
-                <td><a class="btn btn-small btn-primary table-action" href="guides/multinode-lab.html">Read &raquo;</a></td>
-              </tr>
-
-<!--
-              <tr>
-                <td>Stack-in-a-Box</td>
-                <td>Run OpenStack from a RAM disk to give it a spin without touching your existing OS installation.  Includes PXE and USB boot methods.</td>
-                <td><a class="btn btn-small btn-primary table-action" href="guides/ramdisk.html">Read &raquo;</a></td>
-              </tr>
--->
-            </tbody>
-            <tfoot>
-              <td colspan="3">2 Guides</td>
-            </tfoot>
-          </table>
-        </div>
-        <div class="wat span3 pull-right">
-          <h4>What is this?</h4>
-          <p>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.</p>
-        </div>
-
-      </section>
-
-      <section id="docs" class="span12">
-        <div class="page-header">
-          <h2>Documentation <small>Help yourself to stack</small></h2>
-        </div>
-
-        <div class='row span5 pull-left'>
-          <h2>Overview</h2>
-          <p><a href="overview.html">An overview of DevStack goals and priorities</a></p>
-          <h2>Configuration</h2>
-          <p><a href="configuration.html">Configuring and customizing the stack</a></p>
-          <h2>Plugins</h2>
-          <p><a href="plugins.html">Extending DevStack with new features</a></p>
-        </div>
-
-        <div class='span5 pull-right'>
-          <h2>Recent Changes</h2>
-          <p><a href="changes.html">An incomplete summary of recent changes</a></p>
-          <h2>FAQ</h2>
-          <p><a href="faq.html">The DevStack FAQ</a></p>
-          <h2>Contributing</h2>
-          <p><a href="contributing.html">Pitching in to make DevStack a better place</a></p>
-        </div>
-
-      </section>
-
-      <section id="docs" class="span12">
-        <div class="page-header">
-          <h2>Code <small>A look at the bits that make it all go</small></h2>
-        </div>
-
-        <div class='row span5 pull-left'>
-          <h2>Scripts <small>Generated documentation of DevStack scripts.</small></h2>
-          <table class='table table-striped table-bordered'>
-            <thead>
-              <tr>
-                <th>Filename</th>
-                <th>Link</th>
-              </tr>
-            </thead>
-            <tbody>
-              <tr>
-                <td>stack.sh</td>
-                <td><a href="stack.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>functions</td>
-                <td><a href="functions.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>functions-common</td>
-                <td><a href="functions-common.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/apache</td>
-                <td><a href="lib/apache.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/baremetal</td>
-                <td><a href="lib/baremetal.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/ceilometer</td>
-                <td><a href="lib/ceilometer.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/cinder</td>
-                <td><a href="lib/cinder.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/config</td>
-                <td><a href="lib/config.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/database</td>
-                <td><a href="lib/database.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/glance</td>
-                <td><a href="lib/glance.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/heat</td>
-                <td><a href="lib/heat.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/horizon</td>
-                <td><a href="lib/horizon.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/infra</td>
-                <td><a href="lib/infra.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/ironic</td>
-                <td><a href="lib/ironic.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/keystone</td>
-                <td><a href="lib/keystone.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/ldap</td>
-                <td><a href="lib/ldap.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/zaqar</td>
-                <td><a href="lib/zaqar.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/neutron</td>
-                <td><a href="lib/neutron.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/nova</td>
-                <td><a href="lib/nova.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/oslo</td>
-                <td><a href="lib/oslo.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/rpc_backend</td>
-                <td><a href="lib/rpc_backend.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/sahara</td>
-                <td><a href="lib/sahara.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/savanna</td>
-                <td><a href="lib/savanna.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/stackforge</td>
-                <td><a href="lib/stackforge.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/swift</td>
-                <td><a href="lib/swift.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/tempest</td>
-                <td><a href="lib/tempest.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/tls</td>
-                <td><a href="lib/tls.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>lib/trove</td>
-                <td><a href="lib/trove.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>unstack.sh</td>
-                <td><a href="unstack.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>clean.sh</td>
-                <td><a href="clean.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>run_tests.sh</td>
-                <td><a href="run_tests.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>extras.d/50-ironic.sh</td>
-                <td><a href="extras.d/50-ironic.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>extras.d/70-zaqar.sh</td>
-                <td><a href="extras.d/70-zaqar.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>extras.d/70-sahara.sh</td>
-                <td><a href="extras.d/70-sahara.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>extras.d/70-savanna.sh</td>
-                <td><a href="extras.d/70-savanna.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>extras.d/70-trove.sh</td>
-                <td><a href="extras.d/70-trove.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>extras.d/80-opendaylight.sh</td>
-                <td><a href="extras.d/80-opendaylight.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>extras.d/80-tempest.sh</td>
-                <td><a href="extras.d/80-tempest.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-            </tbody>
-          </table>
-        </div>
-
-        <div class='span5 pull-right'>
-          <h2>Configuration <small>Setting the table</small></h2>
-          <table class='table table-striped table-bordered'>
-            <thead>
-              <tr>
-                <th>Filename</th>
-                <th>Link</th>
-              </tr>
-            </thead>
-            <tbody>
-              <tr>
-                <td>local.conf</td>
-                <td><a href="local.conf.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>stackrc</td>
-                <td><a href="stackrc.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>openrc</td>
-                <td><a href="openrc.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>exerciserc</td>
-                <td><a href="exerciserc.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>eucarc</td>
-                <td><a href="eucarc.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-            </tbody>
-          </table>
-
-          <h2>Tools <small>Support scripts</small></h2>
-          <table class='table table-striped table-bordered'>
-            <thead>
-              <tr>
-                <th>Filename</th>
-                <th>Link</th>
-              </tr>
-            </thead>
-            <tbody>
-              <tr>
-                <td>tools/info.sh</td>
-                <td><a href="tools/info.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>tools/build_docs.sh</td>
-                <td><a href="tools/build_docs.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>tools/create_userrc.sh</td>
-                <td><a href="tools/create_userrc.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>tools/fixup_stuff.sh</td>
-                <td><a href="tools/fixup_stuff.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>tools/install_prereqs.sh</td>
-                <td><a href="tools/install_prereqs.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>tools/install_pip.sh</td>
-                <td><a href="tools/install_pip.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>tools/upload_image.sh</td>
-                <td><a href="tools/upload_image.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-            </tbody>
-          </table>
-
-          <h2>Samples <small>Generated documentation of DevStack sample files.</small></h2>
-          <table class='table table-striped table-bordered'>
-            <thead>
-              <tr>
-                <th>Filename</th>
-                <th>Link</th>
-              </tr>
-            </thead>
-            <tbody>
-              <tr>
-                <td>local.sh</td>
-                <td><a href="samples/local.sh.html" class="btn btn-small btn-success table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>localrc</td>
-                <td><a href="samples/localrc.html" class="btn btn-small btn-success table-action">Read &raquo;</a></td>
-              </tr>
-            </tbody>
-          </table>
-
-        <div class='row span5 pull-right'>
-          <h2>Exercises <small>Generated documentation of DevStack scripts.</small></h2>
-          <table class='table table-striped table-bordered'>
-            <thead>
-              <tr>
-                <th>Filename</th>
-                <th>Link</th>
-              </tr>
-            </thead>
-            <tbody>
-              <tr>
-                <td>exercise.sh</td>
-                <td><a href="exercise.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>exercises/aggregates.sh</td>
-                <td><a href="exercises/aggregates.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>exercises/boot_from_volume.sh</td>
-                <td><a href="exercises/boot_from_volume.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>exercises/bundle.sh</td>
-                <td><a href="exercises/bundle.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>exercises/client-args.sh</td>
-                <td><a href="exercises/client-args.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>exercises/client-env.sh</td>
-                <td><a href="exercises/client-env.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>exercises/euca.sh</td>
-                <td><a href="exercises/euca.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>exercises/floating_ips.sh</td>
-                <td><a href="exercises/floating_ips.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>exercises/horizon.sh</td>
-                <td><a href="exercises/horizon.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>exercises/neutron-adv-test.sh</td>
-                <td><a href="exercises/neutron-adv-test.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-                <td>exercises/sahara.sh</td>
-                <td><a href="exercises/sahara.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-                <td>exercises/savanna.sh</td>
-                <td><a href="exercises/savanna.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>exercises/sec_groups.sh</td>
-                <td><a href="exercises/sec_groups.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>exercises/swift.sh</td>
-                <td><a href="exercises/swift.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-                <td>exercises/trove.sh</td>
-                <td><a href="exercises/trove.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>exercises/volumes.sh</td>
-                <td><a href="exercises/volumes.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-              <tr>
-                <td>exercises/zaqar.sh</td>
-                <td><a href="exercises/zaqar.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
-              </tr>
-            </tbody>
-          </table>
-
-        </div>
-
-      </section>
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-  </body>
-</html>
diff --git a/docs/source/local.conf.html b/docs/source/local.conf.html
deleted file mode 100644
index ed53adf..0000000
--- a/docs/source/local.conf.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>DevStack - local.conf</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="assets/css/bootstrap.css" rel="stylesheet">
-    <link href="assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-
-    <!-- Le javascripts -->
-    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="overview.html">Overview</a></li>
-            <li><a href="changes.html">Changes</a></li>
-            <li><a href="faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container">
-
-      <section class="span12">
-        <div class="page-header">
-          <h2>local.conf <small>User settings</small></h2>
-          <p><code>local.conf</code> is a user-maintained setings file that is
-          sourced in <code>stackrc</code>.  It contains a section that replaces
-          the historical <code>localrc</code> file.  See
-          <a href="configuration.html">the description of local.conf</a> for
-          more details about the mechanics of the file.</p>
-        </div>
-      </section
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-
-  </body>
-</html>
diff --git a/docs/source/localrc.html b/docs/source/localrc.html
deleted file mode 100644
index 0f669bd..0000000
--- a/docs/source/localrc.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>DevStack - localrc</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="assets/css/bootstrap.css" rel="stylesheet">
-    <link href="assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-
-    <!-- Le javascripts -->
-    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="overview.html">Overview</a></li>
-            <li><a href="changes.html">Changes</a></li>
-            <li><a href="faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container">
-
-      <section class="span12">
-        <div class="page-header">
-          <h2>localrc <small>User settings</small></h2>
-          <p><code>localrc</code> is the old file used to configure DevStack.  It is deprecated and has been replaced by <a href="local.conf.html"><code>local.conf</code></a>.  DevStack will continue to use <code>localrc</code> if it is present and ignore the <code>localrc</code> section in <code>local.conf.</code>.   Remove <code>localrc</code> to switch to using the new file.</p>
-        </div>
-      </section
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-
-  </body>
-</html>
diff --git a/docs/source/openrc.html b/docs/source/openrc.html
deleted file mode 100644
index da6697f..0000000
--- a/docs/source/openrc.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>DevStack - openrc</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="assets/css/bootstrap.css" rel="stylesheet">
-    <link href="assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-    
-    <!-- Le javascripts -->
-    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="overview.html">Overview</a></li>
-            <li><a href="changes.html">Changes</a></li>
-            <li><a href="faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container">
-
-      <section class="span12">
-        <div class="page-header">
-          <h2>openrc <small>User authentication settings</small></h2>
-          <p><code>openrc</code> configures login credentials suitable for use
-          with the OpenStack command-line tools.  <code>openrc</code> sources
-          <code>stackrc</code> at the beginning (which in turn sources
-          the <code>localrc</code> setion of <code>local.conf</code>) in
-          order to pick up <code>HOST_IP</code>
-          and/or <code>SERVICE_HOST</code> to use in the endpoints.
-          The values shown below are the default values.</p>
-        </div>
-        <dl>
-
-          <dt>OS_TENANT_NAME</dt>
-          <dd>The introduction of Keystone to the OpenStack ecosystem has standardized the
-            term <em>tenant</em> as the entity that owns resources.  In some places references
-            still exist to the original Nova term <em>project</em> for this use.  Also,
-            <em>tenant_name</em> is preferred to <em>tenant_id</em>.
-            <pre>OS_TENANT_NAME=demo</pre></dd>
-
-          <dt>OS_USERNAME</dt>
-          <dd>In addition to the owning entity (tenant), Nova stores the entity performing
-            the action as the <em>user</em>.
-            <pre>OS_USERNAME=demo</pre></dd>
-
-          <dt>OS_PASSWORD</dt>
-          <dd>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.
-            <pre>OS_PASSWORD=secrete</pre></dd>
-
-          <dt>HOST_IP, SERVICE_HOST</dt>
-          <dd>Set API endpoint host using <code>HOST_IP</code>.  <code>SERVICE_HOST</code>
-            may also be used to specify the endpoint, which is convenient for
-            some <code>localrc</code> configurations.  Typically, <code>HOST_IP</code>
-            is set in the <code>localrc</code> section.
-            <pre>HOST_IP=127.0.0.1
-SERVICE_HOST=$HOST_IP</pre></dd>
-
-          <dt>OS_AUTH_URL</dt>
-          <dd>Authenticating against an OpenStack cloud using Keystone returns a <em>Token</em>
-            and <em>Service Catalog</em>.  The catalog contains the endpoints for all services
-            the user/tenant has access to - including Nova, Glance, Keystone and Swift.
-            <pre>OS_AUTH_URL=http://$SERVICE_HOST:5000/v2.0</pre></dd>
-
-          <dt>GLANCE_HOST</dt>
-          <dd>Some exercises call Glance directly.  On a single-node installation, Glance
-            should be listening on <code>HOST_IP</code>.  If its running elsewhere
-            it can be set here.
-            <pre>GLANCE_HOST=$HOST_IP</pre></dd>
-
-          <dt>KEYSTONECLIENT_DEBUG, NOVACLIENT_DEBUG</dt>
-          <dd>Set command-line client log level to <code>DEBUG</code>.  These are
-            commented out by default.
-            <pre># export KEYSTONECLIENT_DEBUG=1
-# export NOVACLIENT_DEBUG=1</pre></dd>
-
-        </dl>
-      </section
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2013 &mdash; An
-        <a href="https://wiki.openstack.org/wiki/Programs">OpenStack program</a>
-        created by <a href="http://www.rackspace.com/cloud/private_edition/">Rackspace Cloud Builders</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-
-  </body>
-</html>
diff --git a/docs/source/overview.html b/docs/source/overview.html
deleted file mode 100644
index baee400..0000000
--- a/docs/source/overview.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>DevStack - Overview</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="assets/css/bootstrap.css" rel="stylesheet">
-    <link href="assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-    
-    <!-- Le javascripts -->
-    <script src="assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="overview.html">Overview</a></li>
-            <li><a href="changes.html">Changes</a></li>
-            <li><a href="faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container" id="home">
-      
-      <section id="overview" class="span12">
-
-        <div class='row pull-left'>
-          <h2>Overview <small>DevStack from a cloud-height view</small></h2>
-          <p>DevStack has evolved to support a large number of configuration options and alternative platforms and support services.  That evolution has grown well beyond what was originally intended and the majority of configuration combinations are rarely, if ever, tested.  DevStack is not a general OpenStack installer and was never meant to be everything to everyone..</p>
-          <p>Below is a list of what is specifically is supported (read that as "tested") going forward.</p>
-
-          <h2>Supported Components</h2>
-
-          <h3>Base OS</h3>
-          <p><em>The OpenStack Technical Committee (TC) has defined the current CI strategy to include the latest Ubuntu release and the latest RHEL release (for Python 2.6 testing).</em></p>
-          <ul>
-            <li>Ubuntu: current LTS release plus current development release</li>
-            <li>Fedora: current release plus previous release</li>
-            <li>RHEL: current major release</li>
-            <li>Other OS platforms may continue to be included but the maintenance of those platforms shall not be assumed simply due to their presence.  Having a listed point-of-contact for each additional OS will greatly increase its chance of being well-maintained.</li>
-            <li>Patches for Ubuntu and/or Fedora will not be held up due to side-effects on other OS platforms.</li>
-          </ul>
-
-          <h3>Databases</h3>
-          <p><em>As packaged by the host OS</em></p>
-          <ul>
-            <li>MySQL</li>
-            <li>PostgreSQL</li>
-          </ul>
-
-          <h3>Queues</h3>
-          <p><em>As packaged by the host OS</em></p>
-          <ul>
-            <li>Rabbit</li>
-            <li>Qpid</li>
-<!--
-            <li>ZeroMQ</li>
--->
-          </ul>
-
-          <h3>Web Server</h3>
-          <p><em>As packaged by the host OS</em></p>
-          <ul>
-            <li>Apache</li>
-          </ul>
-
-          <h3>OpenStack Network</h3>
-          <p><em>Default to Nova Network, optionally use Neutron</em></p>
-          <ul>
-            <li>Nova Network: FlatDHCP</li>
-            <li>Neutron: A basic configuration approximating the original FlatDHCP mode using linuxbridge or OpenVSwitch.</li>
-          </ul>
-
-          <h3>Services</h3>
-          <p>The default services configured by DevStack are Identity (Keystone), Object Storage (Swift), Image Storage (Glance), Block Storage (Cinder), Compute (Nova), Network (Nova), Dashboard (Horizon), Orchestration (Heat)</p>
-          <p>Additional services not included directly in DevStack can be tied in to <code>stack.sh</code> using the <a href="plugins.html">plugin mechanism</a> to call scripts that perform the configuration and startup of the service.</p>
-
-          <h3>Node Configurations</h3>
-          <ul>
-            <li>single node</li>
-            <li>multi-node is not tested regularly by the core team, and even then only minimal configurations are reviewed</li>
-          </ul>
-
-          <h3>Exercises</h3>
-          <p>The DevStack exercise scripts are no longer used as integration and gate testing as that job has transitioned to Tempest.  They are still maintained as a demonstrations of using OpenStack from the command line and for quick operational testing.</p>
-
-        </div>        
-
-      </section>
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-  </body>
-</html>
diff --git a/docs/source/plugins.html b/docs/source/plugins.html
deleted file mode 100644
index 3327128..0000000
--- a/docs/source/plugins.html
+++ /dev/null
@@ -1,142 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>DevStack - Plugins</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="assets/css/bootstrap.css" rel="stylesheet">
-    <link href="assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-    
-    <!-- Le javascripts -->
-    <script src="assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="overview.html">Overview</a></li>
-            <li><a href="changes.html">Changes</a></li>
-            <li><a href="faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container" id="home">
-      
-      <section id="faq" class="span12">
-
-        <div class='row pull-left'>
-          <h2>Plugins <small>Add stuff</small></h2>
-          <p>DevStack has a couple of plugin mechanisms to allow easily adding support for additional projects and features.</p>
-
-          <h3>Extras.d Hooks</h3>
-          <p>These relatively new hooks are an extension of the existing calls from <code>stack.sh</code> at the end of its run, plus <code>unstack.sh</code> and <code>clean.sh</code>.  A number of the higher-layer projects are implemented in DevStack using this mechanism.</p>
-
-          <p>The script in <code>extras.d</code> is expected to be mostly a dispatcher to functions in a <code>lib/*</code> script.  The scripts are named with a zero-padded two digits sequence number prefix to control the order that the scripts are called, and with a suffix of <code>.sh</code>.  DevSack reserves for itself the sequence numbers 00 through 09 and 90 through 99.</p>
-
-          <p>Below is a template that shows handlers for the possible command-line arguments:</p>
-
-<pre>
-# template.sh - DevStack extras.d dispatch script template
-
-# check for service enabled
-if is_service_enabled template; then
-
-    if [[ "$1" == "source" ]]; then
-        # Initial source of lib script
-        source $TOP_DIR/lib/template
-    fi
-
-    if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then
-        # Set up system services
-        echo_summary "Configuring system services Template"
-        install_package cowsay
-
-    elif [[ "$1" == "stack" && "$2" == "install" ]]; then
-        # Perform installation of service source
-        echo_summary "Installing Template"
-        install_template
-
-    elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
-        # Configure after the other layer 1 and 2 services have been configured
-        echo_summary "Configuring Template"
-        configure_template
-
-    elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
-        # Initialize and start the template service
-        echo_summary "Initializing Template"
-        ##init_template
-    fi
-
-    if [[ "$1" == "unstack" ]]; then
-        # Shut down template services
-        # no-op
-        :
-    fi
-
-    if [[ "$1" == "clean" ]]; then
-        # Remove state and transient data
-        # Remember clean.sh first calls unstack.sh
-        # no-op
-        :
-    fi
-fi
-</pre>
-
-          <p>The arguments are:
-          <ul>
-            <li><strong>source</strong> - Called by each script that utilizes <code>extras.d</code> hooks; this replaces directly sourcing the <code>lib/*</code> script.</li>
-            <li><strong>stack</strong> - Called by <code>stack.sh</code> three times for different phases of its run:
-              <ul>
-                <li><strong>pre-install</strong> - Called after system (OS) setup is complete and before project source is installed.</li>
-                <li><strong>install</strong> - Called after the layer 1 and 2 projects source and their dependencies have been installed.</li>
-                <li><strong>post-config</strong> - Called after the layer 1 and 2 services have been configured.  All configuration files for enabled services should exist at this point.</li>
-                <li><strong>extra</strong> - Called near the end after layer 1 and 2 services have been started.  This is the existing hook and has not otherwise changed.</li>
-              </ul></li>
-            <li><strong>unstack</strong> - Called by <code>unstack.sh</code> before other services are shut down.</li>
-            <li><strong>clean</strong> - Called by <code>clean.sh</code> before other services are cleaned, but after <code>unstack.sh</code> has been called.
-          </ul></p>
-
-
-          <h3>Hypervisor</h3>
-          <p>Hypervisor plugins are fairly new and condense most hypervisor configuration into one place.</p>
-
-          <p>The initial plugin implemented was for Docker support and is a useful template for the required support.  Plugins are placed in <code>lib/nova_plugins</code> and named <code>hypervisor-&lt;name&gt;</code> where <code>&lt;name&gt;</code> is the value of <code>VIRT_DRIVER</code>.  Plugins must define the following functions:</p>
-            <ul>
-              <li><code>install_nova_hypervisor</code> - install any external requirements</li>
-              <li><code>configure_nova_hypervisor</code> - make configuration changes, including those to other services</li>
-              <li><code>start_nova_hypervisor</code> - start any external services</li>
-              <li><code>stop_nova_hypervisor</code> - stop any external services</li>
-              <li><code>cleanup_nova_hypervisor</code> - remove transient data and cache</li>
-            </ul>
-        </div>        
-
-      </section>
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2013 &mdash; An <a href="https://wiki.openstack.org/wiki/Programs">OpenStack program</a> created by <a href="http://www.rackspace.com/cloud/private_edition/">Rackspace Cloud Builders</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-  </body>
-</html>
diff --git a/docs/source/stackrc.html b/docs/source/stackrc.html
deleted file mode 100644
index 23a48c5..0000000
--- a/docs/source/stackrc.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>DevStack - stackrc</title>
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le styles -->
-    <link href="assets/css/bootstrap.css" rel="stylesheet">
-    <link href="assets/css/local.css" rel="stylesheet">
-    <style type="text/css">
-      body { padding-top: 60px; }
-      dd { padding: 10px; }
-    </style>
-    
-    <!-- Le javascripts -->
-    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
-  </head>
-
-  <body>
-
-    <div class="navbar navbar-fixed-top">
-      <div class="navbar-inner">
-        <div class="container">
-          <a class="brand" href="/">DevStack</a>
-          <ul class="nav pull-right">
-            <li><a href="overview.html">Overview</a></li>
-            <li><a href="changes.html">Changes</a></li>
-            <li><a href="faq.html">FAQ</a></li>
-            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
-            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
-          </ul>
-        </div>
-      </div>
-    </div>
-
-    <div class="container">
-
-      <section class="span12">
-        <div class="page-header">
-          <h2>stackrc <small>DevStack settings</small></h2>
-          <p><code>stackrc</code> is the primary configuration file for DevStack.
-          It contains all of the settings that control the services started
-          and the repositories used to download the source for those services.
-          <code>stackrc</code> sources the <code>localrc</code> section of
-          <code>local.conf</code> to perform the default overrides.</p>
-        </div>
-        <dl>
-
-          <dt>DATABASE_TYPE</dt>
-          <dd>Select the database backend to use.  The default is <code>mysql</code>,
-          <code>postgresql</code> is also available.</dd>
-
-          <dt>ENABLED_SERVICES</dt>
-          <dd>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, API, Volume), Horizon, MySQL, RabbitMQ, Tempest.
-            <pre>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</pre>
-            Other services that are not enabled by default can be enabled in
-            <code>localrc</code>. For example, to add Swift:
-            <pre>enable_service swift</pre>
-            A service can similarly be disabled:
-            <pre>disable_service horizon</pre></dd>
-
-          <dt>Service Repos</dt>
-          <dd>The Git repositories used to check out the source for each service
-            are controlled by a pair of variables set for each service.  
-            <code>*_REPO</code> points to the repository and <code>*_BRANCH</code>
-            selects which branch to check out.  These may be overridden in
-            <code>local.conf</code> to pull source from a different repo for testing,
-            such as a Gerrit branch proposal.  <code>GIT_BASE</code> points to the primary repository server.
-            <pre>NOVA_REPO=$GIT_BASE/openstack/nova.git
-NOVA_BRANCH=master</pre>
-            To pull a branch directly from Gerrit, get the repo and branch from the 
-            Gerrit review page:
-            <pre>git fetch https://review.openstack.org/p/openstack/nova refs/changes/50/5050/1 && git checkout FETCH_HEAD</pre>
-            The repo is the stanza following <code>fetch</code> and the branch
-            is the stanza following that:
-            <pre>NOVA_REPO=https://review.openstack.org/p/openstack/nova
-NOVA_BRANCH=refs/changes/50/5050/1</pre></dd>
-
-        </dl>
-      </section
-
-      <footer>
-        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
-      </footer>
-
-    </div> <!-- /container -->
-
-  </body>
-</html>
diff --git a/extras.d/60-ceph.sh b/extras.d/60-ceph.sh
index 5fb34ea..50bdfae 100644
--- a/extras.d/60-ceph.sh
+++ b/extras.d/60-ceph.sh
@@ -26,8 +26,9 @@
         if is_service_enabled cinder; then
             echo_summary "Configuring Cinder for Ceph"
             configure_ceph_cinder
-            # NOTE (leseb): the part below is a requirement from Cinder in order to attach volumes
-            # so we should run the following within the if statement.
+        fi
+        if is_service_enabled cinder || is_service_enabled nova; then
+            # NOTE (leseb): the part below is a requirement to attach Ceph block devices
             echo_summary "Configuring libvirt secret"
             import_libvirt_secret_ceph
         fi
diff --git a/files/apts/general b/files/apts/general
index c308c46..3fe7863 100644
--- a/files/apts/general
+++ b/files/apts/general
@@ -27,3 +27,4 @@
 libyaml-dev
 libffi-dev
 libssl-dev # for pyOpenSSL
+gettext  # used for compiling message catalogs
diff --git a/files/rpms/general b/files/rpms/general
index 7a35961..d4a9fcb 100644
--- a/files/rpms/general
+++ b/files/rpms/general
@@ -26,6 +26,7 @@
 which
 bc
 libyaml-devel
+gettext  # used for compiling message catalogs
 
 # [1] : some of installed tools have unversioned dependencies on this,
 # but others have versioned (<=0.7).  So if a later version (0.7.1)
diff --git a/functions b/functions
index bbde27d..bb40a48 100644
--- a/functions
+++ b/functions
@@ -48,10 +48,10 @@
         fi
         image="$FILES/${image_fname}"
     else
-        # File based URL (RFC 1738): file://host/path
+        # File based URL (RFC 1738): ``file://host/path``
         # Remote files are not considered here.
-        # *nix: file:///home/user/path/file
-        # windows: file:///C:/Documents%20and%20Settings/user/path/file
+        # unix: ``file:///home/user/path/file``
+        # windows: ``file:///C:/Documents%20and%20Settings/user/path/file``
         image=$(echo $image_url | sed "s/^file:\/\///g")
         if [[ ! -f $image || "$(stat -c "%s" $image)" == "0" ]]; then
             echo "Not found: $image_url"
@@ -100,7 +100,7 @@
         if [[ "$vmdk_create_type" = "monolithicSparse" ]]; then
             vmdk_disktype="sparse"
         elif [[ "$vmdk_create_type" = "monolithicFlat" || "$vmdk_create_type" = "vmfs" ]]; then
-            # Attempt to retrieve the *-flat.vmdk
+            # Attempt to retrieve the ``*-flat.vmdk``
             local flat_fname="$(head -25 $image | { grep -G 'RW\|RDONLY [0-9]+ FLAT\|VMFS' $image || true; })"
             flat_fname="${flat_fname#*\"}"
             flat_fname="${flat_fname%?}"
diff --git a/functions-common b/functions-common
index c597651..e48ceaf 100644
--- a/functions-common
+++ b/functions-common
@@ -19,6 +19,7 @@
 #
 # The following variables are assumed to be defined by certain functions:
 #
+# - ``GIT_DEPTH``
 # - ``ENABLED_SERVICES``
 # - ``ERROR_ON_CLONE``
 # - ``FILES``
@@ -31,6 +32,7 @@
 # - ``TRACK_DEPENDS``
 # - ``UNDO_REQUIREMENTS``
 # - ``http_proxy``, ``https_proxy``, ``no_proxy``
+#
 
 # Save trace setting
 XTRACE=$(set +o | grep xtrace)
@@ -118,6 +120,33 @@
     [ -n "$line" ]
 }
 
+# Add another config line for a multi-line option.
+# It's normally called after iniset of the same option and assumes
+# that the section already exists.
+#
+# Note that iniset_multiline requires all the 'lines' to be supplied
+# in the argument list. Doing that will cause incorrect configuration
+# if spaces are used in the config values.
+#
+# iniadd_literal config-file section option value
+function iniadd_literal {
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
+    local file=$1
+    local section=$2
+    local option=$3
+    local value=$4
+
+    [[ -z $section || -z $option ]] && return
+
+    # Add it
+    sed -i -e "/^\[$section\]/ a\\
+$option = $value
+" "$file"
+
+    $xtrace
+}
+
 # Set an option in an INI file
 # iniset config-file section option value
 function iniset {
@@ -521,8 +550,7 @@
 # ``get_release_name_from_branch branch-name``
 function get_release_name_from_branch {
     local branch=$1
-
-    if [[ $branch =~ "stable/" ]]; then
+    if [[ $branch =~ "stable/" || $branch =~ "proposed/" ]]; then
         echo ${branch#*/}
     else
         echo "master"
@@ -535,16 +563,22 @@
 # Set global ``RECLONE=yes`` to simulate a clone when dest-dir exists
 # Set global ``ERROR_ON_CLONE=True`` to abort execution with an error if the git repo
 # does not exist (default is False, meaning the repo will be cloned).
-# Uses globals ``ERROR_ON_CLONE``, ``OFFLINE``, ``RECLONE``
+# Set global ``GIT_DEPTH=<number>`` to limit the history depth of the git clone
+# Uses globals ``ERROR_ON_CLONE``, ``OFFLINE``, ``RECLONE``, ``GIT_DEPTH``
 # git_clone remote dest-dir branch
 function git_clone {
     local git_remote=$1
     local git_dest=$2
     local git_ref=$3
     local orig_dir=$(pwd)
+    local git_clone_flags=""
 
     RECLONE=$(trueorfalse False $RECLONE)
 
+    if [[ "$GIT_DEPTH" ]]; then
+        git_clone_flags="$git_clone_flags --depth $GIT_DEPTH"
+    fi
+
     if [[ "$OFFLINE" = "True" ]]; then
         echo "Running in offline mode, clones already exist"
         # print out the results so we know what change was used in the logs
@@ -559,7 +593,7 @@
         if [[ ! -d $git_dest ]]; then
             [[ "$ERROR_ON_CLONE" = "True" ]] && \
                 die $LINENO "Cloning not allowed in this configuration"
-            git_timed clone $git_remote $git_dest
+            git_timed clone $git_clone_flags $git_remote $git_dest
         fi
         cd $git_dest
         git_timed fetch $git_remote $git_ref && git checkout FETCH_HEAD
@@ -568,7 +602,7 @@
         if [[ ! -d $git_dest ]]; then
             [[ "$ERROR_ON_CLONE" = "True" ]] && \
                 die $LINENO "Cloning not allowed in this configuration"
-            git_timed clone $git_remote $git_dest
+            git_timed clone $git_clone_flags $git_remote $git_dest
             cd $git_dest
             # This checkout syntax works for both branches and tags
             git checkout $git_ref
@@ -763,38 +797,70 @@
     mv ${tmpfile} ${policy_file}
 }
 
+# Gets or creates a domain
+# Usage: get_or_create_domain <name> <description>
+function get_or_create_domain {
+    local os_url="$KEYSTONE_SERVICE_URI/v3"
+    # Gets domain id
+    local domain_id=$(
+        # Gets domain id
+        openstack --os-token=$OS_TOKEN --os-url=$os_url \
+            --os-identity-api-version=3 domain show $1 \
+            -f value -c id 2>/dev/null ||
+        # Creates new domain
+        openstack --os-token=$OS_TOKEN --os-url=$os_url \
+            --os-identity-api-version=3 domain create $1 \
+            --description "$2" \
+            -f value -c id
+    )
+    echo $domain_id
+}
+
 # Gets or creates user
-# Usage: get_or_create_user <username> <password> <project> [<email>]
+# Usage: get_or_create_user <username> <password> <project> [<email> [<domain>]]
 function get_or_create_user {
     if [[ ! -z "$4" ]]; then
         local email="--email=$4"
     else
         local email=""
     fi
+    local os_cmd="openstack"
+    local domain=""
+    if [[ ! -z "$5" ]]; then
+        domain="--domain=$5"
+        os_cmd="$os_cmd --os-url=$KEYSTONE_SERVICE_URI/v3 --os-identity-api-version=3"
+    fi
     # Gets user id
     local user_id=$(
         # Gets user id
-        openstack user show $1 -f value -c id 2>/dev/null ||
+        $os_cmd user show $1 $domain -f value -c id 2>/dev/null ||
         # Creates new user
-        openstack user create \
+        $os_cmd user create \
             $1 \
             --password "$2" \
             --project $3 \
             $email \
+            $domain \
             -f value -c id
     )
     echo $user_id
 }
 
 # Gets or creates project
-# Usage: get_or_create_project <name>
+# Usage: get_or_create_project <name> [<domain>]
 function get_or_create_project {
     # Gets project id
+    local os_cmd="openstack"
+    local domain=""
+    if [[ ! -z "$2" ]]; then
+        domain="--domain=$2"
+        os_cmd="$os_cmd --os-url=$KEYSTONE_SERVICE_URI/v3 --os-identity-api-version=3"
+    fi
     local project_id=$(
         # Gets project id
-        openstack project show $1 -f value -c id 2>/dev/null ||
+        $os_cmd project show $1 $domain -f value -c id 2>/dev/null ||
         # Creates new project if not exists
-        openstack project create $1 -f value -c id
+        $os_cmd project create $1 $domain -f value -c id
     )
     echo $project_id
 }
@@ -1224,7 +1290,7 @@
 
     if is_service_enabled $service; then
         if [[ "$USE_SCREEN" = "True" ]]; then
-            screen_service "$service" "$command" "$group"
+            screen_process "$service" "$command" "$group"
         else
             # Spawn directly without screen
             _run_process "$service" "$command" "$group" &
@@ -1232,14 +1298,14 @@
     fi
 }
 
-# Helper to launch a service in a named screen
+# Helper to launch a process in a named screen
 # Uses globals ``CURRENT_LOG_TIME``, ``SCREEN_NAME``, ``SCREEN_LOGDIR``,
 # ``SERVICE_DIR``, ``USE_SCREEN``
-# screen_service service "command-line" [group]
+# screen_process name "command-line" [group]
 # Run a command in a shell in a screen window, if an optional group
 # is provided, use sg to set the group of the command.
-function screen_service {
-    local service=$1
+function screen_process {
+    local name=$1
     local command="$2"
     local group=$3
 
@@ -1247,37 +1313,36 @@
     SERVICE_DIR=${SERVICE_DIR:-${DEST}/status}
     USE_SCREEN=$(trueorfalse True $USE_SCREEN)
 
-    if is_service_enabled $service; then
-        # Append the service to the screen rc file
-        screen_rc "$service" "$command"
+    # Append the process to the screen rc file
+    screen_rc "$name" "$command"
 
-        screen -S $SCREEN_NAME -X screen -t $service
+    screen -S $SCREEN_NAME -X screen -t $name
 
-        if [[ -n ${SCREEN_LOGDIR} ]]; then
-            screen -S $SCREEN_NAME -p $service -X logfile ${SCREEN_LOGDIR}/screen-${service}.${CURRENT_LOG_TIME}.log
-            screen -S $SCREEN_NAME -p $service -X log on
-            ln -sf ${SCREEN_LOGDIR}/screen-${service}.${CURRENT_LOG_TIME}.log ${SCREEN_LOGDIR}/screen-${service}.log
-        fi
-
-        # sleep to allow bash to be ready to be send the command - we are
-        # creating a new window in screen and then sends characters, so if
-        # bash isn't running by the time we send the command, nothing happens
-        sleep 3
-
-        NL=`echo -ne '\015'`
-        # This fun command does the following:
-        # - the passed server command is backgrounded
-        # - the pid of the background process is saved in the usual place
-        # - the server process is brought back to the foreground
-        # - if the server process exits prematurely the fg command errors
-        #   and a message is written to stdout and the service failure file
-        # The pid saved can be used in stop_process() as a process group
-        # id to kill off all child processes
-        if [[ -n "$group" ]]; then
-            command="sg $group '$command'"
-        fi
-        screen -S $SCREEN_NAME -p $service -X stuff "$command & echo \$! >$SERVICE_DIR/$SCREEN_NAME/${service}.pid; fg || echo \"$service failed to start\" | tee \"$SERVICE_DIR/$SCREEN_NAME/${service}.failure\"$NL"
+    if [[ -n ${SCREEN_LOGDIR} ]]; then
+        screen -S $SCREEN_NAME -p $name -X logfile ${SCREEN_LOGDIR}/screen-${name}.${CURRENT_LOG_TIME}.log
+        screen -S $SCREEN_NAME -p $name -X log on
+        ln -sf ${SCREEN_LOGDIR}/screen-${name}.${CURRENT_LOG_TIME}.log ${SCREEN_LOGDIR}/screen-${name}.log
     fi
+
+    # sleep to allow bash to be ready to be send the command - we are
+    # creating a new window in screen and then sends characters, so if
+    # bash isn't running by the time we send the command, nothing happens
+    sleep 3
+
+    NL=`echo -ne '\015'`
+    # This fun command does the following:
+    # - the passed server command is backgrounded
+    # - the pid of the background process is saved in the usual place
+    # - the server process is brought back to the foreground
+    # - if the server process exits prematurely the fg command errors
+    # and a message is written to stdout and the process failure file
+    #
+    # The pid saved can be used in stop_process() as a process group
+    # id to kill off all child processes
+    if [[ -n "$group" ]]; then
+        command="sg $group '$command'"
+    fi
+    screen -S $SCREEN_NAME -p $name -X stuff "$command & echo \$! >$SERVICE_DIR/$SCREEN_NAME/${name}.pid; fg || echo \"$name failed to start\" | tee \"$SERVICE_DIR/$SCREEN_NAME/${name}.failure\"$NL"
 }
 
 # Screen rc file builder
@@ -1384,12 +1449,12 @@
 
 # Tail a log file in a screen if USE_SCREEN is true.
 function tail_log {
-    local service=$1
+    local name=$1
     local logfile=$2
 
     USE_SCREEN=$(trueorfalse True $USE_SCREEN)
     if [[ "$USE_SCREEN" = "True" ]]; then
-        screen_service "$service" "sudo tail -f $logfile"
+        screen_process "$name" "sudo tail -f $logfile"
     fi
 }
 
@@ -1448,7 +1513,7 @@
         screen_rc "$1" "$2"
 
         if [[ "$USE_SCREEN" = "True" ]]; then
-            screen_service "$1" "$2"
+            screen_process "$1" "$2"
         else
             # Spawn directly without screen
             old_run_process "$1" "$2" >$SERVICE_DIR/$SCREEN_NAME/$1.pid
diff --git a/lib/ceilometer b/lib/ceilometer
index 9bb3121..9046b9d 100644
--- a/lib/ceilometer
+++ b/lib/ceilometer
@@ -73,13 +73,12 @@
 }
 
 # create_ceilometer_accounts() - Set up common required ceilometer accounts
-
+#
 # Project              User         Roles
 # ------------------------------------------------------------------
 # SERVICE_TENANT_NAME  ceilometer   admin
 # SERVICE_TENANT_NAME  ceilometer   ResellerAdmin (if Swift is enabled)
-
-create_ceilometer_accounts() {
+function create_ceilometer_accounts {
 
     local service_tenant=$(openstack project list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
     local admin_role=$(openstack role list | awk "/ admin / { print \$2 }")
@@ -156,6 +155,11 @@
     iniset $CEILOMETER_CONF DEFAULT verbose True
     iniset $CEILOMETER_CONF DEFAULT debug "$ENABLE_DEBUG_LOG_LEVEL"
 
+    if [[ -n "$CEILOMETER_COORDINATION_URL" ]]; then
+        iniset $CEILOMETER_CONF coordination backend_url $CEILOMETER_COORDINATION_URL
+        iniset $CEILOMETER_CONF compute workload_partitioning True
+    fi
+
     # Install the policy file for the API server
     cp $CEILOMETER_DIR/etc/ceilometer/policy.json $CEILOMETER_CONF_DIR
     iniset $CEILOMETER_CONF DEFAULT policy_file $CEILOMETER_CONF_DIR/policy.json
@@ -178,7 +182,7 @@
     configure_auth_token_middleware $CEILOMETER_CONF ceilometer $CEILOMETER_AUTH_CACHE_DIR
 
     if [ "$CEILOMETER_BACKEND" = 'mysql' ] || [ "$CEILOMETER_BACKEND" = 'postgresql' ] ; then
-        iniset $CEILOMETER_CONF database connection `database_connection_url ceilometer`
+        iniset $CEILOMETER_CONF database connection $(database_connection_url ceilometer)
         iniset $CEILOMETER_CONF DEFAULT collector_workers $API_WORKERS
     else
         iniset $CEILOMETER_CONF database connection mongodb://localhost:27017/ceilometer
@@ -243,6 +247,9 @@
     git_clone $CEILOMETER_REPO $CEILOMETER_DIR $CEILOMETER_BRANCH
     setup_develop $CEILOMETER_DIR
 
+    if echo $CEILOMETER_COORDINATION_URL | grep -q '^memcached:'; then
+        install_package memcached
+    fi
 }
 
 # install_ceilometerclient() - Collect source and prepare
diff --git a/lib/ceph b/lib/ceph
index 30ca903..e55738c 100644
--- a/lib/ceph
+++ b/lib/ceph
@@ -197,8 +197,12 @@
     fi
     sudo ceph -c ${CEPH_CONF_FILE} auth get-or-create client.${GLANCE_CEPH_USER} mon "allow r" osd "allow class-read object_prefix rbd_children, allow rwx pool=${GLANCE_CEPH_POOL}" | sudo tee ${CEPH_CONF_DIR}/ceph.client.${GLANCE_CEPH_USER}.keyring
     sudo chown ${STACK_USER}:$(id -g -n $whoami) ${CEPH_CONF_DIR}/ceph.client.${GLANCE_CEPH_USER}.keyring
+
+    # NOTE(eharney): When Glance has fully migrated to Glance store,
+    # default_store can be removed from [DEFAULT].  (See lib/glance.)
     iniset $GLANCE_API_CONF DEFAULT default_store rbd
     iniset $GLANCE_API_CONF DEFAULT show_image_direct_url True
+    iniset $GLANCE_API_CONF glance_store default_store rbd
     iniset $GLANCE_API_CONF glance_store stores "file, http, rbd"
     iniset $GLANCE_API_CONF glance_store rbd_store_ceph_conf $CEPH_CONF_FILE
     iniset $GLANCE_API_CONF glance_store rbd_store_user $GLANCE_CEPH_USER
@@ -221,6 +225,11 @@
     iniset $NOVA_CONF libvirt images_type rbd
     iniset $NOVA_CONF libvirt images_rbd_pool ${NOVA_CEPH_POOL}
     iniset $NOVA_CONF libvirt images_rbd_ceph_conf ${CEPH_CONF_FILE}
+
+    if ! is_service_enabled cinder; then
+        sudo ceph -c ${CEPH_CONF_FILE} auth get-or-create client.${CINDER_CEPH_USER} mon "allow r" osd "allow class-read object_prefix rbd_children, allow rwx pool=${CINDER_CEPH_POOL}, allow rwx pool=${NOVA_CEPH_POOL},allow rx pool=${GLANCE_CEPH_POOL}" | sudo tee ${CEPH_CONF_DIR}/ceph.client.${CINDER_CEPH_USER}.keyring > /dev/null
+        sudo chown ${STACK_USER}:$(id -g -n $whoami) ${CEPH_CONF_DIR}/ceph.client.${CINDER_CEPH_USER}.keyring
+    fi
 }
 
 # configure_ceph_cinder() - Cinder config needs to come after Cinder is set up
diff --git a/lib/cinder_backends/xiv b/lib/cinder_backends/xiv
index dbdb96c..ee5da2d 100644
--- a/lib/cinder_backends/xiv
+++ b/lib/cinder_backends/xiv
@@ -16,6 +16,7 @@
 #
 # Authors:
 #   Alon Marx <alonma@il.ibm.com>
+#
 
 # lib/cinder_plugins/xiv
 # Configure the xiv_ds8k driver for xiv testing
@@ -61,7 +62,7 @@
     fi
 
     # For reference:
-    # XIV_DS8K_BACKEND='IBM-XIV_'${SAN_IP}'_'${SAN_CLUSTERNAME}'_'${CONNECTION_TYPE}
+    # ``XIV_DS8K_BACKEND='IBM-XIV_'${SAN_IP}'_'${SAN_CLUSTERNAME}'_'${CONNECTION_TYPE}``
     iniset $CINDER_CONF DEFAULT xiv_ds8k_driver_version $XIV_DRIVER_VERSION
 
     iniset $CINDER_CONF $be_name san_ip $SAN_IP
diff --git a/lib/config b/lib/config
index 0baa4cc..a4d59a3 100644
--- a/lib/config
+++ b/lib/config
@@ -82,9 +82,15 @@
     local matchgroup=$2
     local configfile=$3
 
+    # note in the awk below, \x27 is ascii for ' -- this avoids
+    # having to do nasty quoting games
     get_meta_section $file $matchgroup $configfile | \
     $CONFIG_AWK_CMD -v configfile=$configfile '
-        BEGIN { section = "" }
+        BEGIN {
+            section = ""
+            last_section = ""
+            section_count = 0
+        }
         /^\[.+\]/ {
             gsub("[][]", "", $1);
             section=$1
@@ -94,11 +100,58 @@
             next
         }
         /^[^ \t]+/ {
-            split($0, d, " *= *")
-            print "iniset " configfile " " section " " d[1] " \"" d[2] "\""
+            # get offset of first '=' in $0
+            eq_idx = index($0, "=")
+            # extract attr & value from $0
+            attr = substr($0, 1, eq_idx - 1)
+            value = substr($0, eq_idx + 1)
+            # only need to strip trailing whitespace from attr
+            sub(/[ \t]*$/, "", attr)
+            # need to strip leading & trailing whitespace from value
+            sub(/^[ \t]*/, "", value)
+            sub(/[ \t]*$/, "", value)
+
+            # cfg_attr_count: number of config lines per [section, attr]
+            # cfg_attr: three dimensional array to keep all the config lines per [section, attr]
+            # cfg_section: keep the section names in the same order as they appear in local.conf
+            # cfg_sec_attr_name: keep the attr names in the same order as they appear in local.conf
+            if (! (section, attr) in cfg_attr_count) {
+                if (section != last_section) {
+                    cfg_section[section_count++] = section
+                    last_section = section
+                }
+                attr_count = cfg_sec_attr_count[section_count - 1]++
+                cfg_sec_attr_name[section_count - 1, attr_count] = attr
+
+                cfg_attr[section, attr, 0] = value
+                cfg_attr_count[section, attr] = 1
+            } else {
+                lno = cfg_attr_count[section, attr]++
+                cfg_attr[section, attr, lno] = value
+            }
+        }
+        END {
+            # Process each section in order
+            for (sno = 0; sno < section_count; sno++) {
+                section = cfg_section[sno]
+                # The ini routines simply append a config item immediately
+                # after the section header. To keep the same order as defined
+                # in local.conf, invoke the ini routines in the reverse order
+                for (attr_no = cfg_sec_attr_count[sno] - 1; attr_no >=0; attr_no--) {
+                    attr = cfg_sec_attr_name[sno, attr_no]
+                    if (cfg_attr_count[section, attr] == 1)
+                        print "iniset " configfile " " section " " attr " \x27" cfg_attr[section, attr, 0] "\x27"
+                    else {
+                        # For multiline, invoke the ini routines in the reverse order
+                        count = cfg_attr_count[section, attr]
+                        print "iniset " configfile " " section " " attr " \x27" cfg_attr[section, attr, count - 1] "\x27"
+                        for (l = count -2; l >= 0; l--)
+                            print "iniadd_literal " configfile " " section " " attr " \x27" cfg_attr[section, attr, l] "\x27"
+                    }
+                }
+            }
         }
     ' | while read a; do eval "$a"; done
-
 }
 
 
diff --git a/lib/dib b/lib/dib
index d39d801..30b31ec 100644
--- a/lib/dib
+++ b/lib/dib
@@ -20,13 +20,28 @@
 # set up default directories
 DIB_DIR=$DEST/diskimage-builder
 TIE_DIR=$DEST/tripleo-image-elements
+
+# NOTE: Setting DIB_APT_SOURCES assumes you will be building
+# Debian/Ubuntu based images. Leave unset for other flavors.
+DIB_APT_SOURCES=${DIB_APT_SOURCES:-""}
+DIB_BUILD_OFFLINE=$(trueorfalse False $DIB_BUILD_OFFLINE)
 DIB_IMAGE_CACHE=$DATA_DIR/diskimage-builder/image-create
 DIB_PIP_REPO=$DATA_DIR/diskimage-builder/pip-repo
 DIB_PIP_REPO_PORT=${DIB_PIP_REPO_PORT:-8899}
+
 OCC_DIR=$DEST/os-collect-config
 ORC_DIR=$DEST/os-refresh-config
 OAC_DIR=$DEST/os-apply-config
 
+# Include the apt-sources element in builds if we have an
+# alternative sources.list specified.
+if [ -n "$DIB_APT_SOURCES" ]; then
+    if [ ! -e "$DIB_APT_SOURCES" ]; then
+        die $LINENO "DIB_APT_SOURCES set but not found at $DIB_APT_SOURCES"
+    fi
+    EXTRA_ELEMENTS="apt-sources"
+fi
+
 # Functions
 # ---------
 
@@ -106,9 +121,11 @@
 
     # The disk-image-create command to run
     ELEMENTS_PATH=$elements_path \
+    DIB_APT_SOURCES=$DIB_APT_SOURCES \
+    DIB_OFFLINE=$DIB_BUILD_OFFLINE \
     PYPI_MIRROR_URL=$pypi_mirror_url \
     PYPI_MIRROR_URL_1=$pypi_mirror_url_1 \
-    disk-image-create -a amd64 $image_elements \
+    disk-image-create -a amd64 $image_elements $EXTRA_ELEMENTS \
         --image-cache $DIB_IMAGE_CACHE \
         -o $image_path
 
diff --git a/lib/heat b/lib/heat
index 737598d..53eca25 100644
--- a/lib/heat
+++ b/lib/heat
@@ -276,7 +276,7 @@
                 --os-identity-api-version=3 domain create heat \
                 --description "Owns users and projects created by heat" \
                 | grep ' id ' | get_field 2)
-            iniset $HEAT_CONF DEFAULT stack_user_domain ${D_ID}
+            iniset $HEAT_CONF DEFAULT stack_user_domain_id ${D_ID}
 
             openstack --os-token $OS_TOKEN --os-url=$ks_endpoint_v3 \
                 --os-identity-api-version=3 user create --password $SERVICE_PASSWORD \
diff --git a/lib/horizon b/lib/horizon
index 755be18..0213948 100644
--- a/lib/horizon
+++ b/lib/horizon
@@ -84,6 +84,14 @@
 # configure_horizon() - Set config files, create data dirs, etc
 function configure_horizon {
     setup_develop $HORIZON_DIR
+
+    # Compile message catalogs.
+    # 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 -
 }
 
 # init_horizon() - Initialize databases, etc.
@@ -138,6 +146,13 @@
 # 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
 }
 
@@ -160,6 +175,13 @@
     stop_apache_server
 }
 
+# NOTE: It can be moved to common functions, but it is only used by compilation
+# of django_openstack_auth catalogs at the moment.
+function _prepare_message_catalog_compilation {
+    local babel_package=$(grep ^Babel $REQUIREMENTS_DIR/global-requirements.txt)
+    pip_install "$babel_package"
+}
+
 
 # Restore xtrace
 $XTRACE
diff --git a/lib/ironic b/lib/ironic
index 5f3ebcd..0a84e47 100644
--- a/lib/ironic
+++ b/lib/ironic
@@ -281,7 +281,8 @@
         fi
         iniset $IRONIC_CONF_FILE glance swift_endpoint_url http://${HOST_IP}:8080
         iniset $IRONIC_CONF_FILE glance swift_api_version v1
-        iniset $IRONIC_CONF_FILE glance swift_account AUTH_${SERVICE_TENANT}
+        local tenant_id=$(get_or_create_project $SERVICE_TENANT_NAME)
+        iniset $IRONIC_CONF_FILE glance swift_account AUTH_${tenant_id}
         iniset $IRONIC_CONF_FILE glance swift_container glance
         iniset $IRONIC_CONF_FILE glance swift_temp_url_duration 3600
         iniset $IRONIC_CONF_FILE agent heartbeat_timeout 30
@@ -354,6 +355,15 @@
     create_ironic_cache_dir
 }
 
+# _ironic_bm_vm_names() - Generates list of names for baremetal VMs.
+function _ironic_bm_vm_names {
+    local idx
+    local num_vms=$(($IRONIC_VM_COUNT - 1))
+    for idx in $(seq 0 $num_vms); do
+        echo "baremetal${IRONIC_VM_NETWORK_BRIDGE}_${idx}"
+    done
+}
+
 # start_ironic() - Start running processes, including screen
 function start_ironic {
     # Start Ironic API server, if enabled.
@@ -449,10 +459,13 @@
     else
         local log_arg=""
     fi
-    sudo su $STACK_USER -c "$IRONIC_SCRIPTS_DIR/create-nodes \
-        $IRONIC_VM_SPECS_CPU $IRONIC_VM_SPECS_RAM $IRONIC_VM_SPECS_DISK \
-        amd64 $IRONIC_VM_COUNT $IRONIC_VM_NETWORK_BRIDGE $IRONIC_VM_EMULATOR \
-        $log_arg" >> $IRONIC_VM_MACS_CSV_FILE
+    local vm_name
+    for vm_name in $(_ironic_bm_vm_names); do
+        sudo su $STACK_USER -c "$IRONIC_SCRIPTS_DIR/create-node $vm_name \
+            $IRONIC_VM_SPECS_CPU $IRONIC_VM_SPECS_RAM $IRONIC_VM_SPECS_DISK \
+            amd64 $IRONIC_VM_NETWORK_BRIDGE $IRONIC_VM_EMULATOR \
+            $log_arg" >> $IRONIC_VM_MACS_CSV_FILE
+    done
     create_ovs_taps
 }
 
@@ -655,7 +668,12 @@
         chmod 0600 $IRONIC_AUTHORIZED_KEYS_FILE
     fi
     sudo rm -rf $IRONIC_DATA_DIR $IRONIC_STATE_PATH
-    sudo su $STACK_USER -c "$IRONIC_SCRIPTS_DIR/cleanup-nodes $IRONIC_VM_COUNT $IRONIC_VM_NETWORK_BRIDGE"
+
+    local vm_name
+    for vm_name in $(_ironic_bm_vm_names); do
+        sudo su $STACK_USER -c "$IRONIC_SCRIPTS_DIR/cleanup-node $vm_name $IRONIC_VM_NETWORK_BRIDGE"
+    done
+
     sudo rm -rf /etc/xinetd.d/tftp /etc/init/tftpd-hpa.override
     restart_service xinetd
     sudo iptables -D INPUT -d $HOST_IP -p udp --dport 69 -j ACCEPT || true
diff --git a/lib/neutron b/lib/neutron
index a48f519..ca9b16c 100644
--- a/lib/neutron
+++ b/lib/neutron
@@ -148,16 +148,31 @@
 # If Q_USE_PROVIDERNET_FOR_PUBLIC=True, use a flat provider network
 # for external interface of neutron l3-agent.  In that case,
 # PUBLIC_PHYSICAL_NETWORK specifies provider:physical_network value
-# used for the network.  In case of openvswitch agent, you should
-# add the corresponding entry to your OVS_BRIDGE_MAPPINGS.
+# used for the network.  In case of ofagent, you should add the
+# corresponding entry to your OFAGENT_PHYSICAL_INTERFACE_MAPPINGS.
+# For openvswitch agent, you should add the corresponding entry to
+# your OVS_BRIDGE_MAPPINGS.
 #
-# eg.
+# eg.  (ofagent)
+#    Q_USE_PROVIDERNET_FOR_PUBLIC=True
+#    Q_USE_PUBLIC_VETH=True
+#    PUBLIC_PHYSICAL_NETWORK=public
+#    OFAGENT_PHYSICAL_INTERFACE_MAPPINGS=public:veth-pub-int
+#
+# eg.  (openvswitch agent)
 #    Q_USE_PROVIDERNET_FOR_PUBLIC=True
 #    PUBLIC_PHYSICAL_NETWORK=public
 #    OVS_BRIDGE_MAPPINGS=public:br-ex
 Q_USE_PROVIDERNET_FOR_PUBLIC=${Q_USE_PROVIDERNET_FOR_PUBLIC:-False}
 PUBLIC_PHYSICAL_NETWORK=${PUBLIC_PHYSICAL_NETWORK:-public}
 
+# If Q_USE_PUBLIC_VETH=True, create and use a veth pair instead of
+# PUBLIC_BRIDGE.  This is intended to be used with
+# Q_USE_PROVIDERNET_FOR_PUBLIC=True.
+Q_USE_PUBLIC_VETH=${Q_USE_PUBLIC_VETH:-False}
+Q_PUBLIC_VETH_EX=${Q_PUBLIC_VETH_EX:-veth-pub-ex}
+Q_PUBLIC_VETH_INT=${Q_PUBLIC_VETH_INT:-veth-pub-int}
+
 # The next two variables are configured by plugin
 # e.g.  _configure_neutron_l3_agent or lib/neutron_plugins/*
 #
@@ -186,9 +201,10 @@
 
 # Distributed Virtual Router (DVR) configuration
 # Can be:
-#     legacy   - No DVR functionality
-#     dvr_snat - Controller or single node DVR
-#     dvr      - Compute node in multi-node DVR
+# - ``legacy``   - No DVR functionality
+# - ``dvr_snat`` - Controller or single node DVR
+# - ``dvr``      - Compute node in multi-node DVR
+#
 Q_DVR_MODE=${Q_DVR_MODE:-legacy}
 if [[ "$Q_DVR_MODE" != "legacy" ]]; then
     Q_ML2_PLUGIN_MECHANISM_DRIVERS=openvswitch,linuxbridge,l2population
@@ -542,12 +558,20 @@
         if is_service_enabled q-l3; then
             # logic is specific to using the l3-agent for l3
             if is_neutron_ovs_base_plugin && [[ "$Q_USE_NAMESPACE" = "True" ]]; then
-                # Disable in-band as we are going to use local port
-                # to communicate with VMs
-                sudo ovs-vsctl set Bridge $PUBLIC_BRIDGE other_config:disable-in-band=true
+                local ext_gw_interface
+
+                if [[ "$Q_USE_PUBLIC_VETH" = "True" ]]; then
+                    ext_gw_interface=$Q_PUBLIC_VETH_EX
+                else
+                    # Disable in-band as we are going to use local port
+                    # to communicate with VMs
+                    sudo ovs-vsctl set Bridge $PUBLIC_BRIDGE \
+                        other_config:disable-in-band=true
+                    ext_gw_interface=$PUBLIC_BRIDGE
+                fi
                 CIDR_LEN=${FLOATING_RANGE#*/}
-                sudo ip addr add $EXT_GW_IP/$CIDR_LEN dev $PUBLIC_BRIDGE
-                sudo ip link set $PUBLIC_BRIDGE up
+                sudo ip addr add $EXT_GW_IP/$CIDR_LEN dev $ext_gw_interface
+                sudo ip link set $ext_gw_interface up
                 ROUTER_GW_IP=`neutron port-list -c fixed_ips -c device_owner | grep router_gateway | awk -F '"' '{ print $8; }'`
                 die_if_not_set $LINENO ROUTER_GW_IP "Failure retrieving ROUTER_GW_IP"
                 sudo route add -net $FIXED_RANGE gw $ROUTER_GW_IP
diff --git a/lib/neutron_plugins/cisco b/lib/neutron_plugins/cisco
index 1406e37..95e0ab3 100644
--- a/lib/neutron_plugins/cisco
+++ b/lib/neutron_plugins/cisco
@@ -82,6 +82,7 @@
 }
 
 function neutron_plugin_configure_debug_command {
+    :
 }
 
 function neutron_plugin_configure_dhcp_agent {
@@ -89,6 +90,7 @@
 }
 
 function neutron_plugin_configure_l3_agent {
+    :
 }
 
 # Configure n1kv plugin
@@ -111,6 +113,7 @@
 }
 
 function neutron_plugin_configure_plugin_agent {
+    :
 }
 
 function neutron_plugin_configure_service {
diff --git a/lib/neutron_plugins/ofagent_agent b/lib/neutron_plugins/ofagent_agent
index a5a58f4..1c04f2f 100644
--- a/lib/neutron_plugins/ofagent_agent
+++ b/lib/neutron_plugins/ofagent_agent
@@ -77,6 +77,10 @@
     if [[ "$OVS_BRIDGE_MAPPINGS" != "" ]]; then
         iniset /$Q_PLUGIN_CONF_FILE ovs bridge_mappings $OVS_BRIDGE_MAPPINGS
     fi
+    if [[ "$OFAGENT_PHYSICAL_INTERFACE_MAPPINGS" != "" ]]; then
+        iniset /$Q_PLUGIN_CONF_FILE agent physical_interface_mappings \
+            $OFAGENT_PHYSICAL_INTERFACE_MAPPINGS
+    fi
     AGENT_BINARY="$NEUTRON_BIN_DIR/neutron-ofagent-agent"
 
     iniset /$Q_PLUGIN_CONF_FILE agent tunnel_types $Q_TUNNEL_TYPES
diff --git a/lib/neutron_plugins/oneconvergence b/lib/neutron_plugins/oneconvergence
index e5f0d71..4fd8c7c 100644
--- a/lib/neutron_plugins/oneconvergence
+++ b/lib/neutron_plugins/oneconvergence
@@ -1,5 +1,6 @@
 # Neutron One Convergence plugin
-# ---------------------------
+# ------------------------------
+
 # Save trace setting
 OC_XTRACE=$(set +o | grep xtrace)
 set +o xtrace
diff --git a/lib/neutron_plugins/ovs_base b/lib/neutron_plugins/ovs_base
index d913f7c..f0ef194 100644
--- a/lib/neutron_plugins/ovs_base
+++ b/lib/neutron_plugins/ovs_base
@@ -79,11 +79,20 @@
     fi
 
     neutron-ovs-cleanup
-    # --no-wait causes a race condition if $PUBLIC_BRIDGE is not up when ip addr flush is called
-    sudo ovs-vsctl -- --may-exist add-br $PUBLIC_BRIDGE
-    sudo ovs-vsctl br-set-external-id $PUBLIC_BRIDGE bridge-id $PUBLIC_BRIDGE
-    # ensure no IP is configured on the public bridge
-    sudo ip addr flush dev $PUBLIC_BRIDGE
+    if [[ "$Q_USE_PUBLIC_VETH" = "True" ]]; then
+        ip link show $Q_PUBLIC_VETH_INT > /dev/null 2>&1 ||
+        sudo ip link add $Q_PUBLIC_VETH_INT type veth \
+            peer name $Q_PUBLIC_VETH_EX
+        sudo ip link set $Q_PUBLIC_VETH_INT up
+        sudo ip link set $Q_PUBLIC_VETH_EX up
+        sudo ip addr flush dev $Q_PUBLIC_VETH_EX
+    else
+        # --no-wait causes a race condition if $PUBLIC_BRIDGE is not up when ip addr flush is called
+        sudo ovs-vsctl -- --may-exist add-br $PUBLIC_BRIDGE
+        sudo ovs-vsctl br-set-external-id $PUBLIC_BRIDGE bridge-id $PUBLIC_BRIDGE
+        # ensure no IP is configured on the public bridge
+        sudo ip addr flush dev $PUBLIC_BRIDGE
+    fi
 }
 
 function _neutron_ovs_base_configure_nova_vif_driver {
diff --git a/lib/nova b/lib/nova
index fa57432..f47dc97 100644
--- a/lib/nova
+++ b/lib/nova
@@ -330,14 +330,12 @@
 }
 
 # create_nova_accounts() - Set up common required nova accounts
-
+#
 # Project              User         Roles
 # ------------------------------------------------------------------
 # SERVICE_TENANT_NAME  nova         admin
 # SERVICE_TENANT_NAME  nova         ResellerAdmin (if Swift is enabled)
-
-# Migrated from keystone_data.sh
-create_nova_accounts() {
+function create_nova_accounts {
 
     local service_tenant=$(openstack project list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
     local admin_role=$(openstack role list | awk "/ admin / { print \$2 }")
@@ -706,7 +704,7 @@
 
     if [[ "$VIRT_DRIVER" = 'libvirt' ]]; then
         # The group **$LIBVIRT_GROUP** is added to the current user in this script.
-        # sg' will be used in run_process to execute nova-compute as a member of the
+        # ``sg`` is used in run_process to execute nova-compute as a member of the
         # **$LIBVIRT_GROUP** group.
         run_process n-cpu "$NOVA_BIN_DIR/nova-compute --config-file $compute_cell_conf" $LIBVIRT_GROUP
     elif [[ "$VIRT_DRIVER" = 'fake' ]]; then
@@ -763,7 +761,14 @@
 }
 
 function stop_nova_compute {
-    stop_process n-cpu
+    if [ "$VIRT_DRIVER" == "fake" ]; then
+        local i
+        for i in `seq 1 $NUMBER_FAKE_NOVA_COMPUTE`; do
+            stop_process n-cpu-${i}
+        done
+    else
+        stop_process n-cpu
+    fi
     if is_service_enabled n-cpu && [[ -r $NOVA_PLUGINS/hypervisor-$VIRT_DRIVER ]]; then
         stop_nova_hypervisor
     fi
diff --git a/lib/nova_plugins/functions-libvirt b/lib/nova_plugins/functions-libvirt
index 6b9db48..d3c4eab 100644
--- a/lib/nova_plugins/functions-libvirt
+++ b/lib/nova_plugins/functions-libvirt
@@ -10,7 +10,7 @@
 set +o xtrace
 
 # Defaults
-# -------
+# --------
 
 # if we should turn on massive libvirt debugging
 DEBUG_LIBVIRT=$(trueorfalse False $DEBUG_LIBVIRT)
diff --git a/lib/opendaylight b/lib/opendaylight
index 1541ac1..374de95 100644
--- a/lib/opendaylight
+++ b/lib/opendaylight
@@ -3,9 +3,9 @@
 
 # Dependencies:
 #
-# - ``functions`` file
-# # ``DEST`` must be defined
-# # ``STACK_USER`` must be defined
+# ``functions`` file
+# ``DEST`` must be defined
+# ``STACK_USER`` must be defined
 
 # ``stack.sh`` calls the entry points in this order:
 #
@@ -48,23 +48,24 @@
 ODL_DIR=$DEST/opendaylight
 
 # The OpenDaylight Package, currently using 'Hydrogen' release
-ODL_PKG=${ODL_PKG:-distributions-virtualization-0.1.1-osgipackage.zip}
+ODL_PKG=${ODL_PKG:-distribution-karaf-0.2.0-Helium.zip}
 
 # The OpenDaylight URL
-ODL_URL=${ODL_URL:-https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/integration/distributions-virtualization/0.1.1}
+ODL_URL=${ODL_URL:-https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.2.0-Helium}
 
 # Default arguments for OpenDaylight. This is typically used to set
 # Java memory options.
-#   ODL_ARGS=Xmx1024m -XX:MaxPermSize=512m
+# ``ODL_ARGS=Xmx1024m -XX:MaxPermSize=512m``
 ODL_ARGS=${ODL_ARGS:-"-XX:MaxPermSize=384m"}
 
 # How long to pause after ODL starts to let it complete booting
-ODL_BOOT_WAIT=${ODL_BOOT_WAIT:-60}
+ODL_BOOT_WAIT=${ODL_BOOT_WAIT:-20}
 
 # The physical provider network to device mapping
 ODL_PROVIDER_MAPPINGS=${ODL_PROVIDER_MAPPINGS:-physnet1:eth1}
 
-# Set up default directories
+# Enable OpenDaylight l3 forwarding
+ODL_L3=${ODL_L3:-False}
 
 
 # Entry Points
@@ -85,11 +86,26 @@
 
 # configure_opendaylight() - Set config files, create data dirs, etc
 function configure_opendaylight {
-    # Remove simple forwarder
-    rm -f $ODL_DIR/opendaylight/plugins/org.opendaylight.controller.samples.simpleforwarding*
+    # Add odl-ovsdb-openstack if it's not already there
+    local ODLOVSDB=$(cat $ODL_DIR/distribution-karaf-0.2.0-Helium/etc/org.apache.karaf.features.cfg | grep featuresBoot= | grep odl)
+    if [ "$ODLOVSDB" == "" ]; then
+        sed -i '/^featuresBoot=/ s/$/,odl-ovsdb-openstack/' $ODL_DIR/distribution-karaf-0.2.0-Helium/etc/org.apache.karaf.features.cfg
+    fi
 
-    # Configure OpenFlow 1.3
-    echo "ovsdb.of.version=1.3" >> $ODL_DIR/opendaylight/configuration/config.ini
+    # Configure OpenFlow 1.3 if it's not there
+    local OFLOW13=$(cat $ODL_DIR/distribution-karaf-0.2.0-Helium/etc/custom.properties | grep ^of.version)
+    if [ "$OFLOW13" == "" ]; then
+        echo "ovsdb.of.version=1.3" >> $ODL_DIR/distribution-karaf-0.2.0-Helium/etc/custom.properties
+    fi
+
+    # Configure L3 if the user wants it
+    if [ "${ODL_L3}" == "True" ]; then
+        # Configure L3 FWD if it's not there
+        local L3FWD=$(cat $ODL_DIR/distribution-karaf-0.2.0-Helium/etc/custom.properties | grep ^ovsdb.l3.fwd.enabled)
+        if [ "$L3FWD" == "" ]; then
+            echo "ovsdb.l3.fwd.enabled=yes" >> $ODL_DIR/distribution-karaf-0.2.0-Helium/etc/custom.properties
+        fi
+    fi
 }
 
 function configure_ml2_odl {
@@ -139,9 +155,8 @@
     # The flags to ODL have the following meaning:
     #   -of13: runs ODL using OpenFlow 1.3 protocol support.
     #   -virt ovsdb: Runs ODL in "virtualization" mode with OVSDB support
-    # NOTE(chdent): Leaving this as screen_it instead of run_process until
-    # the right thing for this service is determined.
-    screen_it odl-server "cd $ODL_DIR/opendaylight && JAVA_HOME=$JHOME ./run.sh $ODL_ARGS -of13 -virt ovsdb"
+
+    run_process odl-server "cd $ODL_DIR/distribution-karaf-0.2.0-Helium && JAVA_HOME=$JHOME bin/karaf"
 
     # Sleep a bit to let OpenDaylight finish starting up
     sleep $ODL_BOOT_WAIT
diff --git a/lib/swift b/lib/swift
index d8c790a..7ef4496 100644
--- a/lib/swift
+++ b/lib/swift
@@ -196,9 +196,9 @@
     # copy apache vhost file and set name and port
     local node_number
     for node_number in ${SWIFT_REPLICAS_SEQ}; do
-        local object_port=$[OBJECT_PORT_BASE + 10 * ($node_number - 1)]
-        local container_port=$[CONTAINER_PORT_BASE + 10 * ($node_number - 1)]
-        local account_port=$[ACCOUNT_PORT_BASE + 10 * ($node_number - 1)]
+        local object_port=$(( OBJECT_PORT_BASE + 10 * (node_number - 1) ))
+        local container_port=$(( CONTAINER_PORT_BASE + 10 * (node_number - 1) ))
+        local account_port=$(( ACCOUNT_PORT_BASE + 10 * (node_number - 1) ))
 
         sudo cp ${SWIFT_DIR}/examples/apache2/object-server.template $(apache_site_config_for object-server-${node_number})
         sudo sed -e "
@@ -257,7 +257,7 @@
     local bind_port=$3
     local server_type=$4
 
-    log_facility=$[ node_id - 1 ]
+    log_facility=$(( node_id - 1 ))
     local node_path=${SWIFT_DATA_DIR}/${node_number}
 
     iniuncomment ${swift_node_config} DEFAULT user
@@ -473,12 +473,21 @@
     iniset ${testfile} func_test username3 swiftusertest3
     iniset ${testfile} func_test account2 swifttenanttest2
     iniset ${testfile} func_test username2 swiftusertest2
+    iniset ${testfile} func_test account4 swifttenanttest4
+    iniset ${testfile} func_test username4 swiftusertest4
+    iniset ${testfile} func_test password4 testing4
+    iniset ${testfile} func_test domain4 swift_test
 
     if is_service_enabled key;then
         iniuncomment ${testfile} func_test auth_version
+        local auth_vers=$(iniget ${testfile} func_test auth_version)
         iniset ${testfile} func_test auth_host ${KEYSTONE_SERVICE_HOST}
         iniset ${testfile} func_test auth_port ${KEYSTONE_AUTH_PORT}
-        iniset ${testfile} func_test auth_prefix /v2.0/
+        if [[ $auth_vers == "3" ]]; then
+            iniset ${testfile} func_test auth_prefix /v3/
+        else
+            iniset ${testfile} func_test auth_prefix /v2.0/
+        fi
     fi
 
     local swift_log_dir=${SWIFT_DATA_DIR}/logs
@@ -553,18 +562,22 @@
 # since we want to make it compatible with tempauth which use
 # underscores for separators.
 
-# Tenant               User       Roles
+# Tenant             User               Roles          Domain
 # ------------------------------------------------------------------
-# service            swift              service
-# swifttenanttest1   swiftusertest1     admin
-# swifttenanttest1   swiftusertest3     anotherrole
-# swifttenanttest2   swiftusertest2     admin
+# service            swift              service        default
+# swifttenanttest1   swiftusertest1     admin          default
+# swifttenanttest1   swiftusertest3     anotherrole    default
+# swifttenanttest2   swiftusertest2     admin          default
+# swifttenanttest4   swiftusertest4     admin          swift_test
 
 function create_swift_accounts {
     # Defines specific passwords used by tools/create_userrc.sh
-    local swiftusertest1_password=testing
-    local swiftusertest2_password=testing2
-    local swiftusertest3_password=testing3
+    # As these variables are used by create_userrc.sh, they must be exported
+    # The _password suffix is expected by create_userrc.sh
+    export swiftusertest1_password=testing
+    export swiftusertest2_password=testing2
+    export swiftusertest3_password=testing3
+    export swiftusertest4_password=testing4
 
     KEYSTONE_CATALOG_BACKEND=${KEYSTONE_CATALOG_BACKEND:-sql}
 
@@ -606,6 +619,16 @@
         "$swift_tenant_test2" "test2@example.com")
     die_if_not_set $LINENO swift_user_test2 "Failure creating swift_user_test2"
     get_or_add_user_role $admin_role $swift_user_test2 $swift_tenant_test2
+
+    local swift_domain=$(get_or_create_domain swift_test 'Used for swift functional testing')
+    die_if_not_set $LINENO swift_domain "Failure creating swift_test domain"
+
+    local swift_tenant_test4=$(get_or_create_project swifttenanttest4 $swift_domain)
+    die_if_not_set $LINENO swift_tenant_test4 "Failure creating swift_tenant_test4"
+    local swift_user_test4=$(get_or_create_user swiftusertest4 $swiftusertest4_password \
+        $swift_tenant_test4 "test4@example.com" $swift_domain)
+    die_if_not_set $LINENO swift_user_test4 "Failure creating swift_user_test4"
+    get_or_add_user_role $admin_role $swift_user_test4 $swift_tenant_test4
 }
 
 # init_swift() - Initialize rings
diff --git a/lib/tempest b/lib/tempest
index d677c7e..1716bc7 100644
--- a/lib/tempest
+++ b/lib/tempest
@@ -28,6 +28,7 @@
 # - ``DEFAULT_INSTANCE_TYPE``
 # - ``DEFAULT_INSTANCE_USER``
 # - ``CINDER_MULTI_LVM_BACKEND``
+# - ``CINDER_ENABLED_BACKENDS``
 #
 # ``stack.sh`` calls the entry points in this order:
 #
@@ -64,8 +65,10 @@
 
 # Cinder/Volume variables
 TEMPEST_VOLUME_DRIVER=${TEMPEST_VOLUME_DRIVER:-default}
-TEMPEST_VOLUME_VENDOR=${TEMPEST_VOLUME_VENDOR:-"Open Source"}
-TEMPEST_STORAGE_PROTOCOL=${TEMPEST_STORAGE_PROTOCOL:-iSCSI}
+TEMPEST_DEFAULT_VOLUME_VENDOR="Open Source"
+TEMPEST_VOLUME_VENDOR=${TEMPEST_VOLUME_VENDOR:-$TEMPEST_DEFAULT_VOLUME_VENDOR}
+TEMPEST_DEFAULT_STORAGE_PROTOCOL="iSCSI"
+TEMPEST_STORAGE_PROTOCOL=${TEMPEST_STORAGE_PROTOCOL:-$TEMPEST_DEFAULT_STORAGE_PROTOCOL}
 
 # Neutron/Network variables
 IPV6_ENABLED=$(trueorfalse True $IPV6_ENABLED)
@@ -362,15 +365,25 @@
     if ! is_service_enabled c-bak; then
         iniset $TEMPEST_CONFIG volume-feature-enabled backup False
     fi
-    CINDER_MULTI_LVM_BACKEND=$(trueorfalse False $CINDER_MULTI_LVM_BACKEND)
-    if [ $CINDER_MULTI_LVM_BACKEND == "True" ]; then
+
+    # Using CINDER_ENABLED_BACKENDS
+    if [[ -n "$CINDER_ENABLED_BACKENDS" ]] && [[ $CINDER_ENABLED_BACKENDS =~ .*,.* ]]; then
         iniset $TEMPEST_CONFIG volume-feature-enabled multi_backend "True"
-        iniset $TEMPEST_CONFIG volume backend1_name "LVM_iSCSI"
-        iniset $TEMPEST_CONFIG volume backend2_name "LVM_iSCSI_2"
+        local i=1
+        local be
+        for be in ${CINDER_ENABLED_BACKENDS//,/ }; do
+            local be_name=${be##*:}
+            iniset $TEMPEST_CONFIG volume "backend${i}_name" "$be_name"
+            i=$(( i + 1 ))
+        done
     fi
 
-    if [ $TEMPEST_VOLUME_DRIVER != "default" ]; then
+    if [ $TEMPEST_VOLUME_DRIVER != "default" -o \
+        "$TEMPEST_VOLUME_VENDOR" != "$TEMPEST_DEFAULT_VOLUME_VENDOR" ]; then
         iniset $TEMPEST_CONFIG volume vendor_name "$TEMPEST_VOLUME_VENDOR"
+    fi
+    if [ $TEMPEST_VOLUME_DRIVER != "default" -o \
+        $TEMPEST_STORAGE_PROTOCOL != $TEMPEST_DEFAULT_STORAGE_PROTOCOL ]; then
         iniset $TEMPEST_CONFIG volume storage_protocol $TEMPEST_STORAGE_PROTOCOL
     fi
 
diff --git a/lib/tls b/lib/tls
index 15e8692..fdb798f 100644
--- a/lib/tls
+++ b/lib/tls
@@ -433,7 +433,7 @@
 
 
 # Cleanup Functions
-# ===============
+# =================
 
 
 # Stops all stud processes. This should be done only after all services
diff --git a/run_tests.sh b/run_tests.sh
index b1aef4f..bf90332 100755
--- a/run_tests.sh
+++ b/run_tests.sh
@@ -43,7 +43,7 @@
 
 echo "Running bash8..."
 
-./tools/bash8.py -v $FILES
+tox -ebashate
 pass_fail $? 0 bash8
 
 
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..5887134
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,23 @@
+[metadata]
+name = DevStack
+summary = OpenStack DevStack
+description-file =
+    README.md
+author = OpenStack
+author-email = openstack-dev@lists.openstack.org
+home-page = http://devstack.org
+classifier =
+    Intended Audience :: Developers
+    License :: OSI Approved :: Apache Software License
+    Operating System :: POSIX :: Linux
+
+[build_sphinx]
+all_files = 1
+build-dir = doc/build
+source-dir = doc/source
+
+[pbr]
+warnerrors = True
+
+[wheel]
+universal = 1
diff --git a/setup.py b/setup.py
new file mode 100755
index 0000000..70c2b3f
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+# Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT
+import setuptools
+
+setuptools.setup(
+    setup_requires=['pbr'],
+    pbr=True)
diff --git a/stack.sh b/stack.sh
index 0cec623..ec13338 100755
--- a/stack.sh
+++ b/stack.sh
@@ -234,16 +234,41 @@
 
 if [[ is_fedora && ( $DISTRO == "rhel6" || $DISTRO == "rhel7" ) ]]; then
     # RHEL requires EPEL for many Open Stack dependencies
+
+    # note we always remove and install latest -- some environments
+    # use snapshot images, and if EPEL version updates they break
+    # unless we update them to latest version.
+    if sudo yum repolist enabled epel | grep -q 'epel'; then
+        uninstall_package epel-release || true
+    fi
+
+    # This trick installs the latest epel-release from a bootstrap
+    # repo, then removes itself (as epel-release installed the
+    # "real" repo).
+    #
+    # you would think that rather than this, you could use
+    # $releasever directly in .repo file we create below.  However
+    # RHEL gives a $releasever of "6Server" which breaks the path;
+    # see https://bugzilla.redhat.com/show_bug.cgi?id=1150759
     if [[ $DISTRO == "rhel7" ]]; then
-        EPEL_RPM=${RHEL7_EPEL_RPM:-"http://dl.fedoraproject.org/pub/epel/beta/7/x86_64/epel-release-7-1.noarch.rpm"}
+        epel_ver="7"
     elif [[ $DISTRO == "rhel6" ]]; then
-        EPEL_RPM=${RHEL6_EPEL_RPM:-"http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm"}
+        epel_ver="6"
     fi
-    if ! sudo yum repolist enabled epel | grep -q 'epel'; then
-        echo "EPEL not detected; installing"
-        yum_install ${EPEL_RPM} || \
-            die $LINENO "Error installing EPEL repo, cannot continue"
-    fi
+
+    cat <<EOF | sudo tee /etc/yum.repos.d/epel-bootstrap.repo
+[epel-bootstrap]
+name=Bootstrap EPEL
+mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-$epel_ver&arch=\$basearch
+failovermethod=priority
+enabled=0
+gpgcheck=0
+EOF
+    # bare yum call due to --enablerepo
+    sudo yum --enablerepo=epel-bootstrap -y install epel-release || \
+        die $LINENO "Error installing EPEL repo, cannot continue"
+    # epel rpm has installed it's version
+    sudo rm -f /etc/yum.repos.d/epel-bootstrap.repo
 
     # ... and also optional to be enabled
     is_package_installed yum-utils || install_package yum-utils
diff --git a/stackrc b/stackrc
index af45c77..6cec8e8 100644
--- a/stackrc
+++ b/stackrc
@@ -120,7 +120,7 @@
 # ------------
 
 # Base GIT Repo URL
-# Another option is http://review.openstack.org/p
+# Another option is https://git.openstack.org
 GIT_BASE=${GIT_BASE:-git://git.openstack.org}
 
 ##############
@@ -514,7 +514,7 @@
 if [[ "$ENABLED_SERVICES" =~ 'h-api' ]]; then
     case "$VIRT_DRIVER" in
         libvirt|baremetal|ironic)
-            HEAT_CFN_IMAGE_URL=${HEAT_CFN_IMAGE_URL:-"http://dl.fedoraproject.org/pub/alt/openstack/20/x86_64/Fedora-x86_64-20-20140618-sda.qcow2"}
+            HEAT_CFN_IMAGE_URL=${HEAT_CFN_IMAGE_URL:-"https://download.fedoraproject.org/pub/alt/openstack/20/x86_64/Fedora-x86_64-20-20140618-sda.qcow2"}
             IMAGE_URLS+=",$HEAT_CFN_IMAGE_URL"
             ;;
         *)
@@ -539,7 +539,7 @@
 PRECACHE_IMAGES=$(trueorfalse False $PRECACHE_IMAGES)
 if [[ "$PRECACHE_IMAGES" == "True" ]]; then
     # staging in update for nodepool
-    IMAGE_URL="http://dl.fedoraproject.org/pub/alt/openstack/20/x86_64/Fedora-x86_64-20-20140618-sda.qcow2"
+    IMAGE_URL="https://download.fedoraproject.org/pub/alt/openstack/20/x86_64/Fedora-x86_64-20-20140618-sda.qcow2"
     if ! [[ "$IMAGE_URLS"  =~ "$IMAGE_URL" ]]; then
         IMAGE_URLS+=",$IMAGE_URL"
     fi
diff --git a/tests/test_config.sh b/tests/test_config.sh
index 2634ce0..cd74cee 100755
--- a/tests/test_config.sh
+++ b/tests/test_config.sh
@@ -91,6 +91,44 @@
 [[test4|\$TEST4_DIR/\$TEST4_FILE]]
 [fff]
 type=new
+
+[[test-quote|test-quote.conf]]
+[foo]
+foo="foo bar" "baz"
+
+[[test5|test-equals.conf]]
+[DEFAULT]
+drivers = driver=python.import.path.Driver
+
+[[test6|test-strip.conf]]
+[DEFAULT]
+# next line has trailing space
+attr = strip_trailing_space
+
+[[test7|test-colon.conf]]
+[DEFAULT]
+servers=10.11.12.13:80
+
+[[test-multi-sections|test-multi-sections.conf]]
+[sec-1]
+cfg_item1 = abcd
+cfg_item2 = efgh
+
+[sec-2]
+cfg_item1 = abcd
+cfg_item3 = /1/2/3/4:5
+cfg_item4 = end
+
+[sec-3]
+cfg_item5 = 5555
+cfg_item6 = 6666
+cfg_item5 = 5555another
+
+[[test-multiline|test-multiline.conf]]
+[multi]
+cfg_item1 = "ab":"cd", "ef":   "gh"
+cfg_item1 = abcd
+cfg_item2 = efgh
 EOF
 
 echo -n "get_meta_section_files: test0 doesn't exist: "
@@ -172,8 +210,39 @@
 # iniset adds a blank line if it creates the file...
 EXPECT_VAL="
 [ddd]
-additional = true
-type = new"
+type = new
+additional = true"
+check_result "$VAL" "$EXPECT_VAL"
+
+echo -n "merge_config_file test-multi-sections: "
+rm -f test-multi-sections.conf
+merge_config_file test.conf test-multi-sections test-multi-sections.conf
+VAL=$(cat test-multi-sections.conf)
+EXPECT_VAL='
+[sec-1]
+cfg_item1 = abcd
+cfg_item2 = efgh
+
+[sec-2]
+cfg_item1 = abcd
+cfg_item3 = /1/2/3/4:5
+cfg_item4 = end
+
+[sec-3]
+cfg_item5 = 5555
+cfg_item5 = 5555another
+cfg_item6 = 6666'
+check_result "$VAL" "$EXPECT_VAL"
+
+echo -n "merge_config_file test-multiline: "
+rm -f test-multiline.conf
+merge_config_file test.conf test-multiline test-multiline.conf
+VAL=$(cat test-multiline.conf)
+EXPECT_VAL='
+[multi]
+cfg_item1 = "ab":"cd", "ef":   "gh"
+cfg_item1 = abcd
+cfg_item2 = efgh'
 check_result "$VAL" "$EXPECT_VAL"
 
 echo -n "merge_config_group test2: "
@@ -183,8 +252,8 @@
 # iniset adds a blank line if it creates the file...
 EXPECT_VAL="
 [ddd]
-additional = true
-type = new"
+type = new
+additional = true"
 check_result "$VAL" "$EXPECT_VAL"
 
 echo -n "merge_config_group test2 no conf file: "
@@ -206,6 +275,15 @@
 attribute = value"
 check_result "$VAL" "$EXPECT_VAL"
 
+echo -n "merge_config_file test-quote: "
+rm -f test-quote.conf
+merge_config_file test.conf test-quote test-quote.conf
+VAL=$(cat test-quote.conf)
+EXPECT_VAL='
+[foo]
+foo = "foo bar" "baz"'
+check_result "$VAL" "$EXPECT_VAL"
+
 echo -n "merge_config_group test4 variable filename: "
 setup_test4
 merge_config_group test.conf test4
@@ -225,5 +303,35 @@
 type = new"
 check_result "$VAL" "$EXPECT_VAL"
 
-rm -f test.conf test1c.conf test2a.conf test-space.conf
+echo -n "merge_config_file test5 equals in value: "
+rm -f test-equals.conf
+merge_config_file test.conf test5 test-equals.conf
+VAL=$(cat test-equals.conf)
+# iniset adds a blank line if it creates the file...
+EXPECT_VAL="
+[DEFAULT]
+drivers = driver=python.import.path.Driver"
+check_result "$VAL" "$EXPECT_VAL"
+
+echo -n "merge_config_file test6 value stripped: "
+rm -f test-strip.conf
+merge_config_file test.conf test6 test-strip.conf
+VAL=$(cat test-strip.conf)
+# iniset adds a blank line if it creates the file...
+EXPECT_VAL="
+[DEFAULT]
+attr = strip_trailing_space"
+check_result "$VAL" "$EXPECT_VAL"
+
+echo -n "merge_config_file test7 colon in value: "
+rm -f test-colon.conf
+merge_config_file test.conf test7 test-colon.conf
+VAL=$(cat test-colon.conf)
+EXPECT_VAL="
+[DEFAULT]
+servers = 10.11.12.13:80"
+check_result "$VAL" "$EXPECT_VAL"
+
+rm -f test.conf test1c.conf test2a.conf test-quote.conf test-space.conf test-equals.conf test-strip.conf test-colon.conf
+rm -f test-multiline.conf test-multi-sections.conf
 rm -rf test-etc
diff --git a/tools/bash8.py b/tools/bash8.py
deleted file mode 100755
index 3abf87b..0000000
--- a/tools/bash8.py
+++ /dev/null
@@ -1,215 +0,0 @@
-#!/usr/bin/env python
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-# bash8 - a pep8 equivalent for bash scripts
-#
-# this program attempts to be an automated style checker for bash scripts
-# to fill the same part of code review that pep8 does in most OpenStack
-# projects. It starts from humble beginnings, and will evolve over time.
-#
-# Currently Supported checks
-#
-# Errors
-# Basic white space errors, for consistent indenting
-# - E001: check that lines do not end with trailing whitespace
-# - E002: ensure that indents are only spaces, and not hard tabs
-# - E003: ensure all indents are a multiple of 4 spaces
-# - E004: file did not end with a newline
-#
-# Structure errors
-#
-# A set of rules that help keep things consistent in control blocks.
-# These are ignored on long lines that have a continuation, because
-# unrolling that is kind of "interesting"
-#
-# - E010: *do* not on the same line as *for*
-# - E011: *then* not on the same line as *if*
-# - E012: heredoc didn't end before EOF
-
-import argparse
-import fileinput
-import re
-import sys
-
-ERRORS = 0
-IGNORE = None
-
-
-def register_ignores(ignores):
-    global IGNORE
-    if ignores:
-        IGNORE = '^(' + '|'.join(ignores.split(',')) + ')'
-
-
-def should_ignore(error):
-    return IGNORE and re.search(IGNORE, error)
-
-
-def print_error(error, line,
-                filename=None, filelineno=None):
-    if not filename:
-        filename = fileinput.filename()
-    if not filelineno:
-        filelineno = fileinput.filelineno()
-    global ERRORS
-    ERRORS = ERRORS + 1
-    print("%s: '%s'" % (error, line.rstrip('\n')))
-    print(" - %s: L%s" % (filename, filelineno))
-
-
-def not_continuation(line):
-    return not re.search('\\\\$', line)
-
-
-def check_for_do(line):
-    if not_continuation(line):
-        match = re.match('^\s*(for|while|until)\s', line)
-        if match:
-            operator = match.group(1).strip()
-            if not re.search(';\s*do(\b|$)', line):
-                print_error('E010: Do not on same line as %s' % operator,
-                            line)
-
-
-def check_if_then(line):
-    if not_continuation(line):
-        if re.search('^\s*if \[', line):
-            if not re.search(';\s*then(\b|$)', line):
-                print_error('E011: Then non on same line as if', line)
-
-
-def check_no_trailing_whitespace(line):
-    if re.search('[ \t]+$', line):
-        print_error('E001: Trailing Whitespace', line)
-
-
-def check_indents(line):
-    m = re.search('^(?P<indent>[ \t]+)', line)
-    if m:
-        if re.search('\t', m.group('indent')):
-            print_error('E002: Tab indents', line)
-        if (len(m.group('indent')) % 4) != 0:
-            print_error('E003: Indent not multiple of 4', line)
-
-def check_function_decl(line):
-    failed = False
-    if line.startswith("function"):
-        if not re.search('^function [\w-]* \{$', line):
-            failed = True
-    else:
-        # catch the case without "function", e.g.
-        # things like '^foo() {'
-        if re.search('^\s*?\(\)\s*?\{', line):
-            failed = True
-
-    if failed:
-        print_error('E020: Function declaration not in format '
-                    ' "^function name {$"', line)
-
-
-def starts_multiline(line):
-    m = re.search("[^<]<<\s*(?P<token>\w+)", line)
-    if m:
-        return m.group('token')
-    else:
-        return False
-
-
-def end_of_multiline(line, token):
-    if token:
-        return re.search("^%s\s*$" % token, line) is not None
-    return False
-
-
-def check_files(files, verbose):
-    in_multiline = False
-    multiline_start = 0
-    multiline_line = ""
-    logical_line = ""
-    token = False
-    prev_file = None
-    prev_line = ""
-    prev_lineno = 0
-
-    for line in fileinput.input(files):
-        if fileinput.isfirstline():
-            # if in_multiline when the new file starts then we didn't
-            # find the end of a heredoc in the last file.
-            if in_multiline:
-                print_error('E012: heredoc did not end before EOF',
-                            multiline_line,
-                            filename=prev_file, filelineno=multiline_start)
-                in_multiline = False
-
-            # last line of a previous file should always end with a
-            # newline
-            if prev_file and not prev_line.endswith('\n'):
-                print_error('E004: file did not end with a newline',
-                            prev_line,
-                            filename=prev_file, filelineno=prev_lineno)
-
-            prev_file = fileinput.filename()
-
-            if verbose:
-                print "Running bash8 on %s" % fileinput.filename()
-
-        # NOTE(sdague): multiline processing of heredocs is interesting
-        if not in_multiline:
-            logical_line = line
-            token = starts_multiline(line)
-            if token:
-                in_multiline = True
-                multiline_start = fileinput.filelineno()
-                multiline_line = line
-                continue
-        else:
-            logical_line = logical_line + line
-            if not end_of_multiline(line, token):
-                continue
-            else:
-                in_multiline = False
-
-        check_no_trailing_whitespace(logical_line)
-        check_indents(logical_line)
-        check_for_do(logical_line)
-        check_if_then(logical_line)
-        check_function_decl(logical_line)
-
-        prev_line = logical_line
-        prev_lineno = fileinput.filelineno()
-
-def get_options():
-    parser = argparse.ArgumentParser(
-        description='A bash script style checker')
-    parser.add_argument('files', metavar='file', nargs='+',
-                        help='files to scan for errors')
-    parser.add_argument('-i', '--ignore', help='Rules to ignore')
-    parser.add_argument('-v', '--verbose', action='store_true', default=False)
-    return parser.parse_args()
-
-
-def main():
-    opts = get_options()
-    register_ignores(opts.ignore)
-    check_files(opts.files, opts.verbose)
-
-    if ERRORS > 0:
-        print("%d bash8 error(s) found" % ERRORS)
-        return 1
-    else:
-        return 0
-
-
-if __name__ == "__main__":
-    sys.exit(main())
diff --git a/tools/build_docs.sh b/tools/build_docs.sh
index 96bd892..f52b179 100755
--- a/tools/build_docs.sh
+++ b/tools/build_docs.sh
@@ -4,7 +4,7 @@
 #
 # - Install shocco if not found on PATH and INSTALL_SHOCCO is set
 # - Clone MASTER_REPO branch MASTER_BRANCH
-# - Re-creates ``docs/html`` directory from existing repo + new generated script docs
+# - Re-creates ``doc/build/html`` directory from existing repo + new generated script docs
 
 # Usage:
 ## build_docs.sh [-o <out-dir>] [-g] [master|<repo> [<branch>]]
@@ -29,8 +29,8 @@
 # http://devstack.org is a GitHub gh-pages site in the https://github.com/cloudbuilders/devtack.git repo
 GH_PAGES_REPO=git@github.com:cloudbuilders/devstack.git
 
-DOCS_SOURCE=docs/source
-HTML_BUILD=docs/html
+DOCS_SOURCE=doc/source
+HTML_BUILD=doc/build/html
 
 # Keep track of the devstack directory
 TOP_DIR=$(cd $(dirname "$0")/.. && pwd)
@@ -136,7 +136,7 @@
     mkdir -p $FQ_HTML_BUILD/`dirname $f`;
     $SHOCCO $f > $FQ_HTML_BUILD/$f.html
 done
-echo "$FILES" >docs/files
+echo "$FILES" >doc/files
 
 if [[ -n $GH_UPDATE ]]; then
     GH_ROOT=$(mktemp -d work-gh-XXXX)
diff --git a/tools/create_userrc.sh b/tools/create_userrc.sh
index 863fe03..b43fd88 100755
--- a/tools/create_userrc.sh
+++ b/tools/create_userrc.sh
@@ -245,7 +245,7 @@
 }
 
 if [ $MODE != "create" ]; then
-# looks like I can't ask for all tenant related to a specified user
+    # looks like I can't ask for all tenant related to a specified user
     openstack project list --long --quote none -f csv | grep ',True' | grep -v "${SKIP_TENANT}" | while IFS=, read tenant_id tenant_name desc enabled; do
         openstack user list --project $tenant_id --long --quote none -f csv | grep ',True' | while IFS=, read user_id user_name project email enabled; do
             if [ $MODE = one -a "$user_name" != "$USER_NAME" ]; then
@@ -253,9 +253,9 @@
             fi
 
             # Checks for a specific password defined for an user.
-            # Example for an username johndoe:
-            #                     JOHNDOE_PASSWORD=1234
-            eval SPECIFIC_UPASSWORD="\$${USER_NAME^^}_PASSWORD"
+            # Example for an username johndoe: JOHNDOE_PASSWORD=1234
+            # This mechanism is used by lib/swift
+            eval SPECIFIC_UPASSWORD="\$${user_name}_password"
             if [ -n "$SPECIFIC_UPASSWORD" ]; then
                 USER_PASS=$SPECIFIC_UPASSWORD
             fi
diff --git a/tools/ironic/scripts/cleanup-node b/tools/ironic/scripts/cleanup-node
new file mode 100755
index 0000000..c4e4e70
--- /dev/null
+++ b/tools/ironic/scripts/cleanup-node
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+
+# **cleanup-nodes**
+
+# Cleans up baremetal poseur nodes and volumes created during ironic setup
+# Assumes calling user has proper libvirt group membership and access.
+
+set -exu
+
+LIBVIRT_STORAGE_POOL=${LIBVIRT_STORAGE_POOL:-"default"}
+LIBVIRT_CONNECT_URI=${LIBVIRT_CONNECT_URI:-"qemu:///system"}
+
+NAME=$1
+NETWORK_BRIDGE=$2
+
+export VIRSH_DEFAULT_CONNECT_URI=$LIBVIRT_CONNECT_URI
+
+VOL_NAME="$NAME.qcow2"
+virsh list | grep -q $NAME && virsh destroy $NAME
+virsh list --inactive | grep -q $NAME && virsh undefine $NAME
+
+if virsh pool-list | grep -q $LIBVIRT_STORAGE_POOL ; then
+  virsh vol-list $LIBVIRT_STORAGE_POOL | grep -q $VOL_NAME &&
+      virsh vol-delete $VOL_NAME --pool $LIBVIRT_STORAGE_POOL
+fi
diff --git a/tools/ironic/scripts/cleanup-nodes b/tools/ironic/scripts/cleanup-nodes
deleted file mode 100755
index adeca5c..0000000
--- a/tools/ironic/scripts/cleanup-nodes
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env bash
-
-# **cleanup-nodes**
-
-# Cleans up baremetal poseur nodes and volumes created during ironic setup
-# Assumes calling user has proper libvirt group membership and access.
-
-set -exu
-
-LIBVIRT_STORAGE_POOL=${LIBVIRT_STORAGE_POOL:-"default"}
-LIBVIRT_CONNECT_URI=${LIBVIRT_CONNECT_URI:-"qemu:///system"}
-
-VM_COUNT=$1
-NETWORK_BRIDGE=$2
-
-export VIRSH_DEFAULT_CONNECT_URI=$LIBVIRT_CONNECT_URI
-
-for (( idx=0; idx<$VM_COUNT; idx++ )); do
-    NAME="baremetal${NETWORK_BRIDGE}_${idx}"
-    VOL_NAME="baremetal${NETWORK_BRIDGE}-${idx}.qcow2"
-    virsh list | grep -q $NAME && virsh destroy $NAME
-    virsh list --inactive | grep -q $NAME && virsh undefine $NAME
-
-    if virsh pool-list | grep -q $LIBVIRT_STORAGE_POOL ; then
-      virsh vol-list $LIBVIRT_STORAGE_POOL | grep -q $VOL_NAME &&
-          virsh vol-delete $VOL_NAME --pool $LIBVIRT_STORAGE_POOL
-    fi
-done
diff --git a/tools/ironic/scripts/create-node b/tools/ironic/scripts/create-node
new file mode 100755
index 0000000..25b53d4
--- /dev/null
+++ b/tools/ironic/scripts/create-node
@@ -0,0 +1,79 @@
+#!/usr/bin/env bash
+
+# **create-nodes**
+
+# Creates baremetal poseur nodes for ironic testing purposes
+
+set -ex
+
+# Keep track of the devstack directory
+TOP_DIR=$(cd $(dirname "$0")/.. && pwd)
+
+NAME=$1
+CPU=$2
+MEM=$(( 1024 * $3 ))
+# extra G to allow fuzz for partition table : flavor size and registered size
+# need to be different to actual size.
+DISK=$(( $4 + 1))
+
+case $5 in
+    i386) ARCH='i686' ;;
+    amd64) ARCH='x86_64' ;;
+    *) echo "Unsupported arch $4!" ; exit 1 ;;
+esac
+
+BRIDGE=$6
+EMULATOR=$7
+LOGDIR=$8
+
+LIBVIRT_NIC_DRIVER=${LIBVIRT_NIC_DRIVER:-"e1000"}
+LIBVIRT_STORAGE_POOL=${LIBVIRT_STORAGE_POOL:-"default"}
+LIBVIRT_CONNECT_URI=${LIBVIRT_CONNECT_URI:-"qemu:///system"}
+
+export VIRSH_DEFAULT_CONNECT_URI=$LIBVIRT_CONNECT_URI
+
+if ! virsh pool-list --all | grep -q $LIBVIRT_STORAGE_POOL; then
+    virsh pool-define-as --name $LIBVIRT_STORAGE_POOL dir --target /var/lib/libvirt/images >&2
+    virsh pool-autostart $LIBVIRT_STORAGE_POOL >&2
+    virsh pool-start $LIBVIRT_STORAGE_POOL >&2
+fi
+
+pool_state=$(virsh pool-info $LIBVIRT_STORAGE_POOL | grep State | awk '{ print $2 }')
+if [ "$pool_state" != "running" ] ; then
+  [ ! -d /var/lib/libvirt/images ] && sudo mkdir /var/lib/libvirt/images
+  virsh pool-start $LIBVIRT_STORAGE_POOL >&2
+fi
+
+if [ -n "$LOGDIR" ] ; then
+  mkdir -p "$LOGDIR"
+fi
+
+PREALLOC=
+if [ -f /etc/debian_version ]; then
+    PREALLOC="--prealloc-metadata"
+fi
+
+if [ -n "$LOGDIR" ] ; then
+  VM_LOGGING="--console-log $LOGDIR/${NAME}_console.log"
+else
+  VM_LOGGING=""
+fi
+VOL_NAME="${NAME}.qcow2"
+
+if ! virsh list --all | grep -q $NAME; then
+  virsh vol-list --pool $LIBVIRT_STORAGE_POOL | grep -q $VOL_NAME &&
+      virsh vol-delete $VOL_NAME --pool $LIBVIRT_STORAGE_POOL >&2
+  virsh vol-create-as $LIBVIRT_STORAGE_POOL ${VOL_NAME} ${DISK}G --format qcow2 $PREALLOC >&2
+  volume_path=$(virsh vol-path --pool $LIBVIRT_STORAGE_POOL $VOL_NAME)
+  # Pre-touch the VM to set +C, as it can only be set on empty files.
+  sudo touch "$volume_path"
+  sudo chattr +C "$volume_path" || true
+  $TOP_DIR/scripts/configure-vm \
+    --bootdev network --name $NAME --image "$volume_path" \
+    --arch $ARCH --cpus $CPU --memory $MEM --libvirt-nic-driver $LIBVIRT_NIC_DRIVER \
+    --emulator $EMULATOR --network $BRIDGE $VM_LOGGING >&2
+
+fi
+
+# echo mac
+virsh dumpxml $NAME | grep "mac address" | head -1 | cut -d\' -f2
diff --git a/tools/ironic/scripts/create-nodes b/tools/ironic/scripts/create-nodes
deleted file mode 100755
index 140bffe..0000000
--- a/tools/ironic/scripts/create-nodes
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env bash
-
-# **create-nodes**
-
-# Creates baremetal poseur nodes for ironic testing purposes
-
-set -ex
-
-# Keep track of the devstack directory
-TOP_DIR=$(cd $(dirname "$0")/.. && pwd)
-
-CPU=$1
-MEM=$(( 1024 * $2 ))
-# extra G to allow fuzz for partition table : flavor size and registered size
-# need to be different to actual size.
-DISK=$(( $3 + 1))
-
-case $4 in
-    i386) ARCH='i686' ;;
-    amd64) ARCH='x86_64' ;;
-    *) echo "Unsupported arch $4!" ; exit 1 ;;
-esac
-
-TOTAL=$(($5 - 1))
-BRIDGE=$6
-EMULATOR=$7
-LOGDIR=$8
-
-LIBVIRT_NIC_DRIVER=${LIBVIRT_NIC_DRIVER:-"e1000"}
-LIBVIRT_STORAGE_POOL=${LIBVIRT_STORAGE_POOL:-"default"}
-LIBVIRT_CONNECT_URI=${LIBVIRT_CONNECT_URI:-"qemu:///system"}
-
-export VIRSH_DEFAULT_CONNECT_URI=$LIBVIRT_CONNECT_URI
-
-if ! virsh pool-list --all | grep -q $LIBVIRT_STORAGE_POOL; then
-    virsh pool-define-as --name $LIBVIRT_STORAGE_POOL dir --target /var/lib/libvirt/images >&2
-    virsh pool-autostart $LIBVIRT_STORAGE_POOL >&2
-    virsh pool-start $LIBVIRT_STORAGE_POOL >&2
-fi
-
-pool_state=$(virsh pool-info $LIBVIRT_STORAGE_POOL | grep State | awk '{ print $2 }')
-if [ "$pool_state" != "running" ] ; then
-  [ ! -d /var/lib/libvirt/images ] && sudo mkdir /var/lib/libvirt/images
-  virsh pool-start $LIBVIRT_STORAGE_POOL >&2
-fi
-
-if [ -n "$LOGDIR" ] ; then
-  mkdir -p "$LOGDIR"
-fi
-
-PREALLOC=
-if [ -f /etc/debian_version ]; then
-    PREALLOC="--prealloc-metadata"
-fi
-
-DOMS=""
-for idx in $(seq 0 $TOTAL) ; do
-    NAME="baremetal${BRIDGE}_${idx}"
-    if [ -n "$LOGDIR" ] ; then
-      VM_LOGGING="--console-log $LOGDIR/${NAME}_console.log"
-    else
-      VM_LOGGING=""
-    fi
-    DOMS="$DOMS $NAME"
-    VOL_NAME="baremetal${BRIDGE}-${idx}.qcow2"
-    (virsh list --all | grep -q $NAME) && continue
-
-    virsh vol-list --pool $LIBVIRT_STORAGE_POOL | grep -q $VOL_NAME &&
-        virsh vol-delete $VOL_NAME --pool $LIBVIRT_STORAGE_POOL >&2
-    virsh vol-create-as $LIBVIRT_STORAGE_POOL ${VOL_NAME} ${DISK}G --format qcow2 $PREALLOC >&2
-    volume_path=$(virsh vol-path --pool $LIBVIRT_STORAGE_POOL $VOL_NAME)
-    # Pre-touch the VM to set +C, as it can only be set on empty files.
-    sudo touch "$volume_path"
-    sudo chattr +C "$volume_path" || true
-    $TOP_DIR/scripts/configure-vm \
-      --bootdev network --name $NAME --image "$volume_path" \
-      --arch $ARCH --cpus $CPU --memory $MEM --libvirt-nic-driver $LIBVIRT_NIC_DRIVER \
-      --emulator $EMULATOR --network $BRIDGE $VM_LOGGING >&2
-done
-
-for dom in $DOMS ; do
-    # echo mac
-    virsh dumpxml $dom | grep "mac address" | head -1 | cut -d\' -f2
-done
diff --git a/tools/xen/install_os_domU.sh b/tools/xen/install_os_domU.sh
index 75d56a8..439db68 100755
--- a/tools/xen/install_os_domU.sh
+++ b/tools/xen/install_os_domU.sh
@@ -244,6 +244,11 @@
     vm_uuid=$(xe vm-install template="$TNAME" new-name-label="$GUEST_NAME")
 fi
 
+if [ -n "${EXIT_AFTER_JEOS_INSTALLATION:-}" ]; then
+    echo "User requested to quit after JEOS instalation"
+    exit 0
+fi
+
 #
 # Prepare VM for DevStack
 #
diff --git a/tools/xen/prepare_guest.sh b/tools/xen/prepare_guest.sh
index cd189db..7383c91 100755
--- a/tools/xen/prepare_guest.sh
+++ b/tools/xen/prepare_guest.sh
@@ -114,7 +114,6 @@
     if [ ! -e $1 ]; then
         # Simple but usable vimrc
         cat > $1 <<EOF
-syntax on
 se ts=4
 se expandtab
 se shiftwidth=4
diff --git a/tools/xen/prepare_guest_template.sh b/tools/xen/prepare_guest_template.sh
index e6a7e02..2d3b898 100755
--- a/tools/xen/prepare_guest_template.sh
+++ b/tools/xen/prepare_guest_template.sh
@@ -93,3 +93,28 @@
 # Need to set barrier=0 to avoid a Xen bug
 # https://bugs.launchpad.net/ubuntu/+source/linux/+bug/824089
 sed -i -e 's/errors=/barrier=0,errors=/' $STAGING_DIR/etc/fstab
+
+# Update ubuntu repositories
+cat > $STAGING_DIR/etc/apt/sources.list << EOF
+deb http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY} ${UBUNTU_INST_RELEASE} main restricted
+deb-src http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY} ${UBUNTU_INST_RELEASE} main restricted
+deb http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY} ${UBUNTU_INST_RELEASE}-updates main restricted
+deb-src http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY} ${UBUNTU_INST_RELEASE}-updates main restricted
+deb http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY} ${UBUNTU_INST_RELEASE} universe
+deb-src http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY} ${UBUNTU_INST_RELEASE} universe
+deb http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY} ${UBUNTU_INST_RELEASE}-updates universe
+deb-src http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY} ${UBUNTU_INST_RELEASE}-updates universe
+deb http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY} ${UBUNTU_INST_RELEASE} multiverse
+deb-src http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY} ${UBUNTU_INST_RELEASE} multiverse
+deb http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY} ${UBUNTU_INST_RELEASE}-updates multiverse
+deb-src http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY} ${UBUNTU_INST_RELEASE}-updates multiverse
+deb http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY} ${UBUNTU_INST_RELEASE}-backports main restricted universe multiverse
+deb-src http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY} ${UBUNTU_INST_RELEASE}-backports main restricted universe multiverse
+
+deb http://security.ubuntu.com/ubuntu ${UBUNTU_INST_RELEASE}-security main restricted
+deb-src http://security.ubuntu.com/ubuntu ${UBUNTU_INST_RELEASE}-security main restricted
+deb http://security.ubuntu.com/ubuntu ${UBUNTU_INST_RELEASE}-security universe
+deb-src http://security.ubuntu.com/ubuntu ${UBUNTU_INST_RELEASE}-security universe
+deb http://security.ubuntu.com/ubuntu ${UBUNTU_INST_RELEASE}-security multiverse
+deb-src http://security.ubuntu.com/ubuntu ${UBUNTU_INST_RELEASE}-security multiverse
+EOF
diff --git a/tox.ini b/tox.ini
index 325adae..b6f2d96 100644
--- a/tox.ini
+++ b/tox.ini
@@ -13,4 +13,16 @@
 commands = bash -c "find {toxinidir} -not -wholename \*.tox/\* -and \( -name \*.sh -or -name \*rc -or -name functions\* -or \( -wholename lib/\* -and -not -name \*.md \) \) -print0 | xargs -0 bashate -v"
 
 [testenv:docs]
-commands = python setup.py build_sphinx
+deps =
+   Pygments
+   docutils
+   sphinx>=1.1.2,<1.2
+   pbr>=0.6,!=0.7,<1.0
+   oslosphinx
+whitelist_externals = bash
+setenv =
+  TOP_DIR={toxinidir}
+  INSTALL_SHOCCO=true
+commands = 
+	bash tools/build_docs.sh
+	python setup.py build_sphinx