Project

Profile

Help

Issue #6569

closed

Unable to add metadata_signing_service to existing repository

Added by lieter over 4 years ago. Updated over 4 years ago.

Status:
CLOSED - CURRENTRELEASE
Priority:
Normal
Assignee:
Category:
-
Sprint/Milestone:
Start date:
Due date:
Estimated time:
Severity:
2. Medium
Version:
Platform Release:
OS:
Triaged:
Yes
Groomed:
No
Sprint Candidate:
No
Tags:
Sprint:
Sprint 72
Quarter:

Description

Having an existing AsciiArmoredDetachedSigningService and RPMRepository, it is not possible to add the signing service to the repository. The worker will error out with this:

pulp: rq.worker:ERROR: rest_framework.exceptions.ValidationError: {'metadata_signing_service': [ErrorDetail(string='Unexpected field', code='invalid')]}
Traceback (most recent call last):
  File "/home/lieter/.virtualenvs/pulp3-devel/lib/python3.8/site-packages/rq/worker.py", line 886, in perform_job
    rv = job.perform()
  File "/home/lieter/.virtualenvs/pulp3-devel/lib/python3.8/site-packages/rq/job.py", line 664, in perform
    self._result = self._execute()
  File "/home/lieter/.virtualenvs/pulp3-devel/lib/python3.8/site-packages/rq/job.py", line 670, in _execute
    return self.func(*self.args, **self.kwargs)
  File "/home/lieter/.virtualenvs/pulp3-devel/lib/python3.8/site-packages/pulpcore/app/tasks/repository.py", line 39, in update
    serializer.is_valid(raise_exception=True)
  File "/home/lieter/.virtualenvs/pulp3-devel/lib/python3.8/site-packages/rest_framework/serializers.py", line 243, in is_valid
    raise ValidationError(self.errors)
rest_framework.exceptions.ValidationError: {'metadata_signing_service': [ErrorDetail(string='Unexpected field', code='invalid')]}
Traceback (most recent call last):
  File "/home/lieter/.virtualenvs/pulp3-devel/lib/python3.8/site-packages/rq/worker.py", line 886, in perform_job
    rv = job.perform()
  File "/home/lieter/.virtualenvs/pulp3-devel/lib/python3.8/site-packages/rq/job.py", line 664, in perform
    self._result = self._execute()
  File "/home/lieter/.virtualenvs/pulp3-devel/lib/python3.8/site-packages/rq/job.py", line 670, in _execute
    return self.func(*self.args, **self.kwargs)
  File "/home/lieter/.virtualenvs/pulp3-devel/lib/python3.8/site-packages/pulpcore/app/tasks/repository.py", line 39, in update
    serializer.is_valid(raise_exception=True)
  File "/home/lieter/.virtualenvs/pulp3-devel/lib/python3.8/site-packages/rest_framework/serializers.py", line 243, in is_valid
    raise ValidationError(self.errors)
rest_framework.exceptions.ValidationError: {'metadata_signing_service': [ErrorDetail(string='Unexpected field', code='invalid')]}

See the full http requests and responses below:

 ▲ src/Pulp/pulp_workdir http :24817/pulp/api/v3/repositories/rpm/rpm/f7ead468-5b89-468f-bede-030f61fd8582/
HTTP/1.1 200 OK
Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS
Connection: close
Content-Length: 402
Content-Type: application/json
Date: Fri, 24 Apr 2020 08:17:36 GMT
Server: gunicorn/20.0.4
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN

{
    "description": null,
    "latest_version_href": "/pulp/api/v3/repositories/rpm/rpm/f7ead468-5b89-468f-bede-030f61fd8582/versions/0/",
    "metadata_signing_service": null,
    "name": "foo",
    "pulp_created": "2020-04-24T08:03:29.906931Z",
    "pulp_href": "/pulp/api/v3/repositories/rpm/rpm/f7ead468-5b89-468f-bede-030f61fd8582/",
    "versions_href": "/pulp/api/v3/repositories/rpm/rpm/f7ead468-5b89-468f-bede-030f61fd8582/versions/"
}

 ▲ src/Pulp/pulp_workdir http :24817/pulp/api/v3/signing-services/76df3b27-b955-4001-82c0-7989df073096/
HTTP/1.1 200 OK
Allow: GET, HEAD, OPTIONS
Connection: close
Content-Length: 205
Content-Type: application/json
Date: Fri, 24 Apr 2020 08:17:47 GMT
Server: gunicorn/20.0.4
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN

{
    "name": "sign-metadata",
    "pulp_created": "2020-04-24T08:01:41.459819Z",
    "pulp_href": "/pulp/api/v3/signing-services/76df3b27-b955-4001-82c0-7989df073096/",
    "script": "/home/lieter/src/Pulp/pulp_workdir/sign.sh"
}

 ▲ src/Pulp/pulp_workdir http PATCH :24817/pulp/api/v3/repositories/rpm/rpm/f7ead468-5b89-468f-bede-030f61fd8582/ metadata_signing_service=/pulp/api/v3/signing-services/76df3b27-b955-4001-82c0-7989df073096/
HTTP/1.1 202 Accepted
Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS
Connection: close
Content-Length: 67
Content-Type: application/json
Date: Fri, 24 Apr 2020 08:18:06 GMT
Server: gunicorn/20.0.4
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN

{
    "task": "/pulp/api/v3/tasks/54c1b300-daa3-4b14-8288-ffa23195b0aa/"
}

 ▲ src/Pulp/pulp_workdir http :24817/pulp/api/v3/tasks/54c1b300-daa3-4b14-8288-ffa23195b0aa/ 
HTTP/1.1 200 OK
Allow: GET, PATCH, DELETE, HEAD, OPTIONS
Connection: close
Content-Length: 1429
Content-Type: application/json
Date: Fri, 24 Apr 2020 08:18:19 GMT
Server: gunicorn/20.0.4
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN

{
    "child_tasks": [],
    "created_resources": [],
    "error": {
        "description": "{'metadata_signing_service': [ErrorDetail(string='Unexpected field', code='invalid')]}",
        "traceback": "  File \"/home/lieter/.virtualenvs/pulp3-devel/lib/python3.8/site-packages/rq/worker.py\", line 886, in perform_job\n    rv = job.perform()\n  File \"/home/lieter/.virtualenvs/pulp3-devel/lib/python3.8/site-packages/rq/job.py\", line 664, in perform\n    self._result = self._execute()\n  File \"/home/lieter/.virtualenvs/pulp3-devel/lib/python3.8/site-packages/rq/job.py\", line 670, in _execute\n    return self.func(*self.args, **self.kwargs)\n  File \"/home/lieter/src/Pulp/pulpcore/pulpcore/app/tasks/repository.py\", line 39, in update\n    serializer.is_valid(raise_exception=True)\n  File \"/home/lieter/.virtualenvs/pulp3-devel/lib/python3.8/site-packages/rest_framework/serializers.py\", line 243, in is_valid\n    raise ValidationError(self.errors)\n"
    },
    "finished_at": "2020-04-24T08:18:06.781140Z",
    "name": "pulpcore.app.tasks.repository.update",
    "parent_task": null,
    "progress_reports": [],
    "pulp_created": "2020-04-24T08:18:06.705529Z",
    "pulp_href": "/pulp/api/v3/tasks/54c1b300-daa3-4b14-8288-ffa23195b0aa/",
    "reserved_resources_record": [
        "/pulp/api/v3/repositories/rpm/rpm/f7ead468-5b89-468f-bede-030f61fd8582/"
    ],
    "started_at": "2020-04-24T08:18:06.764787Z",
    "state": "failed",
    "task_group": null,
    "worker": "/pulp/api/v3/workers/fcb1a9f7-3b94-4c04-8183-1ca3bc84bf49/"
}

Creating a new repository with a signing service does work:

 ▲ src/Pulp/pulp_rpm http :24817/pulp/api/v3/repositories/rpm/rpm/ name="bar" metadata_signing_service='/pulp/api/v3/signing-services/76df3b27-b955-4001-82c0-7989df073096/'
HTTP/1.1 201 Created
Allow: GET, POST, HEAD, OPTIONS
Connection: close
Content-Length: 489
Content-Type: application/json
Date: Fri, 24 Apr 2020 08:37:01 GMT
Location: /pulp/api/v3/repositories/rpm/rpm/7ed592d8-2aa1-4da9-b37f-bbeac50b8cb4/
Server: gunicorn/20.0.4
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN

{
    "description": null,
    "latest_version_href": "/pulp/api/v3/repositories/rpm/rpm/7ed592d8-2aa1-4da9-b37f-bbeac50b8cb4/versions/0/",
    "metadata_signing_service": "http://localhost:24817/pulp/api/v3/signing-services/76df3b27-b955-4001-82c0-7989df073096/",
    "name": "bar",
    "pulp_created": "2020-04-24T08:37:01.614998Z",
    "pulp_href": "/pulp/api/v3/repositories/rpm/rpm/7ed592d8-2aa1-4da9-b37f-bbeac50b8cb4/",
    "versions_href": "/pulp/api/v3/repositories/rpm/rpm/7ed592d8-2aa1-4da9-b37f-bbeac50b8cb4/versions/"
}

Installed versions:

Pulpcore: 3.4.0.dev (d522ac42a4d418b42ae244cccb1264a3c6c833ca) Pulp-rpm: 3.4.0b1.dev (f57c667026ca88f04547d1bbe4c18d0809ab9d51)

Actions #1

Updated by lmjachky over 4 years ago

Several options come to my mind:

  1. We can redefine the inherited method update() implemented in RepositoryViewSet https://github.com/pulp/pulpcore/blob/d522ac42a4d418b42ae244cccb1264a3c6c833ca/pulpcore/app/viewsets/repository.py#L61-L73 to return the response:

    {
        "detail": "Method \"PATCH\" not allowed."
    }
    
  2. We can try to refactor the method update() in RepositoryViewSet and the function update() in tasks/repository.py (https://github.com/pulp/pulpcore/blob/d522ac42a4d418b42ae244cccb1264a3c6c833ca/pulpcore/app/tasks/repository.py#L25-L40) to retrieve a configuration from the plugin like it is done here https://github.com/pulp/pulpcore/blob/d522ac42a4d418b42ae244cccb1264a3c6c833ca/pulpcore/app/tasks/base.py#L5-L21 in order to get a correct serializer for serializing. This change may somehow affect all plugins.

Actions #2

Updated by mdellweg over 4 years ago

At first glance i cannot see, why Repositories should not use general_update.

Actions #3

Updated by dkliban@redhat.com over 4 years ago

  • Project changed from RPM Support to Pulp
Actions #4

Updated by fao89 over 4 years ago

  • Triaged changed from No to Yes
  • Sprint set to Sprint 71
Actions #5

Updated by mdellweg over 4 years ago

  • Status changed from NEW to ASSIGNED
  • Assignee set to mdellweg
Actions #6

Updated by pulpbot over 4 years ago

  • Status changed from ASSIGNED to POST

Added by mdellweg over 4 years ago

Revision 37fa13cd | View on GitHub

Revamp Repository tasks

Repository update and delete now use general_update and general_delete, which automatically select the proper resources to work on.

fixes #6569 https://pulp.plan.io/issues/6569

Actions #7

Updated by rchan over 4 years ago

  • Sprint changed from Sprint 71 to Sprint 72
Actions #8

Updated by mdellweg over 4 years ago

  • Status changed from POST to MODIFIED
Actions #9

Updated by dkliban@redhat.com over 4 years ago

  • Sprint/Milestone set to 3.4.0
Actions #10

Updated by dkliban@redhat.com over 4 years ago

  • Status changed from MODIFIED to CLOSED - CURRENTRELEASE

Also available in: Atom PDF