summaryrefslogtreecommitdiffstats
path: root/src/ceph/doc/dev/ceph-volume/plugins.rst
blob: 95bc761e21f9e20b4504bcde6cca29108700d962 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
.. _ceph-volume-plugins:

Plugins
=======
``ceph-volume`` started initially to provide support for using ``lvm`` as
the underlying system for an OSD. It is included as part of the tool but it is
treated like a plugin.

This modularity, allows for other device or device-like technologies to be able
to consume and re-use the utilities and workflows provided.

Adding Plugins
--------------
As a Python tool, plugins ``setuptools`` entry points. For a new plugin to be
available, it should have an entry similar to this in its ``setup.py`` file:

.. code-block:: python

    setup(
        ...
        entry_points = dict(
            ceph_volume_handlers = [
                'my_command = my_package.my_module:MyClass',
            ],
        ),

The ``MyClass`` should be a class that accepts ``sys.argv`` as its argument,
``ceph-volume`` will pass that in at instantiation and call them ``main``
method.

This is how a plugin for ``ZFS`` could look like for example:

.. code-block:: python

    class ZFS(object):

        help_menu = 'Deploy OSDs with ZFS'
        _help = """
    Use ZFS as the underlying technology for OSDs

    --verbose   Increase the verbosity level
        """

        def __init__(self, argv):
            self.argv = argv

        def main(self):
            parser = argparse.ArgumentParser()
            args = parser.parse_args(self.argv)
            ...

And its entry point (via ``setuptools``) in ``setup.py`` would looke like:

.. code-block:: python

        entry_points = {
            'ceph_volume_handlers': [
                'zfs = ceph_volume_zfs.zfs:ZFS',
            ],
        },

After installation, the ``zfs`` subcommand would be listed and could be used
as::

    ceph-volume zfs