[ 
https://issues.apache.org/jira/browse/CAMEL-26685?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Work on CAMEL-26685 started by Claus Ibsen.
-------------------------------------------
> camel-docker - imagepull/imagepush: use endpoint auth only for its own 
> registry
> -------------------------------------------------------------------------------
>
>                 Key: CAMEL-26685
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26685
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-docker
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 4.24.0
>
>
> The {{imagepull}} and {{imagepush}} operations of the camel-docker producer 
> always attach the authentication of the endpoint ({{username}}, {{password}}, 
> {{email}}, {{serverAddress}}) to the pull or push command, whatever registry 
> the image reference points to. The image reference comes from the 
> {{repository}} / {{name}} options or from the {{CamelDockerRepository}} / 
> {{CamelDockerName}} headers. When no {{username}} is configured, the 
> operations fail with a {{NullPointerException}} ("Configured username is 
> null.") from docker-java's {{DockerClient.authConfig()}}, so pulling a public 
> image without a login does not work.
> h3. Behaviour today
> * {{imagepull}} and {{imagepush}} call {{client.authConfig()}} and pass the 
> result to {{withAuthConfig(...)}} for every image, also when the image is 
> hosted on a different registry than the configured {{serverAddress}}.
> * Without a configured {{username}} both operations throw a 
> {{NullPointerException}}.
> h3. Behaviour after the change
> * The endpoint authentication is attached only when a {{username}} is 
> configured and the registry host of the image reference equals the registry 
> host of the endpoint's {{serverAddress}}.
> * For an image on another registry the pull or push runs without 
> authentication, and a DEBUG log line says why.
> * Without a {{username}} the operations run without authentication instead of 
> failing.
> h3. Code changes
> * {{AsyncDockerProducer}} ({{executePullImageRequest}}, 
> {{executePushImageRequest}}): decide whether to attach the {{AuthConfig}}; do 
> not call {{client.authConfig()}} when no username is set.
> * {{DockerHelper}}: new helper that returns the registry host of an image 
> reference, following the Docker reference rules: the first path component is 
> a registry when it contains {{.}} or {{:}} or is {{localhost}}, otherwise it 
> is Docker Hub. Docker Hub aliases ({{docker.io}}, {{index.docker.io}}, 
> {{registry-1.docker.io}}, {{https://index.docker.io/v1/}}) are normalised to 
> one value; scheme, path and a trailing {{/v1/}} on {{serverAddress}} are 
> ignored; host and port are compared case-insensitively; a tag or digest 
> suffix does not change the host.
> * Docs: {{docker-component.adoc}} and the 
> {{allowConnectionAndCredentialsFromHeaders}} Javadoc in 
> {{DockerConfiguration}} describe that pull and push use the endpoint 
> authentication only for images in the registry of {{serverAddress}} 
> (regenerate the catalog copies if an option description changes).
> * Upgrade guide 4.24 (camel-docker section): {{imagepull}} / {{imagepush}} of 
> an image whose registry differs from {{serverAddress}} no longer send the 
> endpoint's username and password; set {{serverAddress}} to the registry of 
> the images, or use one endpoint per registry.
> h3. Tests
> JUnit 5 + Mockito, in 
> {{components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/}}
>  (stub {{authConfig()}} on the mocked client):
> * {{PullImageCmdHeaderTest}} / {{PushImageCmdHeaderTest}}: an image of the 
> configured registry gets the endpoint authentication; an image of another 
> registry gets none ({{withAuthConfig}} never called).
> * {{PullImageCmdHeaderTest}}: without a username the pull runs and 
> {{client.authConfig()}} is not called.
> * {{DockerHelperTest}}: registry host of image references (Docker Hub short 
> names, {{library/}} names, host:port, {{localhost}}, digests, mixed case).



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to