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 0b46667aa fix(ctrl): use caSecrets parameters for kamelet download
0b46667aa is described below

commit 0b46667aaf9516e1fc74c852686eca7b921ec921
Author: Pasquale Congiusti <pasquale.congiu...@gmail.com>
AuthorDate: Fri Jun 20 15:59:06 2025 +0200

    fix(ctrl): use caSecrets parameters for kamelet download
    
    Closes #6060
---
 pkg/controller/integrationplatform/create.go   |  2 +
 pkg/controller/integrationplatform/kamelets.go |  9 ++++-
 pkg/util/jvm/keystore.go                       | 14 +++----
 pkg/util/jvm/keystore_test.go                  | 53 ++++++++++++++++++++++----
 pkg/util/maven/maven_command.go                |  1 -
 5 files changed, 61 insertions(+), 18 deletions(-)

diff --git a/pkg/controller/integrationplatform/create.go 
b/pkg/controller/integrationplatform/create.go
index 88ccf1fde..7830ea621 100644
--- a/pkg/controller/integrationplatform/create.go
+++ b/pkg/controller/integrationplatform/create.go
@@ -29,6 +29,7 @@ import (
        "github.com/apache/camel-k/v2/pkg/resources"
        "github.com/apache/camel-k/v2/pkg/util/camel"
        "github.com/apache/camel-k/v2/pkg/util/defaults"
+       "github.com/apache/camel-k/v2/pkg/util/log"
        k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
 )
 
@@ -176,6 +177,7 @@ func installKamelets(ctx context.Context, c client.Client, 
platform *v1.Integrat
                                "IntegrationPlatformKameletCatalogAvailable",
                                fmt.Sprintf("kamelet catalog %s not available. 
Error: %v", camelVersion, err),
                        )
+                       log.Errorf(err, "A failure happened while loading 
Kamelet catalog %s", camelVersion)
                } else {
                        message := fmt.Sprintf("successfully installed Kamelet 
catalog version %s: success %d Kamelets, failed %d Kamelets",
                                camelVersion, installedKam, erroredKam)
diff --git a/pkg/controller/integrationplatform/kamelets.go 
b/pkg/controller/integrationplatform/kamelets.go
index a3ce3c7e8..f7b8ce5d6 100644
--- a/pkg/controller/integrationplatform/kamelets.go
+++ b/pkg/controller/integrationplatform/kamelets.go
@@ -98,8 +98,9 @@ func prepareKameletDirectory() (string, error) {
        if err := os.RemoveAll(kameletDir); err != nil {
                return kameletDirEnv, err
        }
+       err := os.MkdirAll(kameletDir, os.ModePerm)
 
-       return kameletDir, nil
+       return kameletDir, err
 }
 
 func downloadKameletDependency(ctx context.Context, c client.Client, platform 
*v1.IntegrationPlatform, version, kameletsDir string) error {
@@ -112,6 +113,8 @@ func downloadKameletDependency(ctx context.Context, c 
client.Client, platform *v
        mc.AddArgument("dependency:copy")
        
mc.AddArgument(fmt.Sprintf("-Dartifact=org.apache.camel.kamelets:camel-kamelets:%s:jar",
 version))
        mc.AddArgument("-Dmdep.useBaseVersion=true")
+       // TODO: this one should be already managed during the command execution
+       // This workaround is fixing temporarily the problem
        mc.AddArgument("-Dmaven.repo.local=" + mc.LocalRepository)
        mc.AddArgument(fmt.Sprintf("-DoutputDirectory=%s", kameletsDir))
 
@@ -147,6 +150,10 @@ func downloadKameletDependency(ctx context.Context, c 
client.Client, platform *v
                        "-Djavax.net.ssl.trustStore="+trustStoreName,
                        "-Djavax.net.ssl.trustStorePassword="+trustStorePass,
                )
+               // TODO: this one should be already managed during the command 
execution
+               // This workaround is fixing temporarily the problem
+               mc.AddArgument("-Djavax.net.ssl.trustStore=" + trustStoreName)
+               mc.AddArgument("-Djavax.net.ssl.trustStorePassword=" + 
trustStorePass)
        }
 
        timeoutCtx, cancel := context.WithTimeout(ctx, 
platform.Status.Build.GetTimeout().Duration)
diff --git a/pkg/util/jvm/keystore.go b/pkg/util/jvm/keystore.go
index 5b4cff9c3..8af6d209d 100644
--- a/pkg/util/jvm/keystore.go
+++ b/pkg/util/jvm/keystore.go
@@ -37,8 +37,8 @@ const (
 var (
        logger = log.WithName("keytool")
 
-       loggerInfo  = func(s string) string { logger.Info(s); return s }
-       loggerError = func(s string) string { logger.Error(nil, s); return s }
+       loggerInfo = func(s string) string { logger.Info(s); return s }
+       loggerNil  = func(s string) string { return s }
 )
 
 func GenerateKeystore(ctx context.Context, keystoreDir, keystoreName, 
keystorePass string, data [][]byte) error {
@@ -47,9 +47,8 @@ func GenerateKeystore(ctx context.Context, keystoreDir, 
keystoreName, keystorePa
                cmd := exec.CommandContext(ctx, "keytool", args...)
                cmd.Dir = keystoreDir
                cmd.Stdin = bytes.NewReader(data)
-               // keytool logs info messages to stderr, as stdout is used to 
output results,
-               // otherwise it logs error messages to stdout.
-               err := util.RunAndLog(ctx, cmd, loggerInfo, loggerError)
+               // keytool logs info messages to stderr, as stdout is used to 
output results, we just skip the printout.
+               err := util.RunAndLog(ctx, cmd, loggerInfo, loggerNil)
                if err != nil {
                        return err
                }
@@ -64,9 +63,8 @@ func GenerateKeystore(ctx context.Context, keystoreDir, 
keystoreName, keystorePa
                args := strings.Fields(fmt.Sprintf("-importkeystore -noprompt 
-srckeystore %s -srcstorepass %s -destkeystore %s -deststorepass %s", 
caCertsPath, "changeit", keystoreName, keystorePass))
                cmd := exec.CommandContext(ctx, "keytool", args...)
                cmd.Dir = keystoreDir
-               // keytool logs info messages to stderr, as stdout is used to 
output results,
-               // otherwise it logs error messages to stdout.
-               err := util.RunAndLog(ctx, cmd, loggerInfo, loggerError)
+               // keytool logs info messages to stderr, as stdout is used to 
output results, we just skip the printout.
+               err := util.RunAndLog(ctx, cmd, loggerInfo, loggerNil)
                if err != nil {
                        return err
                }
diff --git a/pkg/util/jvm/keystore_test.go b/pkg/util/jvm/keystore_test.go
index be10cbae6..9ac9b4f4b 100644
--- a/pkg/util/jvm/keystore_test.go
+++ b/pkg/util/jvm/keystore_test.go
@@ -19,7 +19,9 @@ package jvm
 
 import (
        "context"
-       "os"
+       "os/exec"
+       "path"
+       "strings"
        "testing"
 
        "github.com/apache/camel-k/v2/pkg/util"
@@ -28,26 +30,61 @@ import (
 )
 
 func TestGenerateKeystore(t *testing.T) {
+       ksDir := t.TempDir()
 
        // Nil Data
        var data [][]byte
        ctx := context.Background()
-       err := GenerateKeystore(ctx, "", "/tmp/keystore", 
NewKeystorePassword(), data)
+       err := GenerateKeystore(ctx, ksDir, "my-ks", NewKeystorePassword(), 
data)
        require.NoError(t, err)
 
        // Non-Nil Data
        data = [][]byte{{0}, {1}}
-       err = GenerateKeystore(ctx, "", "/tmp/keystore", NewKeystorePassword(), 
data)
+       err = GenerateKeystore(ctx, ksDir, "my-ks", NewKeystorePassword(), data)
        require.Error(t, err)
        assert.Equal(t, "keytool error: java.io.IOException: keystore password 
was incorrect: exit status 1", err.Error())
 
        // Incorrect password format
-       err = GenerateKeystore(ctx, "", "/tmp/keystore", "", data)
+       err = GenerateKeystore(ctx, ksDir, "my-ks", "", data)
        require.Error(t, err)
-       assert.Equal(t, "Illegal option:  /tmp/keystore: exit status 1", 
err.Error())
+       assert.Equal(t, "Illegal option:  my-ks: exit status 1", err.Error())
 
-       testFileExists, _ := util.FileExists("/tmp/keystore")
-       if testFileExists {
-               os.Remove("/tmp/keystore")
+}
+
+func TestGenerateValidKeystore(t *testing.T) {
+       ksDir := t.TempDir()
+
+       // Generate a valid sample certificate on the fly
+       ctx := context.Background()
+       args := []string{
+               "-genkeypair",
+               "-alias", "mycert",
+               "-keyalg", "RSA",
+               "-keysize", "2048",
+               "-validity", "7",
+               "-keystore", "my.jks",
+               "-storepass", "changeit",
+               "-keypass", "changeit",
+               "-dname", "CN=example.com, OU=IT, O=MyCompany, L=City, 
ST=State, C=US",
        }
+       cmd := exec.CommandContext(ctx, "keytool", args...)
+       cmd.Dir = ksDir
+       err := util.RunAndLog(ctx, cmd, loggerInfo, loggerNil)
+       require.NoError(t, err)
+       args = strings.Fields("-exportcert -alias mycert -keystore my.jks 
-storepass changeit -rfc -file mycert.crt")
+       cmd = exec.CommandContext(ctx, "keytool", args...)
+       cmd.Dir = ksDir
+       err = util.RunAndLog(ctx, cmd, loggerInfo, loggerNil)
+       require.NoError(t, err)
+
+       content, err := util.ReadFile(path.Join(ksDir, "mycert.crt"))
+       require.NoError(t, err)
+
+       data := [][]byte{content}
+       err = GenerateKeystore(ctx, ksDir, "imported.jks", 
NewKeystorePassword(), data)
+       require.NoError(t, err)
+
+       exists, err := util.FileExists(path.Join(ksDir, "imported.jks"))
+       require.NoError(t, err)
+       assert.True(t, exists, "missing the generated keystore")
 }
diff --git a/pkg/util/maven/maven_command.go b/pkg/util/maven/maven_command.go
index b853ad560..d82c4512b 100644
--- a/pkg/util/maven/maven_command.go
+++ b/pkg/util/maven/maven_command.go
@@ -73,7 +73,6 @@ func (c *Command) DoSettings(ctx context.Context) error {
                if _, err := os.Stat(c.context.LocalRepository); err != nil {
                        return err
                }
-
                args = append(args, 
"-Dmaven.repo.local="+c.context.LocalRepository)
        }
 

Reply via email to