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
 |===