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(