You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2024/01/11 08:17:37 UTC

(camel-k) branch main updated: fix(core): Fix docker hub registry configuration

This is an automated email from the ASF dual-hosted git repository.

pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git


The following commit(s) were added to refs/heads/main by this push:
     new 9d2f52a40 fix(core): Fix docker hub registry configuration
9d2f52a40 is described below

commit 9d2f52a4030e3685d23163c8d43c5b409f4a99a0
Author: Gaelle Fournier <ga...@gmail.com>
AuthorDate: Fri Jan 5 16:57:40 2024 +0100

    fix(core): Fix docker hub registry configuration
    
    * change default secret generation from CLI for Jib compatibility
    * update documentation with configuration for docker hub registry
---
 .../pages/installation/registry/dockerhub.adoc     |  8 +++++--
 pkg/util/registry/registry.go                      | 28 ++++++++++++----------
 pkg/util/registry/registry_test.go                 |  3 ++-
 3 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/docs/modules/ROOT/pages/installation/registry/dockerhub.adoc b/docs/modules/ROOT/pages/installation/registry/dockerhub.adoc
index 3b68c51d8..79f1d40e9 100644
--- a/docs/modules/ROOT/pages/installation/registry/dockerhub.adoc
+++ b/docs/modules/ROOT/pages/installation/registry/dockerhub.adoc
@@ -13,8 +13,9 @@ kamel install --registry docker.io --organization your-user-id-or-org --registry
 The `--registry-auth-username` and `--registry-auth-password` flags are used by the `kamel` CLI to create a Kubernetes secret
 that holds your credentials for authenticating against the Docker registry.
 
-In the general case, the `--registry-auth-server` should be used, but it can be omitted for Docker Hub because it's
-automatically set to `https://index.docker.io/v1/`.
+In the general case, the `--registry-auth-server` should be used ad it's automatically set to `https://index.docker.io/v1/`. Depending on the xref:installation/registry/registry.adoc[publish strategy] you are using you will need to adapt you credentials with the `--registry-auth-server` flag. **Spectrum** expect `https://index.docker.io/v1/` while **Jib** expect `docker.io`.
+
+NOTE: **Jib** works with Docker Hub in API v2 out of the box while **Spectrum** needs some adaptations for it to work.
 
 == Alternative Methods
 
@@ -26,6 +27,7 @@ Or you can also decide to create it using `kubectl`, with the following command:
 kubectl create secret docker-registry your-secret-name --docker-username your-user --docker-password your-pass
 ----
 
+
 Another possibility is to upload to the cluster your entire list of push/pull secrets:
 
 [source,bash]
@@ -42,3 +44,5 @@ After you've created the secret, you can link it to Camel K during installation:
 ----
 kamel install --registry docker.io --organization your-user-id-or-org --registry-secret your-secret-name
 ----
+
+As with the default method, this depends on the xref:installation/registry/registry.adoc[publish strategy] you are using. So make sure any credential contains the valid authentication servers: `https://index.docker.io/v1/` for **Spectrum** and `docker.io` for **Jib**.
\ No newline at end of file
diff --git a/pkg/util/registry/registry.go b/pkg/util/registry/registry.go
index e2c118e16..623110d70 100644
--- a/pkg/util/registry/registry.go
+++ b/pkg/util/registry/registry.go
@@ -25,6 +25,7 @@ import (
 	"fmt"
 	"os"
 	"path/filepath"
+	"strings"
 
 	"github.com/apache/camel-k/v2/pkg/client"
 	"go.uber.org/multierr"
@@ -32,7 +33,7 @@ import (
 )
 
 var knownServersByRegistry = map[string]string{
-	"docker.io": "https://index.docker.io/v1/",
+	"docker.io": "https://index.docker.io/v1/,docker.io",
 }
 
 // Auth contains basic information for authenticating against a container registry.
@@ -64,7 +65,8 @@ func (a Auth) IsSet() bool {
 
 // validate checks if all fields are populated correctly.
 func (a Auth) validate() error {
-	if a.getActualServer() == "" || a.Username == "" {
+	actualSevers := a.getActualServers()
+	if len(actualSevers) < 1 || a.Username == "" {
 		return errors.New("not enough information to generate a registry authentication file")
 	}
 
@@ -82,24 +84,26 @@ func (a Auth) GenerateDockerConfig() ([]byte, error) {
 }
 
 func (a Auth) generateDockerConfigObject() DockerConfigList {
-	return DockerConfigList{
-		map[string]DockerConfig{
-			a.getActualServer(): {
-				Auth: a.encodedCredentials(),
-			},
-		},
+	dockerConfigs := make(map[string]DockerConfig)
+	for _, server := range a.getActualServers() {
+		dockerConfigs[server] = DockerConfig{Auth: a.encodedCredentials()}
 	}
+	return DockerConfigList{Auths: dockerConfigs}
 }
 
-func (a Auth) getActualServer() string {
+func (a Auth) getActualServers() []string {
 	if a.Server != "" {
-		return a.Server
+		return []string{a.Server}
 	}
 	if p, ok := knownServersByRegistry[a.Registry]; ok {
-		return p
+		return strings.Split(p, ",")
 	}
 
-	return a.Registry
+	if a.Registry != "" {
+		return []string{a.Registry}
+	}
+
+	return nil
 }
 
 func (a Auth) encodedCredentials() string {
diff --git a/pkg/util/registry/registry_test.go b/pkg/util/registry/registry_test.go
index 948f2fa20..a9cb29dbb 100644
--- a/pkg/util/registry/registry_test.go
+++ b/pkg/util/registry/registry_test.go
@@ -36,7 +36,8 @@ func TestAuth_GenerateDockerConfig(t *testing.T) {
 	}
 	conf, err := a.GenerateDockerConfig()
 	assert.Nil(t, err)
-	assert.Equal(t, `{"auths":{"https://index.docker.io/v1/":{"auth":"bmljOg=="}}}`, string(conf))
+	assert.Contains(t, string(conf), `"https://index.docker.io/v1/":{"auth":"bmljOg=="}`)
+	assert.Contains(t, string(conf), `"docker.io":{"auth":"bmljOg=="}`)
 
 	a = Auth{
 		Username: "nic",