Project

Profile

Help

Issue #6018

closed

Story #4762: [Epic] As a user, I can copy content

As a user, I have an API for copying content between repositories

Added by dalley over 4 years ago. Updated about 4 years ago.

Status:
CLOSED - CURRENTRELEASE
Priority:
Normal
Assignee:
Sprint/Milestone:
Start date:
Due date:
Estimated time:
(Total: 0:00 h)
Severity:
2. Medium
Version:
Platform Release:
OS:
Triaged:
Yes
Groomed:
No
Sprint Candidate:
No
Tags:
Sprint:
Sprint 68
Quarter:

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


Sub-issues 2 (0 open2 closed)

Story #6019: As a user, I can specify content to be copied by the content's pulp_hrefCLOSED - CURRENTRELEASEdaviddavis

Actions
Story #6268: As a user, I can copy from multiple source repo versions to destination repos at one timeCLOSED - CURRENTRELEASEdaviddavis

Actions

Also available in: Atom PDF