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) }