Maintenance: Planio will be observing a scheduled maintenance window this Sunday, November 10, 2024 from 20:00 UTC until 21:00 UTC to perform important network maintenance in our primary data center. Your Planio account will be unavailable for a few minutes during this maintenance window.
Issue #5211
closedA list is not accepted for Accept header in docker registry api
Description
When calling a registry API endpoint like /v2/myimage/manifests/latest, if you send an Accept header with a list, this error occurs:
Aug 01 20:24:56 pulp3-again.jomitsch.example.com gunicorn[1070]: pulp: pulp_docker.app.registry:WARNING: The requested tag `latest` is of type application/vnd.docker.distribution.manifest.v2+json, but the client only accepts ['application/json, application/vnd.docker.distribution.manifest.v2+json, application/vnd.docker.distribution.manifest.list.v2+json, application/vnd.docker.distribution.manifest.v1+prettyjws'].
The Accept header is something like `Accept: application/vnd.docker.distribution.manifest.v2+json, application/vnd.docker.distribution.manifest.list.v2+json, application/vnd.docker.distribution.manifest.v1+prettyjws, application/json`
If my python isn't too rusty, it looks like "value" needs to be split on the comma here (assuming the header is correct) https://github.com/pulp/pulp_docker/blob/master/pulp_docker/app/registry.py#L47
I haven't been able to reproduce with curl yet, but here are our headers printed out in ruby
{"VERSION"=>"HTTP/1.1", "HOST"=>"pulp3-again.jomitsch.example.com", "USER-AGENT"=>"docker/1.13.1 go/go1.10.3 kernel/3.10.0-862.2.3.el7.x86_64 os/linux arch/amd64 UpstreamClient(Docker-Client/1.13.1 \\(linux\\))", "ACCEPT"=>"application/vnd.docker.distribution.manifest.v2+json, application/vnd.docker.distribution.manifest.list.v2+json, application/vnd.docker.distribution.manifest.v1+prettyjws, application/json", "AUTHORIZATION"=>"Bearer $2a$09$1b6453892473a467d0737ufZsuql4iq8AdEzTB.1OBc.uiUPfa71m", "ACCEPT-ENCODING"=>"gzip", "X-FORWARDED-PROTO"=>"https", "VIA"=>"1.1 pulp3-again.jomitsch.example.com", "X-FORWARDED-FOR"=>"192.168.121.121", "X-FORWARDED-HOST"=>"pulp3-again.jomitsch.example.com", "X-FORWARDED-SERVER"=>"pulp3-again.jomitsch.example.com", "CONNECTION"=>"Keep-Alive"}
Versions:
using the latest pulp3 code from git in the Katello pulp3 dev env
Allow Accept header to send multiple values
closes #5211 https://pulp.plan.io/issues/5211
This will allow the Accept header to use multiple values.
I tested this out with pulling directly with docker, which seems to send one value, and Katello, where we send multiple values. Both scenarios were able to pull successfully.
This will make it easy for Katello to substitute pulp3 registry url instead of crane where it is supported.