Skip to content

Commit

Permalink
Remove AnsiblePublisher
Browse files Browse the repository at this point in the history
  • Loading branch information
David Davis committed Sep 30, 2018
1 parent e2b1d0c commit 1e49f00
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 214 deletions.
22 changes: 3 additions & 19 deletions README.rst
Expand Up @@ -162,34 +162,18 @@ Add content to repository ``foo``
``$ http POST ':8000'$REPO_HREF'versions/' add_content_units:="[\"$CONTENT_HREF\"]"`` ``$ http POST ':8000'$REPO_HREF'versions/' add_content_units:="[\"$CONTENT_HREF\"]"``




Create an Ansible publisher Create a Publication
---------------------------

``$ http POST http://localhost:8000/pulp/api/v3/publishers/ansible/ name=bar``

.. code:: json
{
"_href": "http://localhost:8000/pulp/api/v3/publishers/ansible/bar/",
...
}
``$ export PUBLISHER_HREF=$(http :8000/pulp/api/v3/publishers/ansible/ | jq -r '.results[] | select(.name == "bar") | ._href')``


Use the ``bar`` Publisher to create a Publication
------------------------------------------------- -------------------------------------------------


``$ http POST ':8000'$PUBLISHER_HREF'publish/' repository=$REPO_HREF`` ``$ http POST :8000/pulp/api/v3/ansible/publications/ repository=$REPO_HREF``


.. code:: json .. code:: json
{ {
"task": "http://localhost:8000/pulp/api/v3/tasks/fd4cbecd-6c6a-4197-9cbe-4e45b0516309/" "task": "http://localhost:8000/pulp/api/v3/tasks/fd4cbecd-6c6a-4197-9cbe-4e45b0516309/"
} }
``$ export PUBLICATION_HREF=$(http :8000/pulp/api/v3/publications/ | jq -r --arg PUBLISHER_HREF "$PUBLISHER_HREF" '.results[] | select(.publisher==$PUBLISHER_HREF) | ._href')`` ``$ export PUBLICATION_HREF=$(http :8000/pulp/api/v3/publications/ | jq -r '.results[0] | ._href')``




Create a Distribution for the Publication Create a Distribution for the Publication
Expand Down
10 changes: 1 addition & 9 deletions pulp_ansible/app/models.py
Expand Up @@ -2,7 +2,7 @@


from django.db import models from django.db import models


from pulpcore.plugin.models import Content, ContentArtifact, Remote, Publisher from pulpcore.plugin.models import Content, ContentArtifact, Remote




log = getLogger(__name__) log = getLogger(__name__)
Expand Down Expand Up @@ -73,14 +73,6 @@ class Meta:
) )




class AnsiblePublisher(Publisher):
"""
A Publisher for Ansible content.
"""

TYPE = 'ansible'


class AnsibleRemote(Remote): class AnsibleRemote(Remote):
""" """
A Remote for Ansible content. A Remote for Ansible content.
Expand Down
14 changes: 2 additions & 12 deletions pulp_ansible/app/serializers.py
@@ -1,10 +1,10 @@
from rest_framework import serializers from rest_framework import serializers


from pulpcore.plugin.serializers import ContentSerializer, IdentityField, NestedIdentityField, \ from pulpcore.plugin.serializers import ContentSerializer, IdentityField, NestedIdentityField, \
RelatedField, RemoteSerializer, PublisherSerializer RelatedField, RemoteSerializer
from pulpcore.plugin.models import Artifact from pulpcore.plugin.models import Artifact


from .models import AnsibleRemote, AnsiblePublisher, AnsibleRole, AnsibleRoleVersion from .models import AnsibleRemote, AnsibleRole, AnsibleRoleVersion




class AnsibleRoleSerializer(ContentSerializer): class AnsibleRoleSerializer(ContentSerializer):
Expand Down Expand Up @@ -61,13 +61,3 @@ class AnsibleRemoteSerializer(RemoteSerializer):
class Meta: class Meta:
fields = RemoteSerializer.Meta.fields fields = RemoteSerializer.Meta.fields
model = AnsibleRemote model = AnsibleRemote


class AnsiblePublisherSerializer(PublisherSerializer):
"""
A serializer for Ansible Publishers.
"""

class Meta:
fields = PublisherSerializer.Meta.fields
model = AnsiblePublisher
57 changes: 5 additions & 52 deletions pulp_ansible/app/tasks/publishing.py
Expand Up @@ -2,72 +2,25 @@


from gettext import gettext as _ from gettext import gettext as _


from pulpcore.plugin.models import ( from pulpcore.plugin.models import RepositoryVersion, Publication
RepositoryVersion,
Publication,
PublishedArtifact,
RemoteArtifact)
from pulpcore.plugin.tasking import WorkingDirectory

from pulp_ansible.app.models import AnsiblePublisher




log = logging.getLogger(__name__) log = logging.getLogger(__name__)




def publish(publisher_pk, repository_version_pk): def publish(repository_version_pk):
""" """
Use provided publisher to create a Publication based on a RepositoryVersion. Create a Publication based on a RepositoryVersion.
Args: Args:
publisher_pk (str): Use the publish settings provided by this publisher.
repository_version_pk (str): Create a publication from this repository version. repository_version_pk (str): Create a publication from this repository version.
""" """
publisher = AnsiblePublisher.objects.get(pk=publisher_pk)
repository_version = RepositoryVersion.objects.get(pk=repository_version_pk) repository_version = RepositoryVersion.objects.get(pk=repository_version_pk)

with Publication.create(repository_version, pass_through=True) as publication:
log.info( pass
_('Publishing: repository=%(repository)s, version=%(version)d, publisher=%(publisher)s'),
{
'repository': repository_version.repository.name,
'version': repository_version.number,
'publisher': publisher.name,
})

with WorkingDirectory():
with Publication.create(repository_version, publisher) as publication:
populate(publication)


log.info( log.info(
_('Publication: %(publication)s created'), _('Publication: %(publication)s created'),
{ {
'publication': publication.pk 'publication': publication.pk
}) })


def populate(publication):
"""
Populate a publication.
Create published artifacts and yield a Manifest Entry for each.
Args:
publication (pulpcore.plugin.models.Publication): A Publication to populate.
Yields:
Entry: Each manifest entry.
"""
def find_artifact():
_artifact = content_artifact.artifact
if not _artifact:
_artifact = RemoteArtifact.objects.filter(content_artifact=content_artifact).first()
return _artifact

for content in publication.repository_version.content:
content_artifact = content.contentartifact_set.get()
published_artifact = PublishedArtifact(
relative_path=content_artifact.relative_path,
publication=publication,
content_artifact=content_artifact)
published_artifact.save()
43 changes: 20 additions & 23 deletions pulp_ansible/app/viewsets.py
@@ -1,28 +1,28 @@
from django.db import transaction from django.db import transaction
from drf_yasg.utils import swagger_auto_schema from drf_yasg.utils import swagger_auto_schema
from rest_framework.decorators import detail_route from rest_framework.decorators import detail_route
from rest_framework import status from rest_framework import mixins, status
from rest_framework.response import Response from rest_framework.response import Response


from pulpcore.plugin.models import Artifact, RepositoryVersion from pulpcore.plugin.models import Artifact, RepositoryVersion, Publication
from pulpcore.plugin.serializers import ( from pulpcore.plugin.serializers import (
AsyncOperationResponseSerializer, AsyncOperationResponseSerializer,
RepositoryPublishURLSerializer, RepositoryPublishURLSerializer,
RepositorySyncURLSerializer, RepositorySyncURLSerializer,
) )
from pulpcore.plugin.tasking import enqueue_with_reservation from pulpcore.plugin.tasking import enqueue_with_reservation
from pulpcore.plugin.viewsets import ( from pulpcore.plugin.viewsets import (
BaseFilterSet,
ContentViewSet, ContentViewSet,
RemoteViewSet, NamedModelViewSet,
OperationPostponedResponse, OperationPostponedResponse,
PublisherViewSet, RemoteViewSet
BaseFilterSet
) )


from . import tasks from . import tasks
from .models import AnsibleRemote, AnsiblePublisher, AnsibleRole, AnsibleRoleVersion from .models import AnsibleRemote, AnsibleRole, AnsibleRoleVersion
from .serializers import (AnsibleRemoteSerializer, AnsiblePublisherSerializer, from .serializers import (AnsibleRemoteSerializer, AnsibleRoleSerializer,
AnsibleRoleSerializer, AnsibleRoleVersionSerializer) AnsibleRoleVersionSerializer)




class AnsibleRoleFilter(BaseFilterSet): class AnsibleRoleFilter(BaseFilterSet):
Expand Down Expand Up @@ -153,25 +153,22 @@ def sync(self, request, pk):
return OperationPostponedResponse(result, request) return OperationPostponedResponse(result, request)




class AnsiblePublisherViewSet(PublisherViewSet): class AnsiblePublicationsViewSet(NamedModelViewSet,
mixins.CreateModelMixin):
""" """
ViewSet for Ansible Publishers. ViewSet for Ansible Publications.
""" """


endpoint_name = 'ansible' endpoint_name = 'ansible/publications'
queryset = AnsiblePublisher.objects.all() queryset = Publication.objects.all()
serializer_class = AnsiblePublisherSerializer


@swagger_auto_schema( @swagger_auto_schema(operation_description="Trigger an asynchronous task to create "
operation_description="Trigger an asynchronous task to publish Ansible content.", "a new Ansible content publication.",
responses={202: AsyncOperationResponseSerializer} responses={202: AsyncOperationResponseSerializer})
) def create(self, request):
@detail_route(methods=('post',), serializer_class=RepositoryPublishURLSerializer)
def publish(self, request, pk):
""" """
Dispatches a publish task. Queues a task that publishes a new Ansible Publication.
""" """
publisher = self.get_object()
serializer = RepositoryPublishURLSerializer( serializer = RepositoryPublishURLSerializer(
data=request.data, data=request.data,
context={'request': request} context={'request': request}
Expand All @@ -183,10 +180,10 @@ def publish(self, request, pk):
if not repository_version: if not repository_version:
repository = serializer.validated_data.get('repository') repository = serializer.validated_data.get('repository')
repository_version = RepositoryVersion.latest(repository) repository_version = RepositoryVersion.latest(repository)

result = enqueue_with_reservation( result = enqueue_with_reservation(
tasks.publish, [repository_version.repository, publisher], tasks.publish, [repository_version.repository],
kwargs={ kwargs={
'publisher_pk': str(publisher.pk),
'repository_version_pk': str(repository_version.pk) 'repository_version_pk': str(repository_version.pk)
} }
) )
Expand Down
99 changes: 0 additions & 99 deletions pulp_ansible/tests/functional/api/test_crud_publishers.py

This file was deleted.

0 comments on commit 1e49f00

Please sign in to comment.