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/09/13 12:07:59 UTC
[camel] 02/04: CAMEL-18501 - Camel-Google-Secret-Manager: Create a task looking for secrets update in PubSub
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 dc043fe9e0f80de8bbc179b02163a5c586688558
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Tue Sep 13 12:00:12 2022 +0200
CAMEL-18501 - Camel-Google-Secret-Manager: Create a task looking for secrets update in PubSub
Signed-off-by: Andrea Cosentino <an...@gmail.com>
---
.../main/camel-main-configuration-metadata.json | 4 ++++
.../apache/camel/periodic-task/gcp-secret-refresh | 2 ++
.../manager/vault/PubsubReloadTriggerTask.java | 17 +++++++--------
.../GcpVaultConfigurationPropertiesConfigurer.java | 24 ++++++++++++++++++++++
.../vault/GcpVaultConfigurationConfigurer.java | 24 ++++++++++++++++++++++
.../camel-main-configuration-metadata.json | 4 ++++
core/camel-main/src/main/docs/main.adoc | 6 +++++-
7 files changed, 72 insertions(+), 9 deletions(-)
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
index 895849bf2e0..244dd57d7c9 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
@@ -218,7 +218,11 @@
{ "name": "camel.vault.azure.tenantId", "description": "The Tenant Id for accessing Azure Key Vault", "sourceType": "org.apache.camel.vault.AzureVaultConfiguration", "type": "string", "javaType": "java.lang.String" },
{ "name": "camel.vault.azure.vaultName", "description": "The vault Name in Azure Key Vault", "sourceType": "org.apache.camel.vault.AzureVaultConfiguration", "type": "string", "javaType": "java.lang.String" },
{ "name": "camel.vault.gcp.projectId", "description": "The GCP Project ID", "sourceType": "org.apache.camel.vault.GcpVaultConfiguration", "type": "string", "javaType": "java.lang.String" },
+ { "name": "camel.vault.gcp.refreshEnabled", "description": "Whether to automatically reload Camel upon secrets being updated in AWS.", "sourceType": "org.apache.camel.vault.GcpVaultConfiguration", "type": "boolean", "javaType": "boolean", "defaultValue": "false" },
+ { "name": "camel.vault.gcp.refreshPeriod", "description": "The period (millis) between checking Google for updated secrets.", "sourceType": "org.apache.camel.vault.GcpVaultConfiguration", "type": "integer", "javaType": "long", "defaultValue": 30000 },
+ { "name": "camel.vault.gcp.secrets", "description": "Specify the secret names (or pattern) to check for updates. Multiple secrets can be separated by comma.", "sourceType": "org.apache.camel.vault.GcpVaultConfiguration", "type": "string", "javaType": "java.lang.String" },
{ "name": "camel.vault.gcp.serviceAccountKey", "description": "The Service Account Key location", "sourceType": "org.apache.camel.vault.GcpVaultConfiguration", "type": "string", "javaType": "java.lang.String" },
+ { "name": "camel.vault.gcp.subscriptionName", "description": "Define the Google Pubsub subscription Name to be used when checking for updates", "sourceType": "org.apache.camel.vault.GcpVaultConfiguration", "type": "string", "javaType": "java.lang.String" },
{ "name": "camel.vault.gcp.useDefaultInstance", "description": "Define if we want to use the GCP Client Default Instance or not", "sourceType": "org.apache.camel.vault.GcpVaultConfiguration", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }
]
}
diff --git a/components/camel-google/camel-google-secret-manager/src/generated/resources/META-INF/services/org/apache/camel/periodic-task/gcp-secret-refresh b/components/camel-google/camel-google-secret-manager/src/generated/resources/META-INF/services/org/apache/camel/periodic-task/gcp-secret-refresh
new file mode 100644
index 00000000000..97807c0935d
--- /dev/null
+++ b/components/camel-google/camel-google-secret-manager/src/generated/resources/META-INF/services/org/apache/camel/periodic-task/gcp-secret-refresh
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.google.secret.manager.vault.PubsubReloadTriggerTask
diff --git a/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/vault/PubsubReloadTriggerTask.java b/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/vault/PubsubReloadTriggerTask.java
index 7088f6284b0..e4a2afd0d13 100644
--- a/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/vault/PubsubReloadTriggerTask.java
+++ b/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/vault/PubsubReloadTriggerTask.java
@@ -59,6 +59,7 @@ public class PubsubReloadTriggerTask extends ServiceSupport implements CamelCont
private static final String CAMEL_VAULT_GCP_SERVICE_ACCOUNT_KEY = "CAMEL_VAULT_GCP_SERVICE_ACCOUNT_KEY";
private static final String CAMEL_VAULT_GCP_PROJECT_ID = "CAMEL_VAULT_GCP_PROJECT_ID";
private static final String CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE = "CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE";
+ private static final String CAMEL_VAULT_GCP_SUBSCRIPTION_NAME = "CAMEL_VAULT_GCP_SUBSCRIPTION_NAME";
private static final Logger LOG = LoggerFactory.getLogger(PubsubReloadTriggerTask.class);
@@ -120,16 +121,17 @@ public class PubsubReloadTriggerTask extends ServiceSupport implements CamelCont
String serviceAccountKey = System.getenv(CAMEL_VAULT_GCP_SERVICE_ACCOUNT_KEY);
boolean useDefaultInstance = Boolean.parseBoolean(System.getenv(CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE));
String projectId = System.getenv(CAMEL_VAULT_GCP_PROJECT_ID);
- String subscription = null;
- if (ObjectHelper.isEmpty(serviceAccountKey) && ObjectHelper.isEmpty(projectId)) {
+ String subscription = System.getenv(CAMEL_VAULT_GCP_SUBSCRIPTION_NAME);
+ if (ObjectHelper.isEmpty(serviceAccountKey) && ObjectHelper.isEmpty(projectId) && ObjectHelper.isEmpty(subscription)) {
GcpVaultConfiguration gcpVaultConfiguration = getCamelContext().getVaultConfiguration().gcp();
if (ObjectHelper.isNotEmpty(gcpVaultConfiguration)) {
serviceAccountKey = gcpVaultConfiguration.getServiceAccountKey();
projectId = gcpVaultConfiguration.getProjectId();
useDefaultInstance = gcpVaultConfiguration.isUseDefaultInstance();
+ subscription = gcpVaultConfiguration.getSubscriptionName();
}
}
- if (ObjectHelper.isNotEmpty(serviceAccountKey) && ObjectHelper.isNotEmpty(projectId)) {
+ if (ObjectHelper.isNotEmpty(serviceAccountKey) && ObjectHelper.isNotEmpty(projectId) && ObjectHelper.isNotEmpty(subscription)) {
InputStream resolveMandatoryResourceAsInputStream
= ResourceHelper.resolveMandatoryResourceAsInputStream(getCamelContext(), serviceAccountKey);
Credentials myCredentials = ServiceAccountCredentials
@@ -139,7 +141,7 @@ public class PubsubReloadTriggerTask extends ServiceSupport implements CamelCont
Subscriber.Builder builder = Subscriber.newBuilder(subscriptionName, new FilteringEventMessageReceiver());
builder.setCredentialsProvider(FixedCredentialsProvider.create(myCredentials));
subscriber = builder.build();
- } else if (useDefaultInstance && ObjectHelper.isNotEmpty(projectId)) {
+ } else if (useDefaultInstance && ObjectHelper.isNotEmpty(projectId) && ObjectHelper.isNotEmpty(subscription)) {
ProjectSubscriptionName subscriptionName =
ProjectSubscriptionName.of(projectId, subscription);
Subscriber.Builder builder = Subscriber.newBuilder(subscriptionName, new FilteringEventMessageReceiver());
@@ -147,7 +149,7 @@ public class PubsubReloadTriggerTask extends ServiceSupport implements CamelCont
subscriber = builder.build();
} else {
throw new RuntimeCamelException(
- "Using the GCP Secret Manager Properties Function requires setting GCP service account key and project Id as application properties or environment variables");
+ "Using the GCP Secret refresh task requires setting GCP service account key, project Id and Google Pubsub subscription name as application properties or environment variables");
}
}
@@ -170,7 +172,6 @@ public class PubsubReloadTriggerTask extends ServiceSupport implements CamelCont
@Override
public void run() {
subscriber.startAsync().awaitRunning();
- subscriber.awaitTerminated();
}
protected boolean matchSecret(String name) {
@@ -200,8 +201,8 @@ public class PubsubReloadTriggerTask extends ServiceSupport implements CamelCont
public class FilteringEventMessageReceiver implements MessageReceiver {
- private static String SECRET_UPDATE = "SECRET_UPDATE";
- private static String SECRET_VERSION_ADD = "SECRET_VERSION_ADD";
+ private String SECRET_UPDATE = "SECRET_UPDATE";
+ private String SECRET_VERSION_ADD = "SECRET_VERSION_ADD";
private boolean triggerReloading;
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/GcpVaultConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/GcpVaultConfigurationPropertiesConfigurer.java
index c8b2deda7e5..c8943f566ca 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/GcpVaultConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/GcpVaultConfigurationPropertiesConfigurer.java
@@ -31,8 +31,16 @@ public class GcpVaultConfigurationPropertiesConfigurer extends org.apache.camel.
case "HashicorpVaultConfiguration": target.setHashicorpVaultConfiguration(property(camelContext, org.apache.camel.vault.HashicorpVaultConfiguration.class, value)); return true;
case "projectid":
case "ProjectId": target.setProjectId(property(camelContext, java.lang.String.class, value)); return true;
+ case "refreshenabled":
+ case "RefreshEnabled": target.setRefreshEnabled(property(camelContext, boolean.class, value)); return true;
+ case "refreshperiod":
+ case "RefreshPeriod": target.setRefreshPeriod(property(camelContext, long.class, value)); return true;
+ case "secrets":
+ case "Secrets": target.setSecrets(property(camelContext, java.lang.String.class, value)); return true;
case "serviceaccountkey":
case "ServiceAccountKey": target.setServiceAccountKey(property(camelContext, java.lang.String.class, value)); return true;
+ case "subscriptionname":
+ case "SubscriptionName": target.setSubscriptionName(property(camelContext, java.lang.String.class, value)); return true;
case "usedefaultinstance":
case "UseDefaultInstance": target.setUseDefaultInstance(property(camelContext, boolean.class, value)); return true;
default: return false;
@@ -52,8 +60,16 @@ public class GcpVaultConfigurationPropertiesConfigurer extends org.apache.camel.
case "HashicorpVaultConfiguration": return org.apache.camel.vault.HashicorpVaultConfiguration.class;
case "projectid":
case "ProjectId": return java.lang.String.class;
+ case "refreshenabled":
+ case "RefreshEnabled": return boolean.class;
+ case "refreshperiod":
+ case "RefreshPeriod": return long.class;
+ case "secrets":
+ case "Secrets": return java.lang.String.class;
case "serviceaccountkey":
case "ServiceAccountKey": return java.lang.String.class;
+ case "subscriptionname":
+ case "SubscriptionName": return java.lang.String.class;
case "usedefaultinstance":
case "UseDefaultInstance": return boolean.class;
default: return null;
@@ -74,8 +90,16 @@ public class GcpVaultConfigurationPropertiesConfigurer extends org.apache.camel.
case "HashicorpVaultConfiguration": return target.getHashicorpVaultConfiguration();
case "projectid":
case "ProjectId": return target.getProjectId();
+ case "refreshenabled":
+ case "RefreshEnabled": return target.isRefreshEnabled();
+ case "refreshperiod":
+ case "RefreshPeriod": return target.getRefreshPeriod();
+ case "secrets":
+ case "Secrets": return target.getSecrets();
case "serviceaccountkey":
case "ServiceAccountKey": return target.getServiceAccountKey();
+ case "subscriptionname":
+ case "SubscriptionName": return target.getSubscriptionName();
case "usedefaultinstance":
case "UseDefaultInstance": return target.isUseDefaultInstance();
default: return null;
diff --git a/core/camel-main/src/generated/java/org/apache/camel/vault/GcpVaultConfigurationConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/vault/GcpVaultConfigurationConfigurer.java
index 89b1c732cd1..e7e11775ec1 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/vault/GcpVaultConfigurationConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/vault/GcpVaultConfigurationConfigurer.java
@@ -31,8 +31,16 @@ public class GcpVaultConfigurationConfigurer extends org.apache.camel.support.co
case "HashicorpVaultConfiguration": target.setHashicorpVaultConfiguration(property(camelContext, org.apache.camel.vault.HashicorpVaultConfiguration.class, value)); return true;
case "projectid":
case "ProjectId": target.setProjectId(property(camelContext, java.lang.String.class, value)); return true;
+ case "refreshenabled":
+ case "RefreshEnabled": target.setRefreshEnabled(property(camelContext, boolean.class, value)); return true;
+ case "refreshperiod":
+ case "RefreshPeriod": target.setRefreshPeriod(property(camelContext, long.class, value)); return true;
+ case "secrets":
+ case "Secrets": target.setSecrets(property(camelContext, java.lang.String.class, value)); return true;
case "serviceaccountkey":
case "ServiceAccountKey": target.setServiceAccountKey(property(camelContext, java.lang.String.class, value)); return true;
+ case "subscriptionname":
+ case "SubscriptionName": target.setSubscriptionName(property(camelContext, java.lang.String.class, value)); return true;
case "usedefaultinstance":
case "UseDefaultInstance": target.setUseDefaultInstance(property(camelContext, boolean.class, value)); return true;
default: return false;
@@ -52,8 +60,16 @@ public class GcpVaultConfigurationConfigurer extends org.apache.camel.support.co
case "HashicorpVaultConfiguration": return org.apache.camel.vault.HashicorpVaultConfiguration.class;
case "projectid":
case "ProjectId": return java.lang.String.class;
+ case "refreshenabled":
+ case "RefreshEnabled": return boolean.class;
+ case "refreshperiod":
+ case "RefreshPeriod": return long.class;
+ case "secrets":
+ case "Secrets": return java.lang.String.class;
case "serviceaccountkey":
case "ServiceAccountKey": return java.lang.String.class;
+ case "subscriptionname":
+ case "SubscriptionName": return java.lang.String.class;
case "usedefaultinstance":
case "UseDefaultInstance": return boolean.class;
default: return null;
@@ -74,8 +90,16 @@ public class GcpVaultConfigurationConfigurer extends org.apache.camel.support.co
case "HashicorpVaultConfiguration": return target.getHashicorpVaultConfiguration();
case "projectid":
case "ProjectId": return target.getProjectId();
+ case "refreshenabled":
+ case "RefreshEnabled": return target.isRefreshEnabled();
+ case "refreshperiod":
+ case "RefreshPeriod": return target.getRefreshPeriod();
+ case "secrets":
+ case "Secrets": return target.getSecrets();
case "serviceaccountkey":
case "ServiceAccountKey": return target.getServiceAccountKey();
+ case "subscriptionname":
+ case "SubscriptionName": return target.getSubscriptionName();
case "usedefaultinstance":
case "UseDefaultInstance": return target.isUseDefaultInstance();
default: return null;
diff --git a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
index 895849bf2e0..244dd57d7c9 100644
--- a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
+++ b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
@@ -218,7 +218,11 @@
{ "name": "camel.vault.azure.tenantId", "description": "The Tenant Id for accessing Azure Key Vault", "sourceType": "org.apache.camel.vault.AzureVaultConfiguration", "type": "string", "javaType": "java.lang.String" },
{ "name": "camel.vault.azure.vaultName", "description": "The vault Name in Azure Key Vault", "sourceType": "org.apache.camel.vault.AzureVaultConfiguration", "type": "string", "javaType": "java.lang.String" },
{ "name": "camel.vault.gcp.projectId", "description": "The GCP Project ID", "sourceType": "org.apache.camel.vault.GcpVaultConfiguration", "type": "string", "javaType": "java.lang.String" },
+ { "name": "camel.vault.gcp.refreshEnabled", "description": "Whether to automatically reload Camel upon secrets being updated in AWS.", "sourceType": "org.apache.camel.vault.GcpVaultConfiguration", "type": "boolean", "javaType": "boolean", "defaultValue": "false" },
+ { "name": "camel.vault.gcp.refreshPeriod", "description": "The period (millis) between checking Google for updated secrets.", "sourceType": "org.apache.camel.vault.GcpVaultConfiguration", "type": "integer", "javaType": "long", "defaultValue": 30000 },
+ { "name": "camel.vault.gcp.secrets", "description": "Specify the secret names (or pattern) to check for updates. Multiple secrets can be separated by comma.", "sourceType": "org.apache.camel.vault.GcpVaultConfiguration", "type": "string", "javaType": "java.lang.String" },
{ "name": "camel.vault.gcp.serviceAccountKey", "description": "The Service Account Key location", "sourceType": "org.apache.camel.vault.GcpVaultConfiguration", "type": "string", "javaType": "java.lang.String" },
+ { "name": "camel.vault.gcp.subscriptionName", "description": "Define the Google Pubsub subscription Name to be used when checking for updates", "sourceType": "org.apache.camel.vault.GcpVaultConfiguration", "type": "string", "javaType": "java.lang.String" },
{ "name": "camel.vault.gcp.useDefaultInstance", "description": "Define if we want to use the GCP Client Default Instance or not", "sourceType": "org.apache.camel.vault.GcpVaultConfiguration", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }
]
}
diff --git a/core/camel-main/src/main/docs/main.adoc b/core/camel-main/src/main/docs/main.adoc
index ece27ae2d5a..f946ead8202 100644
--- a/core/camel-main/src/main/docs/main.adoc
+++ b/core/camel-main/src/main/docs/main.adoc
@@ -223,13 +223,17 @@ The camel.vault.aws supports 7 options, which are listed below.
|===
=== Camel GCP Vault configurations
-The camel.vault.gcp supports 3 options, which are listed below.
+The camel.vault.gcp supports 7 options, which are listed below.
[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.vault.gcp.projectId* | The GCP Project ID | | String
+| *camel.vault.gcp.refreshEnabled* | Whether to automatically reload Camel upon secrets being updated in AWS. | false | boolean
+| *camel.vault.gcp.refreshPeriod* | The period (millis) between checking Google for updated secrets. | 30000 | long
+| *camel.vault.gcp.secrets* | Specify the secret names (or pattern) to check for updates. Multiple secrets can be separated by comma. | | String
| *camel.vault.gcp.serviceAccount{zwsp}Key* | The Service Account Key location | | String
+| *camel.vault.gcp.subscription{zwsp}Name* | Define the Google Pubsub subscription Name to be used when checking for updates | | String
| *camel.vault.gcp.useDefault{zwsp}Instance* | Define if we want to use the GCP Client Default Instance or not | false | boolean
|===