Skip to main content

Manage Galaxy servers

Project description

========================================
gravity - Galaxy Server Administration
========================================

A process manager (`supervisor`_) and management tools for `Galaxy`_ servers.

Installing this will give you two executables, ``galaxycfg`` and ``galaxyadm``.
As their names imply, ``galaxycfg`` does things related to configuration and
``galaxyadm`` does things related to administration.

A virtualenv will automatically be created for your Galaxy server. It's a good
thing.

Installation
============

Python 2.7 is required. Sadly, Python 3 won't work, because supervisor doesn't
support it, `although work is in progress <supervisor issue 491_>`_.

To install:

``pip install gravity``

To make your life easier, you are encourged to install into a `virtualenv`_,
and to make that trivial, you are encouraged to use `virtualenv-burrito`_.

TODO
====

- Write tests
- Write documentation
- Sort out whether the AttributeDict stuff is really a good idea or
not, and either access things as items or attributes but not both.
- Check for hash collisions when generating instance names
- Move the TODO and ideas to issues in Github.

Ideas
=====

- Enable arbitrary environment configuration for supervisor processes
- ``galaxycfg set``? e.g.
``galaxycfg set instance_name autostart=true``. But then should all
of ``[galaxy:server]`` become options directly controlled by
``galaxycfg``? The nice thing about ``[galaxy:server]`` is that
gravity is updated from it, which may be more convenient than
command-line driven configuration.

Notes
=====

``[galaxy:server]``

Add this section to your ``galaxy.ini``, ``reports_wsgi.ini``,
``tool_shed_wsgi.ini`` to set:

::

instance_name = string # override the default auto-generated instance name
galaxy_root = /path # if galaxy is not at ../ or ./ from the config file
virtualenv = /path # override default auto-generated virtualenv path (it
# will be created if it does not exist)
log_dir = /path # where to log galaxy server output. for uwsgi you
# probably want to use uwsgi's logto option though
uwsgi_path = /path # explicit path to uwsgi, otherwise it will be found on
# $PATH. Or, the special value `install`, which will
# cause it to be installed into service's virtualenv

Potentially useful information, tricks, etc.:

- Unless you set different state dirs with ``--state-dir`` or
``$GALAXYADM_STATE_DIR``, there will only be one supervisord for all
of your galaxy instances. But they will be separated out by a
generated ``instance_name``. You can override this with
``instance_name`` in ``[galaxy:server]``.

- To put configs (galaxy configs, galaxy + reports, whatever) into the
same instance, set their ``instance_name`` to the same string in each
config's ``[galaxy:server]``. This puts them into a single supervisor
group, which may be what you want, although note that any
start/stop/restart/etc. is performed on the entire group, which may
not be what you want.

- The config manager generally views things in terms of config files.
If you change the virtualenv or ``galaxy_root`` in a config file, it
will not change that value for all services in the instance
(supervisor group), it will only change it for the services started
from that config.

- Anything you drop in to
``$GALAXYADM_STATE_DIR/supervisor/supervisord.conf.d`` will be picked
up by supervisord on a ``galaxyadm supervisorctl update`` or just
``galaxyadm update``

- The ``job_conf.xml`` parsed corresponds to the galaxy config, it'll
check the path in ``job_config_file`` in ``[app:main]`` or default to
``galaxy_root/config/job_conf.xml`` if that file exists. If handlers
in ``job_conf.xml`` have a corresponding ``[server:]`` in
``galaxy.ini``, they will be started using Paste. If there is not a
corresponding ``[server:]`` they will be started as a "standalone"
server with ``galaxy_root/lib/galaxy/main.py``

Commands
========

galaxycfg
---------

gravity needs to know where your Galaxy config file(s) are. ``galaxcfg``
is how you manage them.

Use ``galaxycfg -h`` for details. Subcommands also support ``-h``, e.g.
``galaxycfg add -h``.

galaxycfg subcommands
~~~~~~~~~~~~~~~~~~~~~

``add``

Register a Galaxy, Reports, or Tool Shed server config with the process
manager, create a virtualenv, create supervisor configs, and update.
Does not start.

``list``

List config files registered with the process manager.

``instances``

List known instances and services.

``get /path/to/galaxy.ini``

Show stored configuration details for the named config file.

``rename /path/to/old.ini /path/to/new.ini``

Use this if you move your config.

``remove /path/to/galaxy.ini`` ``remove instance_name``

Deregister a Galaxy et. al. server config., or all configs referencing
the supplied ``instance_name``.

galaxyadm
---------

``galaxyadm`` controls your Galaxy server processes. Use this after
you've registered a config file with ``galaxycfg add``.

Use ``galaxyadm -h`` for details.

galaxyadm subcommands
~~~~~~~~~~~~~~~~~~~~~

| ``start [instance_name]``
| ``stop [instance_name]``
| ``restart [instance_name]``

Roughly what you'd expect. If ``instance_name`` isn't provided, perform
the operation on all known instances.

If you call ``start`` from the root (or from 1 subdirectory deep) of a
Galaxy source tree, ``config/galaxy.ini`` if it exists, or else
``config/galaxy.ini.sample`` will automatically be registered with
``galaxycfg`` add and then ``galaxyadm start`` will start the newly
added server.

``reload [instance_name]``

The same as restart but uWSGI master processes will only receive a
``SIGHUP`` so the workers restart but the master stays up.

``graceful [instance_name]``

The same as reload but Paste servers will be restarted sequentially, and
the next one will not be restarted until the previous one is up and
accepting requests.

``update``

Figure out what has changed in configs, which could be:

- changes to ``[galaxy:server]``
- adding or removing ``[server:]`` sections
- adding or removing a ``[uwsgi]`` section
- adding or removing handlers in ``job_conf.xml``

This will perform the operation for all registered configs, which may
cause unintended service restarts.

Any needed changes to supervisor configs will be performed and then
``supervisorctl update`` will be called. You will need to do a
``galaxy start`` after this to start any newly added instances (or
possibly even old instances, since adding new programs to a group in
supervisor causes the entire group to be stopped).

Update is called automatically for the ``start``, ``stop``, ``restart``,
``reload``, and ``graceful`` subcommands.

``supervisorctl [subcommand]``

Pass through directly to supervisor

``shutdown``

Stop supervisord

.. _supervisor: http://supervisord.org/
.. _Galaxy: http://galaxyproject.org/
.. _supervisor issue 491: https://github.com/Supervisor/supervisor/issues/491
.. _virtualenv: https://virtualenv.pypa.io/
.. _virtualenv-burrito: https://github.com/brainsik/virtualenv-burrito


=========
History
=========

0.8
===

- Add auto-register to ``galaxy start`` if it's called from the root (or
subdirectory) of a Galaxy root directory.
- Make ``galaxycfg remove`` accept instance names as params in addition to
config file paths.
- Use the same hash generated for an instance name as the hash for a generated
virtualenv name, so virtualenvs are more easily identified as belonging to a
config.
- Renamed from ``galaxyadmin`` to ``gravity`` (thanks John Chilton).

0.7
===

- Added the ``galaxyadm`` subcommand ``graceful`` on a suggestion from Nicola
Soranzo.
- Install uWSGI into the config's virtualenv if requested.
- Removed any dependence on Galaxy and eggs.
- Moved project to its own repository from the Galaxy clone I'd been working
from.

Older
=====

- Works in progress as part of the Galaxy code.

Project details


Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page