This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch export-secrets in repository https://gitbox.apache.org/repos/asf/camel.git
commit 6cf3dbe9765cd36337f8496bb21ede38041c1aa6 Author: Andrea Cosentino <[email protected]> AuthorDate: Tue May 9 10:22:42 2023 +0200 CAMEL-19099 - Camel-Jbang Export: Add a flag to include secret refresh properties in application.properties Signed-off-by: Andrea Cosentino <[email protected]> --- .../camel/dsl/jbang/core/commands/Export.java | 5 ++ .../dsl/jbang/core/commands/ExportBaseCommand.java | 6 +++ .../dsl/jbang/core/commands/ExportQuarkus.java | 59 ++++++++++++++++++++++ 3 files changed, 70 insertions(+) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java index 5f6733512f9..a5f429b66e6 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java @@ -62,6 +62,9 @@ public class Export extends ExportBaseCommand { = "true".equals(prop.getProperty("camel.jbang.gradleWrapper", this.gradleWrapper ? "true" : "false")); this.exportDir = prop.getProperty("camel.jbang.exportDir", this.exportDir); this.buildTool = prop.getProperty("camel.jbang.buildTool", this.buildTool); + this.secretsRefresh + = "true".equals(prop.getProperty("camel.jbang.secretsRefresh", this.secretsRefresh ? "true" : "false")); + this.secretsRefreshProviders = prop.getProperty("camel.jbang.secretsRefreshProviders", this.secretsRefreshProviders); } if (runtime == null) { @@ -111,6 +114,8 @@ public class Export extends ExportBaseCommand { cmd.buildTool = this.buildTool; cmd.quiet = this.quiet; cmd.additionalProperties = this.additionalProperties; + cmd.secretsRefresh = this.secretsRefresh; + cmd.secretsRefreshProviders = this.secretsRefreshProviders; // run export return cmd.export(); } diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java index 7fba0ccf50e..e1aeedcf24b 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java @@ -161,6 +161,12 @@ abstract class ExportBaseCommand extends CamelCommand { description = "Will be quiet, only print when error occurs") boolean quiet; + @CommandLine.Option(names = { "--secrets-refresh" }, defaultValue = "false", description = "Enabling secrets refresh") + protected boolean secretsRefresh; + + @CommandLine.Option(names = { "--secrets-refresh-providers" }, description = "Comma separated list of providers in the set AWS, GCP and Azure, to use in combination with --secrets-refresh option") + protected String secretsRefreshProviders; + public ExportBaseCommand(CamelJBangMain main) { super(main); } diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java index 0b8c7baa834..76e4e9bf070 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java @@ -26,6 +26,7 @@ import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.StringJoiner; +import java.util.regex.Pattern; import java.util.stream.Collectors; import org.apache.camel.catalog.CamelCatalog; @@ -185,7 +186,65 @@ class ExportQuarkus extends Export { properties.setProperty("camel.main.routes-include-pattern", routes); } } + if (secretsRefresh) { + if (secretsRefreshProviders != null) { + List<String> providers = Pattern.compile("\\,") + .splitAsStream(secretsRefreshProviders) + .collect(Collectors.toList()); + + for (String provider : providers + ) { + switch (provider) { + case "AWS": + exportAwsSecretsRefreshProp(properties); + break; + case "GCP": + exportGcpSecretsRefreshProp(properties); + break; + case "Azure": + exportAzureSecretsRefreshProp(properties); + break; + } + } + } + } + } + + private void exportAwsSecretsRefreshProp(Properties properties) { + properties.setProperty("camel.vault.aws.accessKey", "<accessKey>"); + properties.setProperty("camel.vault.aws.secretKey", "<secretKey>"); + properties.setProperty("camel.vault.aws.region", "<region>"); + properties.setProperty("camel.vault.aws.useDefaultCredentialProvider", "<useDefaultCredentialProvider>"); + properties.setProperty("camel.vault.aws.refreshEnabled", "true"); + properties.setProperty("camel.vault.aws.refreshPeriod", "30000"); + properties.setProperty("camel.vault.aws.secrets", "<secrets>"); + properties.setProperty("camel.main.context-reload-enabled", "true"); + } + + private void exportGcpSecretsRefreshProp(Properties properties) { + properties.setProperty("camel.vault.gcp.serviceAccountKey", "<serviceAccountKey>"); + properties.setProperty("camel.vault.gcp.projectId", "<projectId>"); + properties.setProperty("camel.vault.gcp.useDefaultInstance", "<useDefaultInstance>"); + properties.setProperty("camel.vault.gcp.refreshEnabled", "true"); + properties.setProperty("camel.vault.aws.refreshPeriod", "30000"); + properties.setProperty("camel.vault.gcp.secrets", "<secrets>"); + properties.setProperty("camel.vault.gcp.subscriptionName", "<subscriptionName>"); + properties.setProperty("camel.main.context-reload-enabled", "true"); + } + private void exportAzureSecretsRefreshProp(Properties properties) { + properties.setProperty("camel.vault.azure.tenantId", "<tenantId>"); + properties.setProperty("camel.vault.azure.clientId", "<clientId>"); + properties.setProperty("camel.vault.azure.clientSecret", "<clientSecret>"); + properties.setProperty("camel.vault.azure.vaultName", "<vaultName>"); + properties.setProperty("camel.vault.azure.refreshEnabled", "true"); + properties.setProperty("camel.vault.azure.refreshPeriod", "30000"); + properties.setProperty("camel.vault.azure.secrets", "<secrets>"); + properties.setProperty("camel.vault.azure.eventhubConnectionString", "<eventhubConnectionString>"); + properties.setProperty("camel.vault.azure.blobAccountName", "<blobAccountName>"); + properties.setProperty("camel.vault.azure.blobContainerName", "<blobContainerName>"); + properties.setProperty("camel.vault.azure.blobAccessKey", "<blobAccessKey>"); + properties.setProperty("camel.main.context-reload-enabled", "true"); } private static String removeScheme(String s) {
