On 2020-09-29 21:44, Dennis Kliban wrote:
On Tue, Sep 29, 2020 at 2:26 PM Dennis Kliban <[email protected] <mailto:[email protected]>> wrote:

    On Tue, Sep 29, 2020 at 1:37 PM Maarten Beeckmans
    <[email protected] <mailto:[email protected]>> wrote:

        On 2020-09-29 18:22, Dennis Kliban wrote:
        On Tue, Sep 29, 2020 at 10:30 AM Maarten Beeckmans
        <[email protected] <mailto:[email protected]>> wrote:

            We are trying to automate our Pulp3 setup the same way as
            our Pulp2 setup.

            We have the following use cases in our Pulp2 setup:

            a) We create mirrors and repositories automatically for
            every environment (using puppet and the API). The
            repositories are defined in a yaml configuration file
            (Puppet Hiera).
              - We have several problems for doing this in Pulp3.
            It's very complex to automatically create mirrors (ex.
            centos-8-appstream) for the development environment (that
            are in sync with the upstream repositories). A possible
            solution for this problem would be to add a 'latest' flag
            to publications and distributions so that they are always
            pointing to the latest version of the repository.
              - It is possible to create the repositories with
            scripts, but that's specific and quite hacky. It's also
            not possible to automatically update the publications and
            distributions this way. We would need to keep a local
            copy of what distribution maps to what repository, but
            that's not a good idea. Why keep a local copy of the
            mapping if that's present in pulp.


        We are already planning to improve this workflow. A single
        API call will create a task that will sync a repo, create a
        new publication, and update the distribution. We are first
        going to introduce the change in pulp_file and then other
        plugins will follow. https://pulp.plan.io/issues/7469
        This issue seems to be solving my issue.

            b) We upload packages from one repository (that is not
            served to clients) to another repository based on lists
            in yaml (cherry picking), or straight from a (jenkins)
            Pipeline. This is done by the pulp-admin commands.
              - cherry picking could be done by copying content from
            one repository to another using the copy API call, but we
            want to automatically expose those changes to the
            development environment (promotion can be done as in c).
              - Uploading content isn't an issue because this is
            possible by converting the pulp-admin commands to api calls.


        You want to be able to upload a package and have that
        operation create a new publication and update the
        distribution. This would be similar to the story that I
        linked above for syncing - except for the upload use case. 
        Am I understanding correctly?
        Yes, that's what we want. If we create an rpm itself, we want
        that's it directly available in the (development) repository
        so we don't have to create a new publication and update the
        distribution. For adding it to production, we would promote
        the repository as described in c. Same when copying packages
        between repositories.


    I definitely see the utility in making the content available to
    the users right away. Please file a story at
    https://pulp.plan.io/issues/new/ so we have this use captured.
    This use case should be considered also when implementing #7469.

I've described this problem in the following issue: https://pulp.plan.io/issues/7626

            c) We want to be able to 'promote' a set of repositories
            from one environment to another. We are using a script
            that is generated by puppet when creating the
            repositories in a).
              For 'promoting' a set of repositories to one
            environment to another environment, this is explained
            https://docs.pulpproject.org/pulpcore/workflows/promotion.html.


        I don't understand what challenge you are describing in C.
        Now we have different repositories for development and
        production. We want to be able to easily promote repositories
        from development to production (with archiving, the production
        repository keeps X older versions of packages), this may be
        done with one command in the cli interface or different
        commands that can be scripted. This is somewhat explained in
        the docs, but it's very high level. Maybe it's a good idea to
        add an example in the rpm docs (with the promoting of an
        CentOS repository)?


    I agree that we need more docs around this. Can you please file an
    issue about this also?

    There are two ways to accomplish this.

    1) Create a distribution for each environment. In this case
    whenever you are ready to promote a publication from the Dev
    distribution to the Production distribution you just simply look
    at which publication is currently assigned to Dev and assign it to
    Production.

    When you want to roll back to a previous publication you need to
    query for a publication that is associated with a specific
    repository version (or publication date of creation) that you are
    interested in. Then you need to update the distribution with that
    publication.

    This workflow gets tricky when you need to release a hotfix to
    production and skip all the other environments. Since the
    repository version history is probably much further along than
    Production is right now, you need to find the repository version
    that is associated with the current publication that is associated
    with the Production distribution. Then you need to use the
    'modify' API[0] with the Production repository version as the
    base_version and add/remove any packages that you need for
    Production. Then you need to create a new publication and
    associate it with the Production distribution. Then you will need
    to create another repository version using the previous repository
    version as the base_version. This will get you back to where you
    were before in your Development environment.

    2) Create a repository and distribution for each environment. Each
    time you want to promote a repository to the Production
    environment you need to use the repository 'modify' API[0] to
    create a new Production repository version. The base_version would
    be the Dev repository version which you want to promote. You would
    then create a publication for that new Production repository
    version and associate that publication with the Production
    distribution.

    The rollback process is similar to the above, but the advantage of
    this approach is that you have separate repository version history
    for each environment. When you need to skip environments and go
    straight to Production, you can simply add/remove packages to the
    latest Production repository version without having to figure out
    which version your Production repository is at.



I just read through our docs and now I am not sure if my explanation is any better than what we already have there. Please reply with any questions about the workflow. I am hoping this dialogue will help us improve the docs.

Your explanation here is much more clear to me than how it's described in the docs. I think it would be a better idea to add the advantages and disadvantages to the documentation and maybe add some examples as in the other workflows.

    [0]
    
https://pulp-rpm.readthedocs.io/en/latest/restapi.html#operation/repositories_rpm_rpm_modify

            Thanks for all the work

            Maarten

_______________________________________________
Pulp-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/pulp-list

Reply via email to