Pulp is a repository content management tool, supporting RPM, Debian, Puppet modules, and now Docker repositories amongst other content. The project has released version 2.5, including bug fixes and a new plugin to manage Docker repositories.
As part of the SysAdvent series, Justin Garrison has provided an introduction to managing repositories with Pulp. Pulp uses importers to fetch and sync content from external sources, local filesystem or other repositories, and distributors then publish that content via http, ISO, rsync or other means. New sources and formats can be added and extended with plugins.
Pulp 2.5.0 works with pulp_docker, an optional plugin to manage Docker repositories, still in tech preview status. The plugin allows to locally mirror either all of or part of a Docker repository, host content in new repositories, and manage content from multiple sources in a single place, including:
- Separation of administrator interface (Pulp API) and end-user interface (Docker)
- Role-based access control (RBAC) with LDAP support.
- Synchronization of content across an organization using nodes.
- Promotion of content through user-defined environments, like "dev", "test", and "prod".
- Event-based notifications through http, amqp or email.
- Read-only implementation of the Docker registry API that can be deployed independently.
Pulp can be deployed with the Docker registry functionality as a VM, with Crane as a Docker container, or using a multi-container environment. A Puppet module is also provided for installation and configuration in RHEL and Fedora.
Pulp components include:
- Apache httpd: front-end for API and http(s) published repos.
- Pulp Workers: process for long running tasks like repo syncing and publishing.
- Pulp CeleryBeat: maintains workers and task cancellation.
- Pulp Resource Manager: job assigner for tasks.
- MongoDB: repository and content metadata value store.
- Apache Qpid/RabbitMQ: message bus for job assignation.
- pulp-admin: command line tool for managing content and consumers.
All the components can be distributed to scale the service. Pulp servers can also be distributed, replicating other servers fully or partially, across multiple locations in parent-child node relationships.