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

Reply via email to