===
FAQ
===

.. contents::
   :local:

General Questions
=================

Can I use DevStack for production?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DevStack is targeted at developers and CI systems to use the raw
upstream code.  It makes many choices that are not appropriate for
production systems.

Your best choice is probably to choose a `distribution of OpenStack
<https://www.openstack.org/marketplace/distros/>`__.

Can I use DevStack as a development environment?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Sure, you can. That said, there are a couple of things you should note before
doing so:

- DevStack makes a lot of configuration changes to your system and should not
  be run in your main development environment.

- All the repositories that DevStack clones when deploying are considered
  volatile by default and thus are subject to hard resets. This is necessary to
  keep you in sync with the latest upstream, which is what you want in a CI
  situation, but it can result in branches being overwritten and files being
  removed.

  The corollary of this is that if you are working on a specific project, using
  the DevStack project repository (defaulted to ``/opt/stack/<project>``) as
  the single master repository for storing all your work is not recommended.
  This behavior can be overridden by setting the ``RECLONE`` config option to
  ``no``.  Alternatively, you can avoid running ``stack.sh`` to redeploy by
  restarting services manually. In any case, you should generally ensure work
  in progress is pushed to Gerrit or otherwise backed up before running
  ``stack.sh``.

- If you use DevStack within a VM, you may wish to mount a local OpenStack
  directory, such as ``~/src/openstack``, inside the VM and configure DevStack
  to use this as the clone location using the ``{PROJECT}_REPO`` config
  variables. For example, assuming you're using Vagrant and sharing your home
  directory, you should place the following in ``local.conf``:

  .. code-block:: shell

     NEUTRON_REPO=/home/vagrant/src/neutron
     NOVA_REPO=/home/vagrant/src/nova
     KEYSTONE_REPO=/home/vagrant/src/keystone
     GLANCE_REPO=/home/vagrant/src/glance
     SWIFT_REPO=/home/vagrant/src/swift
     HORIZON_REPO=/home/vagrant/src/horizon
     CINDER_REPO=/home/vagrant/src/cinder
     HEAT_REPO=/home/vagrant/src/heat
     TEMPEST_REPO=/home/vagrant/src/tempest
     HEATCLIENT_REPO=/home/vagrant/src/python-heatclient
     GLANCECLIENT_REPO=/home/vagrant/src/python-glanceclient
     NOVACLIENT_REPO=/home/vagrant/src/python-novaclient
     NEUTRONCLIENT_REPO=/home/vagrant/src/python-neutronclient
     OPENSTACKCLIENT_REPO=/home/vagrant/src/python-openstackclient
     HEAT_CFNTOOLS_REPO=/home/vagrant/src/heat-cfntools
     HEAT_TEMPLATES_REPO=/home/vagrant/src/heat-templates
     NEUTRON_FWAAS_REPO=/home/vagrant/src/neutron-fwaas
     # ...

Why a shell script, why not chef/puppet/...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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.

I'd like to help!
~~~~~~~~~~~~~~~~~

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
<https://bugs.launchpad.net/devstack/>`__. Contributions follow the
usual process as described in the `developer guide
<https://docs.openstack.org/infra/manual/developers.html>`__. This
Sphinx documentation is housed in the doc directory.

Why not use packages?
~~~~~~~~~~~~~~~~~~~~~

Unlike packages, DevStack leaves your cloud ready to develop -
checkouts of the code and services running locally under systemd,
making it easy to hack on and test new patches. However, many people
are doing the hard work of packaging and recipes for production
deployments.

Why isn't $MY\_FAVORITE\_DISTRO supported?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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.

Are there any differences between Ubuntu and CentOS/Fedora support?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Both should work well and are tested by DevStack CI.

Why can't I use another shell?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DevStack now uses some specific bash-ism that require Bash 4, such as
associative arrays. Simple compatibility patches have been accepted in
the past when they are not complex, at this point no additional
compatibility patches will be considered except for shells matching
the array functionality as it is very ingrained in the repo and
project management.

Can I test on OS/X?
~~~~~~~~~~~~~~~~~~~

Some people have success with bash 4 installed via homebrew to keep
running tests on OS/X.

Can I at least source ``openrc`` with ``zsh``?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

People have reported success with a special function to run ``openrc``
through bash for this

.. code-block:: bash

   function sourceopenrc {
       pushd ~/devstack >/dev/null
       eval $(bash -c ". openrc $1 $2 >/dev/null;env|sed -n '/OS_/ { s/^/export /;p}'")
       popd >/dev/null
   }


Operation and Configuration
===========================

Can DevStack handle a multi-node installation?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Yes, see :doc:`multinode lab guide <guides/multinode-lab>`

How can I document the environment that DevStack is using?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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.

How do I turn off a service that is enabled by default?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Services can be turned off by adding ``disable_service xxx`` to
``local.conf`` (using ``c-vol`` in this example):

    ::

        disable_service c-vol

Is enabling a service that defaults to off done with the reverse of the above?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Of course!

    ::

        enable_service q-svc

How do I run a specific OpenStack release?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DevStack master tracks the upstream master of all the projects. If you
would like to run a stable branch of OpenStack, you should use the
corresponding stable branch of DevStack as well. For instance the
``stable/ocata`` version of DevStack will already default to all the
projects running at ``stable/ocata`` levels.

Note: it's also possible to manually adjust the ``*_BRANCH`` variables
further if you would like to test specific milestones, or even custom
out of tree branches. This is done with entries like the following in
your ``local.conf``

::

        [[local|localrc]]
        GLANCE_BRANCH=11.0.0.0rc1
        NOVA_BRANCH=12.0.0.0.rc1


Upstream DevStack is only tested with master and stable
branches. Setting custom BRANCH definitions is not guaranteed to
produce working results.

What can I do about RabbitMQ not wanting to start on my fresh new VM?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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.

Why are my configuration changes ignored?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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
=============

``tools/fixup_stuff.sh`` is broken and shouldn't 'fix' just one version of packages.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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.