Maintenance: Planio will be observing a scheduled maintenance window this Tuesday, November 5, 2024 from 03:00 UTC until 06:30 UTC to perform urgent network maintenance in our primary data center. Your Planio account will be unavailable during this maintenance window.
Issue #6018
closedStory #4762: [Epic] As a user, I can copy content
As a user, I have an API for copying content between repositories
Description
API Design¶
The problems created by multi-repo-copy and repository versions in particular necessitates an entirely JSON-blob-based copy configuration.
- We must support an arbitrary number of source and destination repositories (multi-repo-copy)
- We must be able to simultaneously filter and copy from all of the source repos (not just the "primary" one like in Pulp 2) for performance reasons
- We can't provide a global content list/criteria to search the source repos for for correctness reasons [0], each pair of source/destination must have its own content list/criteria to use
- We must support setting "base_version" on each of the created repository versions in the destination repositories
- Katello can't just use the latest versions, sometimes they have to pick different versions of the destination repositories to use as bases.
So for every pair of source and destination repos, of which there can be an artibtrary number, you also have to be able to (optionally) provide a list of content/criteria to use for the copy and (optionally) use a different "base_version". Trying to do all of those things at once with combinations of parameters would be not be a reasonable thing to do, but, it's not so difficult with JSON.
[0] If multiple repos contain the same content unit, Pulp can't decide which one to copy from. With multiple destination repositories, this is important because the source repository determines the destination repository
MVP Copy API Concept¶
POST /pulp/api/v3/rpm/copy/
config:=[
{"source_repo_version": "$SRC_REPO_VERS_HREF", "dest_repo": "$DEST_REPO_HREF", "content": [$HREF1, $HREF2]},
{"source_repo_version": "$SRC_REPO_VERS_HREF", "dest_repo": "$DEST_REPO_HREF", "dest_base_version": "$DEST_BASE_VERSION", "content": []},
]
dependency_solving=False
There are some obvious extensions that could be made for ergonomics and usability but they are not strictly necessary for the MVP, and they're pure extensions. Due to time constraints on integration, we should probably stick to the MVP and add the other niceties later.
Endpoint schema¶
"config" (required, list): Complex configuration object "dependency_solving" (optional, bool): Enable or disable dependency solving for the copy operation. Default TBD based on performance.
JSON config schema¶
The config is a list of dictionaries where the keys are roughly the parameters you would normally expect for a copy operation
"source_repo_version" (required, repository version href): If provided, uses this repository version as the source content set "dest_repo" (required, repository href): The repository to create a new version in (copy content into) "dest_base_version" (optional, int): The base version to use for the destination repository "content" (TBD, list): The list of content hrefs to be copied
Updated by dalley over 4 years ago
- Status changed from ASSIGNED to POST
- Assignee changed from dalley to daviddavis
Updated by daviddavis over 4 years ago
- Status changed from POST to MODIFIED
Applied in changeset 4caa4a4957bb64e3acbe6c89522312b05019a699.
Updated by daviddavis over 4 years ago
Applied in changeset 8cd0ab8608e320a132023c214300e52381119a8e.
Updated by daviddavis over 4 years ago
Applied in changeset 514df5f094cd8a1101a7a14fa5d50b70ed71acac.
Updated by daviddavis over 4 years ago
Applied in changeset 539cd7809d26f55f81d2a11ea76e7763824069b7.
Updated by daviddavis over 4 years ago
Applied in changeset e419b4698e3ac9cf80cddb047ed47eebf28f1367.
Updated by daviddavis over 4 years ago
Applied in changeset f710bf0db112745e7af4dea393bbcd417353a73f.
Updated by daviddavis over 4 years ago
Applied in changeset fb9d655944eacbc6940a93bb28a8817c2b5e418d.
Added by dalley over 4 years ago
Added by daviddavis over 4 years ago
Revision 09187398 | View on GitHub
Allow copying of multiple sources to destinations in one call
Updated by daviddavis over 4 years ago
Applied in changeset 09187398a3636257fe0c4dcb7f0aa01889c2c284.
Updated by dalley over 4 years ago
- Sprint/Milestone changed from Pulp 3.x RPM (Katello 3.16) to Pulp RPM 3.3.0
Updated by dalley over 4 years ago
- Status changed from MODIFIED to CLOSED - CURRENTRELEASE
Initial copy implementation
Criteria and depsolving are no-op -- copies everything
Also includes a basic smash test
re: #6018 https://pulp.plan.io/issues/6018