From 51338eba7043cd0c73bf3a52ac257957eda9f7ec Mon Sep 17 00:00:00 2001 From: Bruno Rocha Date: Wed, 17 Mar 2021 21:38:50 -0300 Subject: [PATCH 1/2] Add models for ContainerRegistry Sync Config - Add `ContainerRegistryRemote` as a subclass of `core.Remote` to hold configuration for syncing container repositories. - Add the link model `ContainerRegistryRepos` as a one-to-many linking `ContainerRegistryRemote` to `container.Remote` - Add `ContainerSyncTask` to save the history if sync tasks Issue: AAH-432 --- CHANGES/432.feature | 1 + ...ontainerregistryrepos_containersynctask.py | 46 +++++++++++++++++++ galaxy_ng/app/models/container.py | 38 ++++++++++++++- 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 CHANGES/432.feature create mode 100644 galaxy_ng/app/migrations/0016_containerregistryremote_containerregistryrepos_containersynctask.py diff --git a/CHANGES/432.feature b/CHANGES/432.feature new file mode 100644 index 0000000000..8af09f26e8 --- /dev/null +++ b/CHANGES/432.feature @@ -0,0 +1 @@ +Add models for container registry sync config diff --git a/galaxy_ng/app/migrations/0016_containerregistryremote_containerregistryrepos_containersynctask.py b/galaxy_ng/app/migrations/0016_containerregistryremote_containerregistryrepos_containersynctask.py new file mode 100644 index 0000000000..971ee862a8 --- /dev/null +++ b/galaxy_ng/app/migrations/0016_containerregistryremote_containerregistryrepos_containersynctask.py @@ -0,0 +1,46 @@ +# Generated by Django 2.2.19 on 2021-03-18 00:37 + +from django.db import migrations, models +import django.db.models.deletion +import django_lifecycle.mixins +import galaxy_ng.app.access_control.mixins + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0061_call_handle_artifact_checksums_command'), + ('container', '0018_containerdistribution_description'), + ('galaxy', '0015_containerdistroreadme'), + ] + + operations = [ + migrations.CreateModel( + name='ContainerRegistryRemote', + fields=[ + ('remote_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, related_name='galaxy_containerregistryremote', serialize=False, to='core.Remote')), + ], + options={ + 'default_related_name': '%(app_label)s_%(model_name)s', + }, + bases=('core.remote', django_lifecycle.mixins.LifecycleModelMixin, galaxy_ng.app.access_control.mixins.GroupModelPermissionsMixin), + ), + migrations.CreateModel( + name='ContainerSyncTask', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('repository', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='container.ContainerRepository')), + ('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Task')), + ], + options={ + 'ordering': ['-task__finished_at'], + }, + ), + migrations.CreateModel( + name='ContainerRegistryRepos', + fields=[ + ('repository_remote', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='container.ContainerRemote')), + ('registry', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='galaxy.ContainerRegistryRemote')), + ], + ), + ] diff --git a/galaxy_ng/app/models/container.py b/galaxy_ng/app/models/container.py index 3460a66595..1297e8d136 100644 --- a/galaxy_ng/app/models/container.py +++ b/galaxy_ng/app/models/container.py @@ -1,5 +1,5 @@ from django.db import models - +from pulpcore.plugin import models as pulp_models from pulp_container.app import models as container_models from django_lifecycle import LifecycleModelMixin @@ -23,3 +23,39 @@ class ContainerDistroReadme(models.Model): created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True, null=True) text = models.TextField(blank=True) + + +class ContainerRegistryRemote( + pulp_models.Remote, + LifecycleModelMixin, + mixins.GroupModelPermissionsMixin, +): + + class Meta: + default_related_name = "%(app_label)s_%(model_name)s" + + +class ContainerRegistryRepos(models.Model): + registry = models.ForeignKey( + ContainerRegistryRemote, + on_delete=models.CASCADE, + ) + repository_remote = models.OneToOneField( + container_models.ContainerRemote, + on_delete=models.CASCADE, + primary_key=True, + ) + + +class ContainerSyncTask(models.Model): + repository = models.ForeignKey( + container_models.ContainerRepository, + on_delete=models.CASCADE, + ) + task = models.ForeignKey( + pulp_models.Task, + on_delete=models.CASCADE, + ) + + class Meta: + ordering = ['-task__finished_at'] From 92686830d924494e06b921832d51ee621a1b1851 Mon Sep 17 00:00:00 2001 From: Bruno Rocha Date: Mon, 22 Mar 2021 11:39:17 -0300 Subject: [PATCH 2/2] Lifecycle mixin not needed Issue: AAH-432 --- ...erregistryremote_containerregistryrepos_containersynctask.py | 2 +- galaxy_ng/app/models/container.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/galaxy_ng/app/migrations/0016_containerregistryremote_containerregistryrepos_containersynctask.py b/galaxy_ng/app/migrations/0016_containerregistryremote_containerregistryrepos_containersynctask.py index 971ee862a8..21b06fc2d8 100644 --- a/galaxy_ng/app/migrations/0016_containerregistryremote_containerregistryrepos_containersynctask.py +++ b/galaxy_ng/app/migrations/0016_containerregistryremote_containerregistryrepos_containersynctask.py @@ -23,7 +23,7 @@ class Migration(migrations.Migration): options={ 'default_related_name': '%(app_label)s_%(model_name)s', }, - bases=('core.remote', django_lifecycle.mixins.LifecycleModelMixin, galaxy_ng.app.access_control.mixins.GroupModelPermissionsMixin), + bases=('core.remote', galaxy_ng.app.access_control.mixins.GroupModelPermissionsMixin), ), migrations.CreateModel( name='ContainerSyncTask', diff --git a/galaxy_ng/app/models/container.py b/galaxy_ng/app/models/container.py index 1297e8d136..06303f8b7e 100644 --- a/galaxy_ng/app/models/container.py +++ b/galaxy_ng/app/models/container.py @@ -27,7 +27,6 @@ class ContainerDistroReadme(models.Model): class ContainerRegistryRemote( pulp_models.Remote, - LifecycleModelMixin, mixins.GroupModelPermissionsMixin, ):