Write the local.conf file for use by devstack

**Role Variables**

.. zuul:rolevar:: devstack_base_dir
   :default: /opt/stack

   The devstack base directory.

.. zuul:rolevar:: devstack_local_conf_path
   :default: {{ devstack_base_dir }}/devstack/local.conf

   The path of the local.conf file.

.. zuul:rolevar:: devstack_localrc
   :type: dict

   A dictionary of variables that should be written to the localrc
   section of local.conf.  The values (which are strings) may contain
   bash shell variables, and will be ordered so that variables used by
   later entries appear first.

   As a special case, the variable ``LIBS_FROM_GIT`` will be
   constructed automatically from the projects which appear in the
   ``required-projects`` list defined by the job plus the project of
   the change under test.  To instruct devstack to install a library
   from source rather than pypi, simply add that library to the job's
   ``required-projects`` list.  To override the
   automatically-generated value, set ``LIBS_FROM_GIT`` in
   ``devstack_localrc`` to the desired value.

.. zuul:rolevar:: devstack_local_conf
   :type: dict

   A complex argument consisting of nested dictionaries which combine
   to form the meta-sections of the local_conf file.  The top level is
   a dictionary of phases, followed by dictionaries of filenames, then
   sections, which finally contain key-value pairs for the INI file
   entries in those sections.

   The keys in this dictionary are the devstack phases.

   .. zuul:rolevar:: [phase]
      :type: dict

      The keys in this dictionary are the filenames for this phase.

      .. zuul:rolevar:: [filename]
         :type: dict

         The keys in this dictionary are the INI sections in this file.

         .. zuul:rolevar:: [section]
            :type: dict

            This is a dictionary of key-value pairs which comprise
            this section of the INI file.

.. zuul:rolevar:: devstack_base_services
   :type: list
   :default: {{ base_services | default(omit) }}

   A list of base services which are enabled. Services can be added or removed
   from this list via the ``devstack_services`` variable. This is ignored if
   ``base`` is set to ``False`` in ``devstack_services``.

.. zuul:rolevar:: devstack_services
   :type: dict

   A dictionary mapping service names to boolean values.  If the
   boolean value is ``false``, a ``disable_service`` line will be
   emitted for the service name.  If it is ``true``, then
   ``enable_service`` will be emitted. All other values are ignored.

   The special key ``base`` can be used to enable or disable the base set of
   services enabled by default. If ``base`` is found, it will processed before
   all other keys. If its value is ``False`` a ``disable_all_services`` will be
   emitted; if its value is ``True`` services from ``devstack_base_services``
   will be emitted via ``ENABLED_SERVICES``.

.. zuul:rolevar:: devstack_plugins
   :type: dict

   A dictionary mapping a plugin name to a git repo location.  If the
   location is a non-empty string, then an ``enable_plugin`` line will
   be emmitted for the plugin name.

   If a plugin declares a dependency on another plugin (via
   ``plugin_requires`` in the plugin's settings file), this role will
   automatically emit ``enable_plugin`` lines in the correct order.

.. zuul:rolevar:: tempest_plugins
   :type: list

   A list of tempest plugins which are installed alongside tempest.

   The list of values will be combined with the base devstack directory
   and used to populate the ``TEMPEST_PLUGINS`` variable. If the variable
   already exists, its value is *not* changed.
