.. -*- mode: rst -*-

.. _development-packages:

=======================
Developing for Packages
=======================

The :ref:`server-plugins-generators-packages` plugin offers multiple
backends to support different types of software repositories.  New
backends can be written to handle new types of software repositories.

Each new Packages backend must be contained in its own module in
``Bcfg2.Server.Plugins.Packages``.  Each module must implement two
classes: A
:class:`Bcfg2.Server.Plugins.Packages.Collection.Collection` subclass
called ``<module>Collection``, and a
:class:`Bcfg2.Server.Plugins.Packages.Source.Source` subclass called
``<module>Source``.  E.g., the
:mod:`Bcfg2.Server.Plugins.Packages.Yum` backend has
:class:`Bcfg2.Server.Plugins.Packages.Yum.YumCollection` and 
:class:`Bcfg2.Server.Plugins.Packages.Yum.YumSource` objects.  These
interfaces are explained in detail below.

The Collection Object
=====================

.. automodule:: Bcfg2.Server.Plugins.Packages.Collection


The Source Object
=================

.. automodule:: Bcfg2.Server.Plugins.Packages.Source

The Packages Module
===================

.. automodule:: Bcfg2.Server.Plugins.Packages

Packages Source Description
===========================

.. automodule:: Bcfg2.Server.Plugins.Packages.PackagesSources

Existing Packages Backends
==========================

Yum
---

.. automodule:: Bcfg2.Server.Plugins.Packages.Yum

APT
---

.. automodule:: Bcfg2.Server.Plugins.Packages.Apt

Pacman
------

.. automodule:: Bcfg2.Server.Plugins.Packages.Pac
