def migrate_to_pulp3(cls, pulp2distributor, repo_version):
        """
        Migrate distributor to Pulp 3.

        Args:
            pulp2distributor(Pulp2distributor): Pre-migrated pulp2 distributor to migrate

        Return:
            publication(RpmPublication): publication in Pulp 3
            distribution(RpmDistribution): distribution in Pulp 3
            created(bool): True if a distribution has just been created; False if a distribution
                           is an existing one

        """
        pulp2_config = pulp2distributor.pulp2_config

        # this will go away with the simple-complex plan conversion work
        if not repo_version:
            repo = pulp2distributor.pulp2_repos.filter(not_in_plan=False,
                                                       is_migrated=True)
            repo_version = repo[0].pulp3_repository_version
        publication = repo_version.publication_set.first()
        if not publication:
            pulp2_checksum_type = pulp2_config.get('checksum_type')
            checksum_types = None
            if pulp2_checksum_type:
                checksum_types = {
                    'metadata': pulp2_checksum_type,
                    'package': pulp2_checksum_type
                }
            sqlite = pulp2_config.get('generate_sqlite', False)
            try:
                publish(repo_version.pk,
                        checksum_types=checksum_types,
                        sqlite_metadata=sqlite)
            except TypeError:
                # hack, pulp_rpm <3.9 doesn't support sqlite_metadata kwarg
                publish(repo_version.pk, checksum_types=checksum_types)
            publication = repo_version.publication_set.first()

        # create distribution
        distribution_data = cls.parse_base_config(pulp2distributor,
                                                  pulp2_config)

        # ensure that the base_path does not end with / in Pulp 3, it's often present in Pulp 2.
        base_path = pulp2_config.get('relative_url',
                                     pulp2distributor.pulp2_repo_id)
        distribution_data['base_path'] = base_path.rstrip('/')
        distribution_data['publication'] = publication
        distribution, created = RpmDistribution.objects.update_or_create(
            name=distribution_data['name'],
            base_path=distribution_data['base_path'],
            defaults=distribution_data)
        return publication, distribution, created
Exemple #2
0
    def migrate_to_pulp3(cls, pulp2distributor, repo_version):
        """
        Migrate distributor to Pulp 3.

        Args:
            pulp2distributor(Pulp2distributor): Pre-migrated pulp2 distributor to migrate

        Return:
            publication(RpmPublication): publication in Pulp 3
            distribution(RpmDistribution): distribution in Pulp 3
            created(bool): True if a distribution has just been created; False if a distribution
                           is an existing one

        """
        pulp2_config = pulp2distributor.pulp2_config

        if not repo_version:
            repo_version = pulp2distributor.pulp2_repository.pulp3_repository_version
        publication = repo_version.publication_set.first()
        if not publication:
            pulp2_checksum_type = pulp2_config.get('checksum_type')
            checksum_types = None
            if pulp2_checksum_type:
                checksum_types = {
                    'metadata': pulp2_checksum_type,
                    'package': pulp2_checksum_type
                }
            publish(repo_version.pk, checksum_types=checksum_types)
            publication = repo_version.publication_set.first()

        # create distribution
        distribution_data = cls.parse_base_config(pulp2distributor,
                                                  pulp2_config)

        # ensure that the base_path does not end with / in Pulp 3, it's often present in Pulp 2.
        base_path = pulp2_config.get('relative_url',
                                     pulp2distributor.pulp2_repo_id)
        distribution_data['base_path'] = base_path.rstrip('/')
        distribution_data['publication'] = publication
        distribution, created = RpmDistribution.objects.update_or_create(
            name=distribution_data['name'],
            base_path=distribution_data['base_path'],
            defaults=distribution_data)
        return publication, distribution, created
    async def migrate_to_pulp3(cls, pulp2distributor, repo_version):
        """
        Migrate distributor to Pulp 3.

        Args:
            pulp2distributor(Pulp2distributor): Pre-migrated pulp2 distributor to migrate

        Return:
            publication(RpmPublication): publication in Pulp 3
            distribution(RpmDistribution): distribution in Pulp 3
            created(bool): True if a distribution has just been created; False if a distribution
                           is an existing one
        """

        if not repo_version:
            repo_version = pulp2distributor.pulp2_repository.pulp3_repository_version
        publication = repo_version.publication_set.first()
        if not publication:
            # create publication
            publish(repo_version.pk)
            publication = repo_version.publication_set.first()

        # create distribution
        pulp2_config = pulp2distributor.pulp2_config
        distribution_data = cls.parse_base_config(pulp2distributor,
                                                  pulp2_config)

        # ensure that the base_path does not end with / in Pulp 3, it's often present in Pulp 2.
        base_path = pulp2_config.get('relative_url',
                                     pulp2distributor.pulp2_repo_id)
        distribution_data['base_path'] = base_path.rstrip('/')
        distribution_data['publication'] = publication
        distribution, created = RpmDistribution.objects.update_or_create(
            **distribution_data)

        return publication, distribution, created
Exemple #4
0
    def migrate_to_pulp3(cls, pulp2distributor, repo_version, signing_service):
        """
        Migrate distributor to Pulp 3.

        Args:
            pulp2distributor(Pulp2distributor): Pre-migrated pulp2 distributor to migrate

        Return:
            publication(RpmPublication): publication in Pulp 3
            distribution(RpmDistribution): distribution in Pulp 3
            created(bool): True if a distribution has just been created; False if a distribution
                           is an existing one

        """
        pulp2_config = pulp2distributor.pulp2_config

        # this will go away with the simple-complex plan conversion work
        if not repo_version:
            repo = pulp2distributor.pulp2_repos.filter(not_in_plan=False,
                                                       is_migrated=True)
            repo_version = repo[0].pulp3_repository_version
        publication = repo_version.publication_set.filter(
            complete=True).first()
        if not publication:
            pulp2_checksum_type = pulp2_config.get("checksum_type")
            checksum_types = None
            if pulp2_checksum_type:
                checksum_types = {
                    "metadata": pulp2_checksum_type,
                    "package": pulp2_checksum_type,
                }
            else:
                # Set the checksum type based on content in a repo, pulp 2 supports only one
                # checksum type for packages in a repo. It is important to set checksum type for
                # Pulp 3 to Pulp 2 sync use case.
                package_qs = repo_version.content.filter(
                    pulp_type="rpm.package")
                if package_qs.count():
                    pkg_checksum_type = package_qs.first().cast().checksum_type
                    checksum_types = {
                        "metadata": pkg_checksum_type,
                        "package": pkg_checksum_type,
                    }
            sqlite = pulp2_config.get("generate_sqlite", False)
            try:
                publish(
                    repo_version.pk,
                    checksum_types=checksum_types,
                    sqlite_metadata=sqlite,
                )
            except TypeError:
                # hack, pulp_rpm <3.9 doesn't support sqlite_metadata kwarg
                publish(repo_version.pk, checksum_types=checksum_types)
            publication = repo_version.publication_set.filter(
                complete=True).first()

        # create distribution
        distribution_data = cls.parse_base_config(pulp2distributor,
                                                  pulp2_config)

        # ensure that the base_path does not end with / in Pulp 3, it's often present in Pulp 2.
        base_path = pulp2_config.get("relative_url",
                                     pulp2distributor.pulp2_repo_id)
        distribution_data["base_path"] = base_path.rstrip("/")
        distribution_data["publication"] = publication
        distribution, created = RpmDistribution.objects.update_or_create(
            name=distribution_data["name"],
            base_path=distribution_data["base_path"],
            defaults=distribution_data,
        )
        return publication, distribution, created