Server Plugins
==============

Introduction
------------

There are four components that can be used in a server side plugin:

 * *Migrations:* It is advantageous, but not required, to define a migration
   tracker before your plugin's first release. Pulp's migration system allows
   you to adjust your data schema at upgrade time. Please see the Migration
   documentation for details.
 * *Type definitions* are used to tell Pulp about the types of content that
   will be stored. These definitions contain metadata about the type itself
   (e.g. name, description) and clues about the structure of the unit, such
   as uniqueness information and search indexes. Pulp uses that information to
   properly configure its internal storage of the unit to be optimized for
   the expected usage of the type. Type definitions are defined in a JSON
   document.
 * *Importers* are used to handle the addition of content to a repository. This
   includes both synchronizing content from an external source or handling
   user-uploaded content units. An importer is linked to one or more type
   definitions to describe the types of units it will handle. At runtime,
   an importer is attached to a repository to provide the behavior of that
   repository's sync call. Importers are Python code that is run by the server.
 * *Distributors* are added to a repository to publish its content. The
   definition of publish varies depending on the distributor and can include
   anything from serving the repository's content over HTTP to generating an
   RSS feed with information about the repositories contents. One or more
   distributors may be attached to a repository, allowing the repository to
   be exposed over a number of different mechanisms. Like importers,
   distributors are Python code executed on the server.


Documentation
-------------

Details on each server-side component can be found in the pages below:

.. toctree::
   :maxdepth: 2

   type_defs
   migrations
   importers
   distributors
   common
   example

