=============
Configuration
=============

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 :doc:`contents of local.conf <local.conf>` 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 and MUST conform to the shell requirements, specifically no
whitespace around ``=`` (equals).

.. _minimal-configuration:

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

Installation 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

Libraries from Git
------------------

   | *Default: ``LIBS_FROM_GIT=""``*

   | By default devstack installs OpenStack server components from
     git, however it installs client libraries from released versions
     on pypi. This is appropriate if you are working on server
     development, but if you want to see how an unreleased version of
     the client affects the system you can have devstack install it
     from upstream, or from local git trees.
   | Multiple libraries can be specified as a comma separated list.
   |

   ::

      LIBS_FROM_GIT=python-keystoneclient,oslo.config

Virtual Environments
--------------------

  | *Default: ``USE_VENV=False``*
  |   Enable the use of Python virtual environments by setting ``USE_VENV``
      to ``True``.  This will enable the creation of venvs for each project
      that is defined in the ``PROJECT_VENV`` array.

  | *Default: ``PROJECT_VENV['<project>']='<project-dir>.venv'*
  |   Each entry in the ``PROJECT_VENV`` array contains the directory name
      of a venv to be used for the project.  The array index is the project
      name.  Multiple projects can use the same venv if desired.

  ::

    PROJECT_VENV["glance"]=${GLANCE_DIR}.venv

  | *Default: ``ADDITIONAL_VENV_PACKAGES=""``*
  |   A comma-separated list of additional packages to be installed into each
      venv.  Often projects will not have certain packages listed in its
      ``requirements.txt`` file because they are 'optional' requirements,
      i.e. only needed for certain configurations.  By default, the enabled
      databases will have their Python bindings added when they are enabled.

Enable 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

Logging the Service Output
--------------------------

    | *Default: ``LOGDIR=""``*
    |  DevStack will log the stdout output of the services it starts.
       When using ``screen`` this logs the output in the screen windows
       to a file.  Without ``screen`` this simply redirects stdout of
       the service process to a file in ``LOGDIR``.
    |

    ::

        LOGDIR=$DEST/logs

    *Note the use of ``DEST`` to locate the main install directory; this
    is why we suggest setting it in ``local.conf``.*

Enabling Syslog
---------------

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

Upgrade packages installed by pip
---------------------------------

    | *Default: ``PIP_UPGRADE=""``*
    |  By default ``stack.sh`` only installs Python packages if no version
       is currently installed or the current version does not match a specified
       requirement. If ``PIP_UPGRADE`` is set to ``True`` then existing required
       Python packages will be upgraded to the most recent version that
       matches requirements.
    |

    ::

        PIP_UPGRADE=True

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

IP Version
    | Default: ``IP_VERSION=4+6``
    | This setting can be used to configure DevStack to create either an IPv4,
      IPv6, or dual stack tenant data network by setting ``IP_VERSION`` to
      either ``IP_VERSION=4``, ``IP_VERSION=6``, or ``IP_VERSION=4+6``
      respectively. This functionality requires that the Neutron networking
      service is enabled by setting the following options:
    |

    ::

        disable_service n-net
        enable_service q-svc q-agt q-dhcp q-l3

    | The following optional variables can be used to alter the default IPv6
      behavior:
    |

    ::

        IPV6_RA_MODE=slaac
        IPV6_ADDRESS_MODE=slaac
        FIXED_RANGE_V6=fd$IPV6_GLOBAL_ID::/64
        IPV6_PRIVATE_NETWORK_GATEWAY=fd$IPV6_GLOBAL_ID::1

    | *Note: ``FIXED_RANGE_V6`` and ``IPV6_PRIVATE_NETWORK_GATEWAY``
      can be configured with any valid IPv6 prefix. The default values make
      use of an auto-generated ``IPV6_GLOBAL_ID`` to comply with RFC 4193.*

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
       LOGDIR=$DEST/logs
       LOGFILE=$LOGDIR/stack.sh.log
       ADMIN_PASSWORD=quiet
       DATABASE_PASSWORD=$ADMIN_PASSWORD
       RABBIT_PASSWORD=$ADMIN_PASSWORD
       SERVICE_PASSWORD=$ADMIN_PASSWORD
       SERVICE_TOKEN=a682f596-76f3-11e3-b3b2-e716f9080d50
