You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2022/03/01 14:10:44 UTC

[camel] 01/14: CAMEL-17684 - Support ability to load properties from Vault/Secrets cloud services - GCP Secrets Manager

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

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

commit 42cacc37ca4a9ad7c235364f93c1ea6cf147a9d0
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Tue Mar 1 12:28:54 2022 +0100

    CAMEL-17684 - Support ability to load properties from Vault/Secrets cloud services - GCP Secrets Manager
---
 ...nfiguration.java => GcpVaultConfiguration.java} | 36 ++++++++++++++--------
 .../org/apache/camel/vault/VaultConfiguration.java | 19 ++++++++++++
 .../camel/main/DefaultConfigurationConfigurer.java |  7 +++++
 ...s.java => GcpVaultConfigurationProperties.java} | 36 ++++++++++++++--------
 .../camel/main/VaultConfigurationProperties.java   | 12 ++++++++
 .../maven/packaging/PrepareCamelMainMojo.java      | 21 +++++++++++--
 6 files changed, 102 insertions(+), 29 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/vault/VaultConfiguration.java b/core/camel-api/src/main/java/org/apache/camel/vault/GcpVaultConfiguration.java
similarity index 56%
copy from core/camel-api/src/main/java/org/apache/camel/vault/VaultConfiguration.java
copy to core/camel-api/src/main/java/org/apache/camel/vault/GcpVaultConfiguration.java
index 5375d8d..205cbe5 100644
--- a/core/camel-api/src/main/java/org/apache/camel/vault/VaultConfiguration.java
+++ b/core/camel-api/src/main/java/org/apache/camel/vault/GcpVaultConfiguration.java
@@ -16,28 +16,38 @@
  */
 package org.apache.camel.vault;
 
+import org.apache.camel.spi.Metadata;
+
 /**
- * Base configuration for access to Vaults.
+ * Configuration for access to AWS Secret.
  */
-public class VaultConfiguration {
+public class GcpVaultConfiguration extends VaultConfiguration {
+
+    @Metadata(secret = true)
+    private String serviceAccountKey;
+    @Metadata
+    private String projectId;
 
-    private AwsVaultConfiguration aws;
+    public String getServiceAccountKey() {
+        return serviceAccountKey;
+    }
 
     /**
-     * AWS Vault Configuration
+     * The Service Account Key location
      */
-    public AwsVaultConfiguration aws() {
-        if (aws == null) {
-            aws = new AwsVaultConfiguration();
-        }
-        return aws;
+    public void setServiceAccountKey(String serviceAccountKey) {
+        this.serviceAccountKey = serviceAccountKey;
     }
 
-    public AwsVaultConfiguration getAwsVaultConfiguration() {
-        return aws;
+    public String getProjectId() {
+        return projectId;
     }
 
-    public void setAwsVaultConfiguration(AwsVaultConfiguration aws) {
-        this.aws = aws;
+    /**
+     * The GCP Project ID
+     */
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
     }
+
 }
diff --git a/core/camel-api/src/main/java/org/apache/camel/vault/VaultConfiguration.java b/core/camel-api/src/main/java/org/apache/camel/vault/VaultConfiguration.java
index 5375d8d..d630ea2 100644
--- a/core/camel-api/src/main/java/org/apache/camel/vault/VaultConfiguration.java
+++ b/core/camel-api/src/main/java/org/apache/camel/vault/VaultConfiguration.java
@@ -22,6 +22,7 @@ package org.apache.camel.vault;
 public class VaultConfiguration {
 
     private AwsVaultConfiguration aws;
+    private GcpVaultConfiguration gcp;
 
     /**
      * AWS Vault Configuration
@@ -33,6 +34,16 @@ public class VaultConfiguration {
         return aws;
     }
 
+    /**
+     * GCP Vault Configuration
+     */
+    public GcpVaultConfiguration gcp() {
+        if (gcp == null) {
+            gcp = new GcpVaultConfiguration();
+        }
+        return gcp;
+    }
+
     public AwsVaultConfiguration getAwsVaultConfiguration() {
         return aws;
     }
@@ -40,4 +51,12 @@ public class VaultConfiguration {
     public void setAwsVaultConfiguration(AwsVaultConfiguration aws) {
         this.aws = aws;
     }
+
+    public GcpVaultConfiguration getGcpVaultConfiguration() {
+        return gcp;
+    }
+
+    public void setGcpVaultConfiguration(GcpVaultConfiguration gcp) {
+        this.gcp = gcp;
+    }
 }
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
index 2c6fe86..5b1a71d 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
@@ -84,6 +84,7 @@ import org.apache.camel.support.jsse.GlobalSSLContextParametersSupplier;
 import org.apache.camel.support.startup.LoggingStartupStepRecorder;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.vault.AwsVaultConfiguration;
+import org.apache.camel.vault.GcpVaultConfiguration;
 import org.apache.camel.vault.VaultConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -549,6 +550,12 @@ public final class DefaultConfigurationConfigurer {
             vault.setAwsVaultConfiguration(aws);
         }
 
+        GcpVaultConfiguration gcp = getSingleBeanOfType(registry, GcpVaultConfiguration.class);
+        if (gcp != null) {
+            VaultConfiguration vault = camelContext.getVaultConfiguration();
+            vault.setGcpVaultConfiguration(gcp);
+        }
+
         // set the default thread pool profile if defined
         initThreadPoolProfiles(registry, camelContext);
     }
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/VaultConfigurationProperties.java b/core/camel-main/src/main/java/org/apache/camel/main/GcpVaultConfigurationProperties.java
similarity index 62%
copy from core/camel-main/src/main/java/org/apache/camel/main/VaultConfigurationProperties.java
copy to core/camel-main/src/main/java/org/apache/camel/main/GcpVaultConfigurationProperties.java
index 0002430..8ef1720 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/VaultConfigurationProperties.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/GcpVaultConfigurationProperties.java
@@ -17,14 +17,19 @@
 package org.apache.camel.main;
 
 import org.apache.camel.spi.BootstrapCloseable;
-import org.apache.camel.vault.VaultConfiguration;
+import org.apache.camel.spi.Configurer;
+import org.apache.camel.vault.AwsVaultConfiguration;
+import org.apache.camel.vault.GcpVaultConfiguration;
 
-public class VaultConfigurationProperties extends VaultConfiguration implements BootstrapCloseable {
+/**
+ * Configuration for access to GCP Secret.
+ */
+@Configurer(bootstrap = true)
+public class GcpVaultConfigurationProperties extends GcpVaultConfiguration implements BootstrapCloseable {
 
     private MainConfigurationProperties parent;
-    private AwsVaultConfigurationProperties aws;
 
-    public VaultConfigurationProperties(MainConfigurationProperties parent) {
+    public GcpVaultConfigurationProperties(MainConfigurationProperties parent) {
         this.parent = parent;
     }
 
@@ -35,9 +40,6 @@ public class VaultConfigurationProperties extends VaultConfiguration implements
     @Override
     public void close() {
         parent = null;
-        if (aws != null) {
-            aws.close();
-        }
     }
 
     // getter and setters
@@ -48,12 +50,20 @@ public class VaultConfigurationProperties extends VaultConfiguration implements
     // fluent builders
     // --------------------------------------------------------------
 
-    @Override
-    public AwsVaultConfigurationProperties aws() {
-        if (aws == null) {
-            aws = new AwsVaultConfigurationProperties(parent);
-        }
-        return aws;
+    /**
+     * The Service Account Key location
+     */
+    public GcpVaultConfigurationProperties withServiceAccountKey(String serviceAccountKey) {
+        setServiceAccountKey(serviceAccountKey);
+        return this;
+    }
+
+    /**
+     * The GCP Project ID
+     */
+    public GcpVaultConfigurationProperties withProjectId(String projectId) {
+        setProjectId(projectId);
+        return this;
     }
 
 }
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/VaultConfigurationProperties.java b/core/camel-main/src/main/java/org/apache/camel/main/VaultConfigurationProperties.java
index 0002430..4b13d55 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/VaultConfigurationProperties.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/VaultConfigurationProperties.java
@@ -17,12 +17,14 @@
 package org.apache.camel.main;
 
 import org.apache.camel.spi.BootstrapCloseable;
+import org.apache.camel.vault.GcpVaultConfiguration;
 import org.apache.camel.vault.VaultConfiguration;
 
 public class VaultConfigurationProperties extends VaultConfiguration implements BootstrapCloseable {
 
     private MainConfigurationProperties parent;
     private AwsVaultConfigurationProperties aws;
+    private GcpVaultConfigurationProperties gcp;
 
     public VaultConfigurationProperties(MainConfigurationProperties parent) {
         this.parent = parent;
@@ -38,6 +40,9 @@ public class VaultConfigurationProperties extends VaultConfiguration implements
         if (aws != null) {
             aws.close();
         }
+        if (gcp != null) {
+            gcp.close();
+        }
     }
 
     // getter and setters
@@ -56,4 +61,11 @@ public class VaultConfigurationProperties extends VaultConfiguration implements
         return aws;
     }
 
+    @Override
+    public GcpVaultConfigurationProperties gcp() {
+        if (gcp == null) {
+            gcp = new GcpVaultConfigurationProperties(parent);
+        }
+        return gcp;
+    }
 }
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCamelMainMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCamelMainMojo.java
index 843fd6e..169fe6e 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCamelMainMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCamelMainMojo.java
@@ -197,6 +197,8 @@ public class PrepareCamelMainMojo extends AbstractGeneratorMojo {
                     prefix = "camel.rest.";
                 } else if (file.getName().contains("AwsVault")) {
                     prefix = "camel.vault.aws.";
+                } else if (file.getName().contains("GcpVault")) {
+                    prefix = "camel.vault.gcp.";
                     // TODO: add more vault providers here
                 } else if (file.getName().contains("Health")) {
                     prefix = "camel.health.";
@@ -230,13 +232,22 @@ public class PrepareCamelMainMojo extends AbstractGeneratorMojo {
         }
         // include additional vault configuration from camel-api
         // TODO: add more vault providers here
-        File vaultConfig = new File(camelApiDir, "src/main/java/org/apache/camel/vault/AwsVaultConfiguration.java");
+        File awsVaultConfig = new File(camelApiDir, "src/main/java/org/apache/camel/vault/AwsVaultConfiguration.java");
         try {
-            List<MainModel.MainOptionModel> model = parseConfigurationSource(vaultConfig);
+            List<MainModel.MainOptionModel> model = parseConfigurationSource(awsVaultConfig);
             model.forEach(m -> m.setName("camel.vault.aws." + m.getName()));
             data.addAll(model);
         } catch (Exception e) {
-            throw new MojoFailureException("Error parsing file " + restConfig + " due " + e.getMessage(), e);
+            throw new MojoFailureException("Error parsing file " + awsVaultConfig + " due " + e.getMessage(), e);
+        }
+
+        File gcpVaultConfig = new File(camelApiDir, "src/main/java/org/apache/camel/vault/GcpVaultConfiguration.java");
+        try {
+            List<MainModel.MainOptionModel> model = parseConfigurationSource(gcpVaultConfig);
+            model.forEach(m -> m.setName("camel.vault.gcp." + m.getName()));
+            data.addAll(model);
+        } catch (Exception e) {
+            throw new MojoFailureException("Error parsing file " + gcpVaultConfig + " due " + e.getMessage(), e);
         }
 
         // lets sort so they are always ordered (but camel.main in top)
@@ -269,6 +280,10 @@ public class PrepareCamelMainMojo extends AbstractGeneratorMojo {
                     new MainGroupModel(
                             "camel.vault.aws", "Camel AWS Vault configurations",
                             "org.apache.camel.vault.AwsVaultConfiguration"));
+            model.getGroups().add(
+                    new MainGroupModel(
+                            "camel.vault.gcp", "Camel GCP Vault configurations",
+                            "org.apache.camel.vault.GcpVaultConfiguration"));
             // TODO: add more vault providers here
             model.getGroups()
                     .add(new MainGroupModel(