.. _xivo-confgend-developer: =============================== XiVO confgend developer's guide =============================== xivo-confgend uses drivers to implement the logic required to generate configuration files. It uses `stevedore `_ to do the driver instantiation and discovery. Plugins in xivo-confgend use setuptools' entry points. That means that installing a new plugin to xivo-confgend requires an entry point in the plugin's *setup.py*. Drivers ------- Driver plugin are classes that are used to generate the content of a configuration file. The implementation of a plugin should have the following properties. #. It's ``__init__`` method should take one argument #. It should have a ``generate`` method which will return the content of the file #. A setup.py adding an entry point The ``__init__`` method argument is the content of the configuration of xivo-confgend. This allows the driver implementor to add values to the configuration in ``/etc/xivo-confgend/conf.d/*.yml`` and these values will be available in the driver. The generate method has no argument, the configuration provided to the ``__init__`` should be sufficient for most cases. ``generate`` is called within a ``scoped_session`` of xivo-dao, allowing the usage of xivo-dao without prior setup in the driver. The namespaces used for entry points in xivo-confgend have the following form: xivo_confgend.. as an example, a generator for sip.conf would have the following namespace: xivo_confgend.asterisk.sip.conf Example ------- Here is a typical ``setup.py``: .. code-block:: python :linenos: #!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright 2016 The Wazo Authors (see the AUTHORS file) # SPDX-License-Identifier: GPL-3.0+ from setuptools import setup from setuptools import find_packages setup( name='Wazo confgend driversample', version='0.0.1', description='An example driver', packages=find_packages(), entry_points={ 'xivo_confgend.asterisk.sip.conf': [ 'my_driver = src.driver:MyDriver', ], } ) With the following package structure:: . ├── setup.py └── src └── driver.py ``driver.py``: .. code-block:: python :linenos: # -*- coding: utf-8 -*- # Copyright 2016 The Wazo Authors (see the AUTHORS file) # SPDX-License-Identifier: GPL-3.0+ class MyDriver(object): def __init__(self, config): self._config = config def generate(self): return 'Hello World!' To enable this plugin, you need to: #. Install the plugin with:: python setup.py install #. Create a config file in ``/etc/xivo-confgend/conf.d``:: plugins: asterisk.sip.conf: my_driver #. Restart xivo-confgend:: systemctl restart xivo-confgend