owned this note
owned this note
Published
Linked with GitHub
# Pulp 3 Web UI
## Intro:
The Pulp 3 Web UI project will have students creating an open-source web application to enable Pulp users to execute the most common workflows for managing RPM repositories. The web application will interact with Pulp's REST API to generate an interactive display for managing RPM packages. Students will get experience with React and Patternfly -- two popular UI technologies used by many professional companies. Performance aspect will be important because Pulp servers can have hundreds of individual repositories each storing many thousands of software packages. Below are the project details.
## Skills:
* Python - Nice to have
* JavaScript - Novice experience
* Web APIs and how to use them - Novice experience
* Web servers - Novice experience
* Web UI development - Novice experience
* Linux - Novice experience
## General Info:
* **Contact**
* Dennis Kliban (dkliban@redhat.com)
~~* David Davis (daviddavis@redhat.com)~~
* **GitHub Repository**
* https://github.com/pulp/pulp-ui
* **What is Pulp?**
* Pulp is an open source Django web application for managing repositories of software packages. Managed packaging formats include RPM, Deb, Python, Container, Ansible Collections, Ruby, Chef Cookbooks, and Maven. While Pulp "core" provides the general REST APIs and a tasking system for performing asynchronous work, plugins provide support for individual content types.
* Pulp enables users to sync repositories from the internet and host them locally. This enables organizations to save on bandwidth and speed up installation of packages by clients on their network.
* Pulp also enables users to upload their own custom packages and serve them locally. This enables organizations to distribute their custom software internally and to external customers.
* With Pulp, users can create custom repositories that are composed of any set of packages needed for a specific environment. This allows users to curate content for each environment in their organization. These environments can represent different stages of their software development lifecycle (e.g. development, test, and production), and can also provide resources for physically different locations around the world such as a data center in India and another in Japan.
* Each time the repository content set changes, Pulp creates a new Repository Version. This enables users to easily rollback any undesired changes to the repository.
* More info at https://pulpproject.org
* **RPM repository sync workflow:**
1) Create an RPM Remote with a URL for a repository available on the internet (e.g. https://fixtures.pulpproject.org/rpm-signed/). Remotes contain all the information needed to connect to a remote repository, e.g. url, username, password
2) Create an RPM Repository in Pulp to house mirrored content. Specify the RPM Remote from step 1 when creating the repository. Also set autopublish to True.
3) Create a Distribution. Distributions tell the content app at which URL to serve repository content. Specify the RPM Repository from step 2 when creating the distribution.
4) Use the Repository's sync API to create a new Repository Version by performing a sync from the Remote associated with it. This operation downloads all the packages and creates a new Repository Version.
## The Problem:
* Pulp users are only able to interact with Pulp using the REST API and CLI.
* Pulp users must create each resource associated with a Pulp repository using multiple calls to the API/CLI.
## The Project:
The order of these items reflects their priority with the highest priority items listed first. At its core, Pulp is a highly concurrent application and integrating with the tasking system should be the first priority. After that, we recommend starting on the endpoints for handling RPM Repositories. Then the stretch goals.
* **Provide a Web UI that allows Pulp users to monitor a task.**
* A lot of operations in Pulp are performed asynchronously. Users are able to use the Tasks API to monitor progress of a an asynchronous task. Each task response contains start time, end time, and N number of progress reports. The Web UI for monitoring a task needs to periodically poll the Tasks API and update the UI with the latest information about the state and all the available progress reports. This UI component needs to be created first so it can be embedded into (or linked to from) all other UIs that need to show progress of an asynchronous operation.
* **Provide a Web UI that allows Pulp users to manage RPM Repositories:**
* Create an RPM repository
* The interface needs to accept all the information that is needed to create an RPM Repository, an RPM Remote, and an RPM Distribution.
* Update an RPM repository
* This interface needs to support updating any of the attributes on the RPM Repository, the RPM Remote, the RPM Distribution. This is an asynchronous operation. After the user clicks the "Update" button, the user will see the progress of up to three tasks (one for Repository, one for Remote, and one for Distribution).
* List RPM Repositories in a paginated manner
* This interface needs to show a subset of the fields associated with all of the RPM Repositories, their Remotes and Distributions.
* View an RPM Repository
* This interface needs to show the information about a specific RPM Repository. In addition to information about the Repository, Remote, and Distribution, users should be able to see a list of Repository Versions. This interface needs to also show the last time the repository was synced.
* Sync an RPM repository
* This interface needs to allow users to start a task that will sync, publish, and distribute the repository. Once there is a running task, the interface needs to show progress of the sync by polling the Task API. Once the task completes, the UI should show the new RepositoryVersion and RPM Publication.
* **Stretch goal requirements:**
* Provide an interface that displays all publication for a repository.
* Provide an interface for creating a Distribution. This will allow users to serve the same content at multiple URLs.
* Provide an interface to edit a distribution.
* Provide an interface to list all distributions.
* **Other requirements:**
* The project needs to use patternfly 4.31.4 and patternfly-react-core 4.40.2
## Community Support:
* Besides contacting the technical project mentor, students can ask questions on Matrix - https://matrix.to/#/#pulp-dev:matrix.org and Discourse - https://discourse.pulpproject.org/
###### tags: `Pulp web-ui`