This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch CAMEL-21021 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 6d4be79c8ac538096fecbe86a9870e7acfd1bac6 Author: Andrea Cosentino <[email protected]> AuthorDate: Mon Jul 29 12:25:36 2024 +0200 CAMEL-21021 - Camel-AWS-Secrets-Manager: Give the ability of refreshing the context on Secrets update by using Eventbridge service instead of pure Cloudtrail Signed-off-by: Andrea Cosentino <[email protected]> --- .../main/camel-main-configuration-metadata.json | 2 + .../camel-aws/camel-aws-secrets-manager/pom.xml | 5 + .../vault/CloudTrailReloadTriggerTask.java | 195 ++++++++++++++++----- .../apache/camel/vault/AwsVaultConfiguration.java | 12 +- .../main/AwsVaultConfigurationConfigurer.java | 12 +- .../AwsVaultConfigurationPropertiesConfigurer.java | 12 +- .../camel-main-configuration-metadata.json | 2 +- core/camel-main/src/main/docs/main.adoc | 2 +- .../main/AwsVaultConfigurationProperties.java | 6 +- .../java/org/apache/camel/main/MainVaultTest.java | 4 +- 10 files changed, 181 insertions(+), 71 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 e917f1a6269..70262ec7595 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 @@ -306,6 +306,8 @@ { "name": "camel.vault.aws.region", "description": "The AWS region", "sourceType": "org.apache.camel.vault.AwsVaultConfiguration", "type": "string", "javaType": "java.lang.String" }, { "name": "camel.vault.aws.secretKey", "description": "The AWS secret key", "sourceType": "org.apache.camel.vault.AwsVaultConfiguration", "type": "string", "javaType": "java.lang.String" }, { "name": "camel.vault.aws.secrets", "description": "Specify the secret names (or pattern) to check for updates. Multiple secrets can be separated by comma.", "sourceType": "org.apache.camel.vault.AwsVaultConfiguration", "type": "string", "javaType": "java.lang.String" }, + { "name": "camel.vault.aws.sqsQueueUrl", "description": "In case of usage of SQS notification this field will specified the Queue URL to use", "sourceType": "org.apache.camel.vault.AwsVaultConfiguration", "type": "string", "javaType": "java.lang.String" }, + { "name": "camel.vault.aws.useSqsNotification", "description": "Whether to use AWS SQS for secrets updates notification, this will require setting up Eventbridge\/Cloudtrail\/SQS communication", "sourceType": "org.apache.camel.vault.AwsVaultConfiguration", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, { "name": "camel.vault.azure.azureIdentityEnabled", "description": "Whether the Azure Identity Authentication should be used or not.", "sourceType": "org.apache.camel.vault.AzureVaultConfiguration", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, { "name": "camel.vault.azure.blobAccessKey", "description": "The Eventhubs Blob Access Key for CheckpointStore purpose", "sourceType": "org.apache.camel.vault.AzureVaultConfiguration", "type": "string", "javaType": "java.lang.String" }, { "name": "camel.vault.azure.blobAccountName", "description": "The Eventhubs Blob Account Name for CheckpointStore purpose", "sourceType": "org.apache.camel.vault.AzureVaultConfiguration", "type": "string", "javaType": "java.lang.String" }, diff --git a/components/camel-aws/camel-aws-secrets-manager/pom.xml b/components/camel-aws/camel-aws-secrets-manager/pom.xml index 0434ae80ebf..3642b67f0a3 100644 --- a/components/camel-aws/camel-aws-secrets-manager/pom.xml +++ b/components/camel-aws/camel-aws-secrets-manager/pom.xml @@ -56,6 +56,11 @@ <artifactId>cloudtrail</artifactId> <version>${aws-java-sdk2-version}</version> </dependency> + <dependency> + <groupId>software.amazon.awssdk</groupId> + <artifactId>sqs</artifactId> + <version>${aws-java-sdk2-version}</version> + </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>apache-client</artifactId> diff --git a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/vault/CloudTrailReloadTriggerTask.java b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/vault/CloudTrailReloadTriggerTask.java index 3a810c218a9..a1412c09b18 100644 --- a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/vault/CloudTrailReloadTriggerTask.java +++ b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/vault/CloudTrailReloadTriggerTask.java @@ -24,6 +24,9 @@ import java.util.List; import java.util.Map; import java.util.Set; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.camel.CamelContext; import org.apache.camel.CamelContextAware; import org.apache.camel.RuntimeCamelException; @@ -50,6 +53,13 @@ import software.amazon.awssdk.services.cloudtrail.model.LookupAttributeKey; import software.amazon.awssdk.services.cloudtrail.model.LookupEventsRequest; import software.amazon.awssdk.services.cloudtrail.model.LookupEventsResponse; import software.amazon.awssdk.services.cloudtrail.model.Resource; +import software.amazon.awssdk.services.sqs.SqsClient; +import software.amazon.awssdk.services.sqs.SqsClientBuilder; +import software.amazon.awssdk.services.sqs.model.DeleteMessageRequest; +import software.amazon.awssdk.services.sqs.model.Message; +import software.amazon.awssdk.services.sqs.model.QueueDoesNotExistException; +import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest; +import software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse; /** * Period task which checks if AWS secrets has been updated and can trigger Camel to be reloaded. @@ -69,6 +79,12 @@ public class CloudTrailReloadTriggerTask extends ServiceSupport implements Camel private static final String CAMEL_AWS_VAULT_PROFILE_NAME_ENV = "CAMEL_AWS_VAULT_PROFILE_NAME"; + private static final String CAMEL_AWS_VAULT_SQS_QUEUE_URL_ENV + = "CAMEL_AWS_VAULT_SQS_QUEUE_URL"; + + private static final String CAMEL_AWS_VAULT_USE_SQS_NOTIFICATION_ENV + = "CAMEL_AWS_VAULT_USE_SQS_NOTIFICATION"; + private static final Logger LOG = LoggerFactory.getLogger(CloudTrailReloadTriggerTask.class); private static final String SECRETSMANAGER_AMAZONAWS_COM = "secretsmanager.amazonaws.com"; @@ -78,11 +94,14 @@ public class CloudTrailReloadTriggerTask extends ServiceSupport implements Camel private boolean reloadEnabled = true; private String secrets; private CloudTrailClient cloudTrailClient; + private SqsClient sqsClient; private SecretsManagerPropertiesFunction propertiesFunction; private volatile Instant lastTime; private volatile Instant lastCheckTime; private volatile Instant lastReloadTime; private final Map<String, Instant> updates = new HashMap<>(); + private boolean useSqsNotification; + private String queueUrl; public CloudTrailReloadTriggerTask() { } @@ -153,7 +172,10 @@ public class CloudTrailReloadTriggerTask extends ServiceSupport implements Camel = Boolean.parseBoolean(System.getenv(CAMEL_AWS_VAULT_USE_DEFAULT_CREDENTIALS_PROVIDER_ENV)); boolean useProfileCredentialsProvider = Boolean.parseBoolean(System.getenv(CAMEL_AWS_VAULT_USE_PROFILE_CREDENTIALS_PROVIDER_ENV)); + useSqsNotification + = Boolean.parseBoolean(System.getenv(CAMEL_AWS_VAULT_USE_SQS_NOTIFICATION_ENV)); String profileName = System.getenv(CAMEL_AWS_VAULT_PROFILE_NAME_ENV); + queueUrl = System.getenv(CAMEL_AWS_VAULT_SQS_QUEUE_URL_ENV); if (ObjectHelper.isEmpty(accessKey) && ObjectHelper.isEmpty(secretKey) && ObjectHelper.isEmpty(region)) { AwsVaultConfiguration awsVaultConfiguration = getCamelContext().getVaultConfiguration().aws(); if (ObjectHelper.isNotEmpty(awsVaultConfiguration)) { @@ -163,26 +185,50 @@ public class CloudTrailReloadTriggerTask extends ServiceSupport implements Camel useDefaultCredentialsProvider = awsVaultConfiguration.isDefaultCredentialsProvider(); useProfileCredentialsProvider = awsVaultConfiguration.isProfileCredentialsProvider(); profileName = awsVaultConfiguration.getProfileName(); + useSqsNotification = awsVaultConfiguration.isUseSqsNotification(); + queueUrl = awsVaultConfiguration.getSqsQueueUrl(); } } - if (ObjectHelper.isNotEmpty(accessKey) && ObjectHelper.isNotEmpty(secretKey) && ObjectHelper.isNotEmpty(region)) { - CloudTrailClientBuilder clientBuilder = CloudTrailClient.builder(); - AwsBasicCredentials cred = AwsBasicCredentials.create(accessKey, secretKey); - clientBuilder = clientBuilder.credentialsProvider(StaticCredentialsProvider.create(cred)); - clientBuilder.region(Region.of(region)); - cloudTrailClient = clientBuilder.build(); - } else if (useDefaultCredentialsProvider && ObjectHelper.isNotEmpty(region)) { - CloudTrailClientBuilder clientBuilder = CloudTrailClient.builder(); - clientBuilder.region(Region.of(region)); - cloudTrailClient = clientBuilder.build(); - } else if (useProfileCredentialsProvider && ObjectHelper.isNotEmpty(profileName)) { - CloudTrailClientBuilder clientBuilder = CloudTrailClient.builder(); - clientBuilder.credentialsProvider(ProfileCredentialsProvider.create(profileName)); - clientBuilder.region(Region.of(region)); - cloudTrailClient = clientBuilder.build(); + if (!useSqsNotification) { + if (ObjectHelper.isNotEmpty(accessKey) && ObjectHelper.isNotEmpty(secretKey) && ObjectHelper.isNotEmpty(region)) { + CloudTrailClientBuilder clientBuilder = CloudTrailClient.builder(); + AwsBasicCredentials cred = AwsBasicCredentials.create(accessKey, secretKey); + clientBuilder = clientBuilder.credentialsProvider(StaticCredentialsProvider.create(cred)); + clientBuilder.region(Region.of(region)); + cloudTrailClient = clientBuilder.build(); + } else if (useDefaultCredentialsProvider && ObjectHelper.isNotEmpty(region)) { + CloudTrailClientBuilder clientBuilder = CloudTrailClient.builder(); + clientBuilder.region(Region.of(region)); + cloudTrailClient = clientBuilder.build(); + } else if (useProfileCredentialsProvider && ObjectHelper.isNotEmpty(profileName)) { + CloudTrailClientBuilder clientBuilder = CloudTrailClient.builder(); + clientBuilder.credentialsProvider(ProfileCredentialsProvider.create(profileName)); + clientBuilder.region(Region.of(region)); + cloudTrailClient = clientBuilder.build(); + } else { + throw new RuntimeCamelException( + "Using the AWS Secrets Refresh Task requires setting AWS credentials as application properties or environment variables"); + } } else { - throw new RuntimeCamelException( - "Using the AWS Secrets Refresh Task requires setting AWS credentials as application properties or environment variables"); + if (ObjectHelper.isNotEmpty(accessKey) && ObjectHelper.isNotEmpty(secretKey) && ObjectHelper.isNotEmpty(region)) { + SqsClientBuilder clientBuilder = SqsClient.builder(); + AwsBasicCredentials cred = AwsBasicCredentials.create(accessKey, secretKey); + clientBuilder = clientBuilder.credentialsProvider(StaticCredentialsProvider.create(cred)); + clientBuilder.region(Region.of(region)); + sqsClient = clientBuilder.build(); + } else if (useDefaultCredentialsProvider && ObjectHelper.isNotEmpty(region)) { + SqsClientBuilder clientBuilder = SqsClient.builder(); + clientBuilder.region(Region.of(region)); + sqsClient = clientBuilder.build(); + } else if (useProfileCredentialsProvider && ObjectHelper.isNotEmpty(profileName)) { + SqsClientBuilder clientBuilder = SqsClient.builder(); + clientBuilder.credentialsProvider(ProfileCredentialsProvider.create(profileName)); + clientBuilder.region(Region.of(region)); + sqsClient = clientBuilder.build(); + } else { + throw new RuntimeCamelException( + "Using the AWS Secrets Refresh Task requires setting AWS credentials as application properties or environment variables"); + } } } @@ -199,6 +245,15 @@ public class CloudTrailReloadTriggerTask extends ServiceSupport implements Camel cloudTrailClient = null; } + if (sqsClient != null) { + try { + sqsClient.close(); + } catch (Exception e) { + // ignore + } + sqsClient = null; + } + updates.clear(); } @@ -207,46 +262,94 @@ public class CloudTrailReloadTriggerTask extends ServiceSupport implements Camel lastCheckTime = Instant.now(); boolean triggerReloading = false; - try { - LookupEventsRequest.Builder eventsRequestBuilder = LookupEventsRequest.builder() - .maxResults(100).lookupAttributes(LookupAttribute.builder().attributeKey(LookupAttributeKey.EVENT_SOURCE) - .attributeValue(SECRETSMANAGER_AMAZONAWS_COM).build()); + if (!useSqsNotification) { - if (lastTime != null) { - eventsRequestBuilder.startTime(lastTime.plusMillis(1000)); - } + try { + LookupEventsRequest.Builder eventsRequestBuilder = LookupEventsRequest.builder() + .maxResults(100) + .lookupAttributes(LookupAttribute.builder().attributeKey(LookupAttributeKey.EVENT_SOURCE) + .attributeValue(SECRETSMANAGER_AMAZONAWS_COM).build()); - LookupEventsRequest lookupEventsRequest = eventsRequestBuilder.build(); + if (lastTime != null) { + eventsRequestBuilder.startTime(lastTime.plusMillis(1000)); + } - LookupEventsResponse response = cloudTrailClient.lookupEvents(lookupEventsRequest); - List<Event> events = response.events(); + LookupEventsRequest lookupEventsRequest = eventsRequestBuilder.build(); - if (!events.isEmpty()) { - lastTime = events.get(0).eventTime(); - } + LookupEventsResponse response = cloudTrailClient.lookupEvents(lookupEventsRequest); + List<Event> events = response.events(); - LOG.debug("Found {} events", events.size()); - for (Event event : events) { - if (event.eventSource().equalsIgnoreCase(SECRETSMANAGER_AMAZONAWS_COM)) { - if (event.eventName().equalsIgnoreCase(SECRETSMANAGER_UPDATE_EVENT)) { - List<Resource> a = event.resources(); - for (Resource res : a) { - String name = res.resourceName(); - if (matchSecret(name)) { - updates.put(name, event.eventTime()); - if (isReloadEnabled()) { - LOG.info("Update for AWS secret: {} detected, triggering CamelContext reload", name); - triggerReloading = true; + if (!events.isEmpty()) { + lastTime = events.get(0).eventTime(); + } + + LOG.debug("Found {} events", events.size()); + for (Event event : events) { + if (event.eventSource().equalsIgnoreCase(SECRETSMANAGER_AMAZONAWS_COM)) { + if (event.eventName().equalsIgnoreCase(SECRETSMANAGER_UPDATE_EVENT)) { + List<Resource> a = event.resources(); + for (Resource res : a) { + String name = res.resourceName(); + if (matchSecret(name)) { + updates.put(name, event.eventTime()); + if (isReloadEnabled()) { + LOG.info("Update for AWS secret: {} detected, triggering CamelContext reload", name); + triggerReloading = true; + } + break; } - break; } } } } + } catch (Exception e) { + LOG.warn( + "Error during AWS Secrets Refresh Task due to {}. This exception is ignored. Will try again on next run.", + e.getMessage(), e); + } + } else { + ReceiveMessageRequest.Builder request = ReceiveMessageRequest.builder().queueUrl(queueUrl); + + LOG.trace("Receiving messages with request [{}]...", request); + + ReceiveMessageResponse messageResult = null; + ReceiveMessageRequest requestBuild = request.build(); + try { + messageResult = sqsClient.receiveMessage(requestBuild); + } catch (QueueDoesNotExistException e) { + LOG.info("Queue does not exist."); + } + + for (Message message : messageResult.messages()) { + ObjectMapper mapper = new ObjectMapper(); + JsonNode event = null; + try { + event = mapper.readTree(message.body()); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + if (event.get("detail").get("eventSource").asText().equalsIgnoreCase(SECRETSMANAGER_AMAZONAWS_COM)) { + if (event.get("detail").get("eventName").asText().equalsIgnoreCase(SECRETSMANAGER_UPDATE_EVENT)) { + String name = event.get("detail").get("requestParameters").get("secretId").asText(); + if (matchSecret(name)) { + updates.put(name, Instant.parse(event.get("detail").get("eventTime").asText())); + if (isReloadEnabled()) { + LOG.info("Update for AWS secret: {} detected, triggering CamelContext reload", name); + triggerReloading = true; + message.receiptHandle(); + DeleteMessageRequest.Builder deleteRequest + = DeleteMessageRequest.builder().queueUrl(queueUrl) + .receiptHandle(message.receiptHandle()); + + LOG.trace("Deleting message with receipt handle {}...", message.receiptHandle()); + + sqsClient.deleteMessage(deleteRequest.build()); + } + break; + } + } + } } - } catch (Exception e) { - LOG.warn("Error during AWS Secrets Refresh Task due to {}. This exception is ignored. Will try again on next run.", - e.getMessage(), e); } if (triggerReloading) { diff --git a/core/camel-api/src/main/java/org/apache/camel/vault/AwsVaultConfiguration.java b/core/camel-api/src/main/java/org/apache/camel/vault/AwsVaultConfiguration.java index 72ed6b656b7..0423e106ade 100644 --- a/core/camel-api/src/main/java/org/apache/camel/vault/AwsVaultConfiguration.java +++ b/core/camel-api/src/main/java/org/apache/camel/vault/AwsVaultConfiguration.java @@ -44,7 +44,7 @@ public class AwsVaultConfiguration extends VaultConfiguration { @Metadata private boolean useSqsNotification; @Metadata - private String sqsQueueName; + private String sqsQueueUrl; public String getAccessKey() { return accessKey; @@ -157,14 +157,14 @@ public class AwsVaultConfiguration extends VaultConfiguration { this.useSqsNotification = useSqsNotification; } - public String getSqsQueueName() { - return sqsQueueName; + public String getSqsQueueUrl() { + return sqsQueueUrl; } /** - * In case of usage of SQS notification this field will specified the Queue name to use + * In case of usage of SQS notification this field will specified the Queue URL to use */ - public void setSqsQueueName(String sqsQueueName) { - this.sqsQueueName = sqsQueueName; + public void setSqsQueueUrl(String sqsQueueUrl) { + this.sqsQueueUrl = sqsQueueUrl; } } diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/AwsVaultConfigurationConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/AwsVaultConfigurationConfigurer.java index 12636eefeb5..0ce5b71f0bd 100644 --- a/core/camel-main/src/generated/java/org/apache/camel/main/AwsVaultConfigurationConfigurer.java +++ b/core/camel-main/src/generated/java/org/apache/camel/main/AwsVaultConfigurationConfigurer.java @@ -47,8 +47,8 @@ public class AwsVaultConfigurationConfigurer extends org.apache.camel.support.co case "secretkey": case "secretKey": target.setSecretKey(property(camelContext, java.lang.String.class, value)); return true; case "secrets": target.setSecrets(property(camelContext, java.lang.String.class, value)); return true; - case "sqsqueuename": - case "sqsQueueName": target.setSqsQueueName(property(camelContext, java.lang.String.class, value)); return true; + case "sqsqueueurl": + case "sqsQueueUrl": target.setSqsQueueUrl(property(camelContext, java.lang.String.class, value)); return true; case "usesqsnotification": case "useSqsNotification": target.setUseSqsNotification(property(camelContext, boolean.class, value)); return true; default: return false; @@ -82,8 +82,8 @@ public class AwsVaultConfigurationConfigurer extends org.apache.camel.support.co case "secretkey": case "secretKey": return java.lang.String.class; case "secrets": return java.lang.String.class; - case "sqsqueuename": - case "sqsQueueName": return java.lang.String.class; + case "sqsqueueurl": + case "sqsQueueUrl": return java.lang.String.class; case "usesqsnotification": case "useSqsNotification": return boolean.class; default: return null; @@ -118,8 +118,8 @@ public class AwsVaultConfigurationConfigurer extends org.apache.camel.support.co case "secretkey": case "secretKey": return target.getSecretKey(); case "secrets": return target.getSecrets(); - case "sqsqueuename": - case "sqsQueueName": return target.getSqsQueueName(); + case "sqsqueueurl": + case "sqsQueueUrl": return target.getSqsQueueUrl(); case "usesqsnotification": case "useSqsNotification": return target.isUseSqsNotification(); default: return null; diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/AwsVaultConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/AwsVaultConfigurationPropertiesConfigurer.java index a61c7726914..01dca63e5c4 100644 --- a/core/camel-main/src/generated/java/org/apache/camel/main/AwsVaultConfigurationPropertiesConfigurer.java +++ b/core/camel-main/src/generated/java/org/apache/camel/main/AwsVaultConfigurationPropertiesConfigurer.java @@ -47,8 +47,8 @@ public class AwsVaultConfigurationPropertiesConfigurer extends org.apache.camel. case "secretkey": case "secretKey": target.setSecretKey(property(camelContext, java.lang.String.class, value)); return true; case "secrets": target.setSecrets(property(camelContext, java.lang.String.class, value)); return true; - case "sqsqueuename": - case "sqsQueueName": target.setSqsQueueName(property(camelContext, java.lang.String.class, value)); return true; + case "sqsqueueurl": + case "sqsQueueUrl": target.setSqsQueueUrl(property(camelContext, java.lang.String.class, value)); return true; case "usesqsnotification": case "useSqsNotification": target.setUseSqsNotification(property(camelContext, boolean.class, value)); return true; default: return false; @@ -82,8 +82,8 @@ public class AwsVaultConfigurationPropertiesConfigurer extends org.apache.camel. case "secretkey": case "secretKey": return java.lang.String.class; case "secrets": return java.lang.String.class; - case "sqsqueuename": - case "sqsQueueName": return java.lang.String.class; + case "sqsqueueurl": + case "sqsQueueUrl": return java.lang.String.class; case "usesqsnotification": case "useSqsNotification": return boolean.class; default: return null; @@ -118,8 +118,8 @@ public class AwsVaultConfigurationPropertiesConfigurer extends org.apache.camel. case "secretkey": case "secretKey": return target.getSecretKey(); case "secrets": return target.getSecrets(); - case "sqsqueuename": - case "sqsQueueName": return target.getSqsQueueName(); + case "sqsqueueurl": + case "sqsQueueUrl": return target.getSqsQueueUrl(); case "usesqsnotification": case "useSqsNotification": return target.isUseSqsNotification(); 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 e313418d297..70262ec7595 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 @@ -306,7 +306,7 @@ { "name": "camel.vault.aws.region", "description": "The AWS region", "sourceType": "org.apache.camel.vault.AwsVaultConfiguration", "type": "string", "javaType": "java.lang.String" }, { "name": "camel.vault.aws.secretKey", "description": "The AWS secret key", "sourceType": "org.apache.camel.vault.AwsVaultConfiguration", "type": "string", "javaType": "java.lang.String" }, { "name": "camel.vault.aws.secrets", "description": "Specify the secret names (or pattern) to check for updates. Multiple secrets can be separated by comma.", "sourceType": "org.apache.camel.vault.AwsVaultConfiguration", "type": "string", "javaType": "java.lang.String" }, - { "name": "camel.vault.aws.sqsQueueName", "description": "In case of usage of SQS notification this field will specified the Queue name to use", "sourceType": "org.apache.camel.vault.AwsVaultConfiguration", "type": "string", "javaType": "java.lang.String" }, + { "name": "camel.vault.aws.sqsQueueUrl", "description": "In case of usage of SQS notification this field will specified the Queue URL to use", "sourceType": "org.apache.camel.vault.AwsVaultConfiguration", "type": "string", "javaType": "java.lang.String" }, { "name": "camel.vault.aws.useSqsNotification", "description": "Whether to use AWS SQS for secrets updates notification, this will require setting up Eventbridge\/Cloudtrail\/SQS communication", "sourceType": "org.apache.camel.vault.AwsVaultConfiguration", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, { "name": "camel.vault.azure.azureIdentityEnabled", "description": "Whether the Azure Identity Authentication should be used or not.", "sourceType": "org.apache.camel.vault.AzureVaultConfiguration", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, { "name": "camel.vault.azure.blobAccessKey", "description": "The Eventhubs Blob Access Key for CheckpointStore purpose", "sourceType": "org.apache.camel.vault.AzureVaultConfiguration", "type": "string", "javaType": "java.lang.String" }, diff --git a/core/camel-main/src/main/docs/main.adoc b/core/camel-main/src/main/docs/main.adoc index 1cbf2c55858..7a6d6ae1b19 100644 --- a/core/camel-main/src/main/docs/main.adoc +++ b/core/camel-main/src/main/docs/main.adoc @@ -339,7 +339,7 @@ The camel.vault.aws supports 11 options, which are listed below. | *camel.vault.aws.region* | The AWS region | | String | *camel.vault.aws.secretKey* | The AWS secret key | | String | *camel.vault.aws.secrets* | Specify the secret names (or pattern) to check for updates. Multiple secrets can be separated by comma. | | String -| *camel.vault.aws.sqsQueueName* | In case of usage of SQS notification this field will specified the Queue name to use | | String +| *camel.vault.aws.sqsQueueUrl* | In case of usage of SQS notification this field will specified the Queue URL to use | | String | *camel.vault.aws.useSqs{zwsp}Notification* | Whether to use AWS SQS for secrets updates notification, this will require setting up Eventbridge/Cloudtrail/SQS communication | false | boolean |=== diff --git a/core/camel-main/src/main/java/org/apache/camel/main/AwsVaultConfigurationProperties.java b/core/camel-main/src/main/java/org/apache/camel/main/AwsVaultConfigurationProperties.java index bce45e8d3a9..6684163502a 100644 --- a/core/camel-main/src/main/java/org/apache/camel/main/AwsVaultConfigurationProperties.java +++ b/core/camel-main/src/main/java/org/apache/camel/main/AwsVaultConfigurationProperties.java @@ -131,10 +131,10 @@ public class AwsVaultConfigurationProperties extends AwsVaultConfiguration imple } /** - * In case of usage of SQS notification this field will specified the Queue name to use + * In case of usage of SQS notification this field will specified the Queue URL to use */ - public AwsVaultConfigurationProperties withSqsQueueName(String sqsQueueName) { - setSqsQueueName(sqsQueueName); + public AwsVaultConfigurationProperties withSqsQueueName(String sqsQueueUrl) { + setSqsQueueUrl(sqsQueueUrl); return this; } diff --git a/core/camel-main/src/test/java/org/apache/camel/main/MainVaultTest.java b/core/camel-main/src/test/java/org/apache/camel/main/MainVaultTest.java index d70347ecf1e..92319681a21 100644 --- a/core/camel-main/src/test/java/org/apache/camel/main/MainVaultTest.java +++ b/core/camel-main/src/test/java/org/apache/camel/main/MainVaultTest.java @@ -82,7 +82,7 @@ public class MainVaultTest { main.addInitialProperty("camel.vault.aws.defaultCredentialsProvider", "false"); main.addInitialProperty("camel.vault.aws.profileCredentialsProvider", "true"); main.addInitialProperty("camel.vault.aws.profileName", "jack"); - main.addInitialProperty("camel.vault.aws.sqsQueueName", "sqs-2"); + main.addInitialProperty("camel.vault.aws.sqsQueueName", "http://sqs-2"); main.addInitialProperty("camel.vault.aws.useSqsNotification", "true"); main.start(); @@ -105,7 +105,7 @@ public class MainVaultTest { Assertions.assertFalse(cfg.isDefaultCredentialsProvider()); Assertions.assertTrue(cfg.isProfileCredentialsProvider()); Assertions.assertEquals("jack", cfg.getProfileName()); - Assertions.assertEquals("sqs-2", cfg.getSqsQueueName()); + Assertions.assertEquals("http://sqs-2", cfg.getSqsQueueUrl()); Assertions.assertTrue(cfg.isUseSqsNotification()); main.stop();
