141 lines
4.3 KiB
ReStructuredText
141 lines
4.3 KiB
ReStructuredText
![]() |
==========================
|
||
|
Developing with Devstack
|
||
|
==========================
|
||
|
|
||
|
Now that you have your nifty DevStack up and running, what can you do
|
||
|
with it?
|
||
|
|
||
|
Inspecting Services
|
||
|
===================
|
||
|
|
||
|
By default most services in DevStack are running in a `screen
|
||
|
<https://www.gnu.org/software/screen/manual/screen.html>`_
|
||
|
session.
|
||
|
|
||
|
.. code-block:: bash
|
||
|
|
||
|
os3:~> screen -list
|
||
|
There is a screen on:
|
||
|
28994.stack (08/10/2016 09:01:33 PM) (Detached)
|
||
|
1 Socket in /var/run/screen/S-sdague.
|
||
|
|
||
|
You can attach to this screen session using ``screen -r`` which gives
|
||
|
you a view of the services in action.
|
||
|
|
||
|
.. image:: assets/images/screen_session_1.png
|
||
|
:width: 100%
|
||
|
|
||
|
Basic Screen Commands
|
||
|
---------------------
|
||
|
|
||
|
The following minimal commands will be useful to using screen:
|
||
|
|
||
|
* ``ctrl-a n`` - go to next window. Next is assumed to be right of
|
||
|
current window.
|
||
|
* ``ctrl-a p`` - go to previous window. Previous is assumed to be left
|
||
|
of current window.
|
||
|
* ``ctrl-a [`` - entry copy/scrollback mode. This allows you to
|
||
|
navigate back through the logs with the up arrow.
|
||
|
* ``ctrl-a d`` - detach from screen. Gets you back to a normal
|
||
|
terminal, while leaving everything running.
|
||
|
|
||
|
For more about using screen, see the excellent `screen manual
|
||
|
<https://www.gnu.org/software/screen/manual/screen.html>`_.
|
||
|
|
||
|
Patching a Service
|
||
|
==================
|
||
|
|
||
|
If you want to make a quick change to a running service the easiest
|
||
|
way to do this is:
|
||
|
|
||
|
* attach to screen
|
||
|
* navigate to the window in question
|
||
|
* ``ctrl-c`` to kill the service
|
||
|
* make appropriate changes to the code
|
||
|
* ``up arrow`` in the screen window to display the command used to run
|
||
|
that service
|
||
|
* ``enter`` to restart the service
|
||
|
|
||
|
This works for services, except those running under Apache (currently
|
||
|
just ``keystone`` by default).
|
||
|
|
||
|
.. warning::
|
||
|
|
||
|
All changes you are making are in checked out git trees that
|
||
|
DevStack thinks it has full control over. Uncommitted work, or
|
||
|
work committed to the master branch, may be overwritten during
|
||
|
subsequent DevStack runs.
|
||
|
|
||
|
Testing a Patch Series
|
||
|
======================
|
||
|
|
||
|
When testing a larger set of patches, or patches that will impact more
|
||
|
than one service within a project, it is often less confusing to use
|
||
|
custom git locations, and make all your changes in a dedicated git
|
||
|
tree.
|
||
|
|
||
|
In your ``local.conf`` you can add ``**_REPO``, ``**_BRANCH`` for most projects
|
||
|
to use a custom git tree instead of the default upstream ones.
|
||
|
|
||
|
For instance:
|
||
|
|
||
|
.. code-block:: bash
|
||
|
|
||
|
[[local|localrc]]
|
||
|
NOVA_REPO=/home/sdague/nova
|
||
|
NOVA_BRANCH=fold_disk_config
|
||
|
|
||
|
Will use a custom git tree and branch when doing any devstack
|
||
|
operations, such as ``stack.sh``.
|
||
|
|
||
|
When testing complicated changes committing to these trees, then doing
|
||
|
``./unstack.sh && ./stack.sh`` is often a valuable way to
|
||
|
iterate. This does take longer per iteration than direct patching, as
|
||
|
the whole devstack needs to rebuild.
|
||
|
|
||
|
You can use this same approach to test patches that are up for review
|
||
|
in gerrit by using the ref name that gerrit assigns to each change.
|
||
|
|
||
|
.. code-block:: bash
|
||
|
|
||
|
[[local|localrc]]
|
||
|
NOVA_BRANCH=refs/changes/10/353710/1
|
||
|
|
||
|
|
||
|
Testing Changes to Apache Based Services
|
||
|
========================================
|
||
|
|
||
|
When testing changes to Apache based services, such as ``keystone``,
|
||
|
you can either use the Testing a Patch Series approach above, or make
|
||
|
changes in the code tree and issue an apache restart.
|
||
|
|
||
|
|
||
|
Testing Changes to Libraries
|
||
|
============================
|
||
|
|
||
|
When testing changes to libraries consumed by OpenStack services (such
|
||
|
as oslo or any of the python-fooclient libraries) things are a little
|
||
|
more complicated. By default we only test with released versions of
|
||
|
these libraries that are on pypi.
|
||
|
|
||
|
You must first override this with the setting ``LIBS_FROM_GIT``. This
|
||
|
will enable your DevStack with the git version of that library instead
|
||
|
of the released version.
|
||
|
|
||
|
After that point you can also specify ``**_REPO``, ``**_BRANCH`` to use
|
||
|
your changes instead of just upstream master.
|
||
|
|
||
|
.. code-block:: bash
|
||
|
|
||
|
[[local|localrc]]
|
||
|
LIBS_FROM_GIT=oslo.policy
|
||
|
OSLOPOLICY_REPO=/home/sdague/oslo.policy
|
||
|
OSLOPOLICY_BRANCH=better_exception
|
||
|
|
||
|
Because libraries are used by many services, library changes really
|
||
|
need to go through a full ``./unstack.sh && ./stack.sh`` to see your
|
||
|
changes in action.
|
||
|
|
||
|
To figure out the repo / branch names for every library that's
|
||
|
supported, you'll need to read the devstack source.
|