Type Definitions


A type definition is used to configure Pulp to support inventorying a type of content unit, such as an RPM or a Puppet module. Pulp uses the data in the definition to configure the database storage for those units with uniqueness constraints and to optimize queries relevant to that type.


Each type definition contains the following attributes.


Programmatic identifier for the content type. The ID must be unique across all type definitions installed on the Pulp server.


User-friendly name of the type.


User-friendly description of the type.


List of all attributes that will be in units of this type that, when combined, represent the unique key for a unit. Pulp will enforce the uniqueness for units of this type based on this attribute.


List of added non-unique indexes to add for storing units of the type. Each entry in the list may itself be another list to represent a compound index.


List of type IDs for other types that are related to the type being defined. This nature of relationship is not explicitly defined; depending on the types of units involved it may be parent/child, dependent units, or something else. Pulp uses this information when the importer indicates to link a unit with another.

The unit_key attribute creates one or more indexes in the database as well. Given a value of [“a”, “b”, “c”], the following indexes are automatically created and need not be specified in the search_indexes field:

  • a

  • a, b

  • a, b, c

Note that neither an index on just “b” nor the index “b, c” are automatically created.

Note that indices can only be created using this configuration. If one needs to be destroyed, a migration should be written to do so.


Type definitions are defined in a JSON file. Multiple types may be defined in a single file. The file must be placed in the /usr/lib/pulp/plugins/types directory and has no restrictions on its name.


Once the type definition file is in the appropriate directory, the pulp-manage-db script must be run to install the type. This script should also be run after making any changes to the type definition.


Below is a sample type definition file, taken from the Puppet support bundle.

{"types": [
        "id" : "puppet_module",
        "display_name" : "Puppet Module",
        "description" : "Puppet Module",
        "unit_key" : ["name", "version", "author"],
        "search_indexes" : ["author", "tag_list"]

This file installs a single type that is referenced by the id “puppet_module”. Each inventoried module will have a unique tuple of name, version, and author in its metadata. In addition to the indexes created by the unit key, indexes will be created on the “author” and “tag_list” attributes in each unit.