Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kickstart syncing #1427

Merged
merged 1 commit into from Sep 4, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGES/5202.misc
@@ -0,0 +1 @@
Kickstart syncing.
3 changes: 1 addition & 2 deletions pulp_rpm/app/migrations/0002_kickstarts.py
@@ -1,4 +1,4 @@
# Generated by Django 2.2.4 on 2019-08-30 20:05
# Generated by Django 2.2.5 on 2019-09-03 14:04

from django.db import migrations, models
import django.db.models.deletion
Expand Down Expand Up @@ -70,7 +70,6 @@ class Migration(migrations.Migration):
('name', models.CharField(max_length=20)),
('path', models.CharField(max_length=128)),
('platforms', models.CharField(max_length=20)),
('artifact', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='core.Artifact')),
('distribution_tree', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='images', to='rpm.DistributionTree')),
],
options={
Expand Down
20 changes: 15 additions & 5 deletions pulp_rpm/app/models.py
Expand Up @@ -5,8 +5,8 @@

from django.db import models
from pulpcore.plugin.models import (
Artifact,
Content,
ContentArtifact,
Model,
Remote,
Repository,
Expand Down Expand Up @@ -1109,7 +1109,6 @@ class Image(Model):
Relations:

distribution_tree (models.ForeignKey): The associated DistributionTree
artifact (models.ForeignKey): The associated Artifact

"""

Expand All @@ -1119,9 +1118,20 @@ class Image(Model):
distribution_tree = models.ForeignKey(
DistributionTree, on_delete=models.CASCADE, related_name='images'
)
artifact = models.ForeignKey(
Artifact, on_delete=models.PROTECT, related_name='+'
)

@property
def artifact(self):
"""
Returns artifact object.
"""
content_artifact = ContentArtifact.objects.filter(
content=self.distribution_tree,
relative_path=self.path,
).first()

artifact = content_artifact.artifact if content_artifact else None

return artifact

class Meta:
unique_together = (
Expand Down
178 changes: 178 additions & 0 deletions pulp_rpm/app/serializers.py
Expand Up @@ -8,8 +8,10 @@
RepositoryVersion
)
from pulpcore.plugin.serializers import (
ArtifactSerializer,
NoArtifactContentSerializer,
SingleArtifactContentSerializer,
MultipleArtifactContentSerializer,
RemoteSerializer,
PublicationSerializer,
PublicationDistributionSerializer,
Expand All @@ -18,6 +20,11 @@
)

from pulp_rpm.app.models import (
Addon,
Checksum,
Image,
Variant,
DistributionTree,
Modulemd,
ModulemdDefaults,
Package,
Expand Down Expand Up @@ -526,3 +533,174 @@ class Meta:
'module', 'stream', 'profiles'
)
model = ModulemdDefaults


class AddonSerializer(serializers.ModelSerializer):
"""
Addon serializer.
"""

addon_id = serializers.CharField(help_text=_("Addon id."))
uid = serializers.CharField(help_text=_("Addon uid."))
name = serializers.CharField(help_text=_("Addon name."))
type = serializers.CharField(help_text=_("Addon type."))
packages = serializers.CharField(
help_text=_("Relative path to directory with binary RPMs.")
)
repository = serializers.HyperlinkedRelatedField(
required=True,
help_text=_('A URI of the repository containing the content for this Addon.'),
queryset=Repository.objects.all(),
view_name='repositories-detail',
label=_('Repository'),
error_messages={
'required': _('The repository URI must be specified.')
}
)

class Meta:
model = Addon
fields = (
"addon_id", "uid", "name", "type", "packages", "repository"
)


class ChecksumSerializer(serializers.ModelSerializer):
"""
Checksum serializer.
"""

path = serializers.CharField(help_text=_("File path."))
checksum = serializers.CharField(help_text=_("Checksum for the file."))

class Meta:
model = Checksum
fields = ("path", "checksum")


class ImageSerializer(serializers.ModelSerializer):
"""
Image serializer.
"""

name = serializers.CharField(help_text=_("File name."))
path = serializers.CharField(help_text=_("File path."))
platforms = serializers.CharField(help_text=_("Compatible platforms."))
artifact = ArtifactSerializer()

class Meta:
model = Image
fields = ("name", "path", "platforms", "artifact")


class VariantSerializer(serializers.ModelSerializer):
"""
Variant serializer.
"""

variant_id = serializers.CharField(help_text=_("Variant id."))
uid = serializers.CharField(help_text=_("Variant uid."))
name = serializers.CharField(help_text=_("Variant name."))
type = serializers.CharField(help_text=_("Variant type."))
packages = serializers.CharField(
help_text=_("Relative path to directory with binary RPMs.")
)
repository = serializers.HyperlinkedRelatedField(
required=True,
help_text=_('A URI of the repository containing the content for this Variant.'),
queryset=Repository.objects.all(),
view_name='repositories-detail',
label=_('Repository'),
error_messages={
'required': _('The repository URI must be specified.')
}
)
source_packages = serializers.CharField(
help_text=_("Relative path to directory with source RPMs.")
)
source_repository = serializers.CharField(
help_text=_("Relative path to YUM repository with source RPMs.")
)
debug_packages = serializers.CharField(
help_text=_("Relative path to directory with debug RPMs.")
)
debug_repository = serializers.CharField(
help_text=_("Relative path to YUM repository with debug RPMs.")
)
identity = serializers.CharField(
help_text=_("Relative path to a pem file that identifies a product.")
)

class Meta:
model = Variant
fields = (
"variant_id", "uid", "name", "type", "packages", "repository",
"source_packages", "source_repository", "debug_packages",
"debug_repository", "identity"
)


class DistributionTreeSerializer(MultipleArtifactContentSerializer):
"""
DistributionTree serializer.
"""

header_version = serializers.CharField(
help_text=_("Header Version.")
)
release_name = serializers.CharField(
help_text=_("Release name.")
)
release_short = serializers.CharField(
help_text=_("Release short name.")
)
release_version = serializers.CharField(
help_text=_("Release version.")
)
release_is_layered = serializers.BooleanField(
help_text=_("Typically False for an operating system, True otherwise.")
)

base_product_name = serializers.CharField(
help_text=_("Base Product name."), allow_null=True
)
base_product_short = serializers.CharField(
help_text=_("Base Product short name."), allow_null=True
)
base_product_version = serializers.CharField(
help_text=_("Base Product version."), allow_null=True
)

arch = serializers.CharField(help_text=_("Tree architecturerch."))
build_timestamp = serializers.FloatField(help_text=_("Tree build time timestamp."))

instimage = serializers.CharField(
help_text=_("Relative path to Anaconda instimage."), allow_null=True
)
mainimage = serializers.CharField(
help_text=_("Relative path to Anaconda stage2 image."), allow_null=True
)

discnum = serializers.IntegerField(
help_text=_("Disc number."), allow_null=True
)
totaldiscs = serializers.IntegerField(
help_text=_("Number of discs in media set."), allow_null=True
)

addons = AddonSerializer(many=True)

checksums = ChecksumSerializer(many=True)

images = ImageSerializer(many=True)

variants = VariantSerializer(many=True)

class Meta:
model = DistributionTree
fields = (
"_href", "header_version", "release_name", "release_short", "release_version",
"release_is_layered", "base_product_name", "base_product_short",
"base_product_version", "arch", "build_timestamp", "instimage", "mainimage",
"discnum", "totaldiscs", "addons", "checksums", "images", "variants"
)