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 2024/09/11 08:24:41 UTC
(camel) 01/03: CAMEL-21186 - AWS Secrets Manager: Support Batch Retrieval for Secrets
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch CAMEL-21186
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 3d4d33b33bc35243372f9b01c5005702de3754cd
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Sep 11 10:08:16 2024 +0200
CAMEL-21186 - AWS Secrets Manager: Support Batch Retrieval for Secrets
Signed-off-by: Andrea Cosentino <an...@gmail.com>
---
.../aws/secretsmanager/aws-secrets-manager.json | 12 +--
.../secretsmanager/SecretsManagerConstants.java | 4 +
.../secretsmanager/SecretsManagerOperations.java | 1 +
.../aws/secretsmanager/SecretsManagerProducer.java | 79 +++++++++++++-----
...sManagerBatchGetSecretProducerLocalstackIT.java | 93 ++++++++++++++++++++++
5 files changed, 165 insertions(+), 24 deletions(-)
diff --git a/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/META-INF/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json b/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/META-INF/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json
index f48b89e7b99..9c7d8c9103c 100644
--- a/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/META-INF/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json
+++ b/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/META-INF/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json
@@ -28,7 +28,7 @@
"binaryPayload": { "index": 0, "kind": "property", "displayName": "Binary Payload", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "Set if the secret is binary or not" },
"configuration": { "index": 1, "kind": "property", "displayName": "Configuration", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "Component configuration" },
"lazyStartProducer": { "index": 2, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail [...]
- "operation": { "index": 3, "kind": "property", "displayName": "Operation", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.aws.secretsmanager.SecretsManagerOperations", "enum": [ "listSecrets", "createSecret", "getSecret", "describeSecret", "deleteSecret", "rotateSecret", "updateSecret", "restoreSecret", "replicateSecretToRegions" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configur [...]
+ "operation": { "index": 3, "kind": "property", "displayName": "Operation", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.aws.secretsmanager.SecretsManagerOperations", "enum": [ "listSecrets", "createSecret", "getSecret", "batchGetSecret", "describeSecret", "deleteSecret", "rotateSecret", "updateSecret", "restoreSecret", "replicateSecretToRegions" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret" [...]
"overrideEndpoint": { "index": 4, "kind": "property", "displayName": "Override Endpoint", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "Set the need for overriding the endpoint. This option needs to be us [...]
"pojoRequest": { "index": 5, "kind": "property", "displayName": "Pojo Request", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "If we want to use a POJO request as body or not" },
"profileCredentialsName": { "index": 6, "kind": "property", "displayName": "Profile Credentials Name", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "If using a profile credentials provider, this parameter will set the p [...]
@@ -55,14 +55,16 @@
"CamelAwsSecretsManagerSecretName": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_NAME" },
"CamelAwsSecretsManagerSecretDescription": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The description of the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_DESCRIPTION" },
"CamelAwsSecretsManagerSecretId": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The ARN or name of the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_ID" },
- "CamelAwsSecretsManagerLambdaRotationFunctionArn": { "index": 5, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The ARN of the Lambda rotation function that can rotate the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#LAMBDA_ROTATION_FUNCTION_ARN" },
- "CamelAwsSecretsManagerSecretVersionId": { "index": 6, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The unique identifier of the version of the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_VERSION_ID" },
- "CamelAwsSecretsManagerSecretReplicationRegions": { "index": 7, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A comma separated list of Regions in which to replicate the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_REPLICATION_REGIONS" }
+ "CamelAwsSecretsManagerSecretIds": { "index": 5, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A comma separated list of the ARN or name of the secrets.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_IDS" },
+ "CamelAwsSecretsManagerLambdaRotationFunctionArn": { "index": 6, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The ARN of the Lambda rotation function that can rotate the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#LAMBDA_ROTATION_FUNCTION_ARN" },
+ "CamelAwsSecretsManagerSecretVersionId": { "index": 7, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The unique identifier of the version of the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_VERSION_ID" },
+ "CamelAwsSecretsManagerSecretVersionIds": { "index": 8, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The unique identifier of the version of the secrets in batch operation.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_VERSION_IDS" },
+ "CamelAwsSecretsManagerSecretReplicationRegions": { "index": 9, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A comma separated list of Regions in which to replicate the secret.", "constantName": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants#SECRET_REPLICATION_REGIONS" }
},
"properties": {
"label": { "index": 0, "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "Logical name" },
"binaryPayload": { "index": 1, "kind": "parameter", "displayName": "Binary Payload", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "Set if the secret is binary or not" },
- "operation": { "index": 2, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.aws.secretsmanager.SecretsManagerOperations", "enum": [ "listSecrets", "createSecret", "getSecret", "describeSecret", "deleteSecret", "rotateSecret", "updateSecret", "restoreSecret", "replicateSecretToRegions" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configu [...]
+ "operation": { "index": 2, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.aws.secretsmanager.SecretsManagerOperations", "enum": [ "listSecrets", "createSecret", "getSecret", "batchGetSecret", "describeSecret", "deleteSecret", "rotateSecret", "updateSecret", "restoreSecret", "replicateSecretToRegions" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret [...]
"overrideEndpoint": { "index": 3, "kind": "parameter", "displayName": "Override Endpoint", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "Set the need for overriding the endpoint. This option needs to be u [...]
"pojoRequest": { "index": 4, "kind": "parameter", "displayName": "Pojo Request", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "If we want to use a POJO request as body or not" },
"profileCredentialsName": { "index": 5, "kind": "parameter", "displayName": "Profile Credentials Name", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "If using a profile credentials provider, this parameter will set the [...]
diff --git a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerConstants.java b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerConstants.java
index ad3d0e5da8c..7862cc90c97 100644
--- a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerConstants.java
+++ b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerConstants.java
@@ -32,10 +32,14 @@ public interface SecretsManagerConstants {
String SECRET_DESCRIPTION = "CamelAwsSecretsManagerSecretDescription";
@Metadata(description = "The ARN or name of the secret.", javaType = "String")
String SECRET_ID = "CamelAwsSecretsManagerSecretId";
+ @Metadata(description = "A comma separated list of the ARN or name of the secrets.", javaType = "String")
+ String SECRET_IDS = "CamelAwsSecretsManagerSecretIds";
@Metadata(description = "The ARN of the Lambda rotation function that can rotate the secret.", javaType = "String")
String LAMBDA_ROTATION_FUNCTION_ARN = "CamelAwsSecretsManagerLambdaRotationFunctionArn";
@Metadata(description = "The unique identifier of the version of the secret.", javaType = "String")
String SECRET_VERSION_ID = "CamelAwsSecretsManagerSecretVersionId";
+ @Metadata(description = "The unique identifier of the version of the secrets in batch operation.", javaType = "String")
+ String SECRET_VERSION_IDS = "CamelAwsSecretsManagerSecretVersionIds";
@Metadata(description = "A comma separated list of Regions in which to replicate the secret.", javaType = "String")
String SECRET_REPLICATION_REGIONS = "CamelAwsSecretsManagerSecretReplicationRegions";
}
diff --git a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerOperations.java b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerOperations.java
index c8bc0284aae..a4c6e51b627 100644
--- a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerOperations.java
+++ b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerOperations.java
@@ -21,6 +21,7 @@ public enum SecretsManagerOperations {
listSecrets,
createSecret,
getSecret,
+ batchGetSecret,
describeSecret,
deleteSecret,
rotateSecret,
diff --git a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducer.java b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducer.java
index 40e42a9d8fe..4e06c57263b 100644
--- a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducer.java
+++ b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducer.java
@@ -16,7 +16,10 @@
*/
package org.apache.camel.component.aws.secretsmanager;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Base64;
+import java.util.List;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
@@ -33,26 +36,8 @@ import org.slf4j.LoggerFactory;
import software.amazon.awssdk.awscore.exception.AwsServiceException;
import software.amazon.awssdk.core.SdkBytes;
import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
-import software.amazon.awssdk.services.secretsmanager.model.CreateSecretRequest;
-import software.amazon.awssdk.services.secretsmanager.model.CreateSecretResponse;
-import software.amazon.awssdk.services.secretsmanager.model.DeleteSecretRequest;
-import software.amazon.awssdk.services.secretsmanager.model.DeleteSecretResponse;
-import software.amazon.awssdk.services.secretsmanager.model.DescribeSecretRequest;
-import software.amazon.awssdk.services.secretsmanager.model.DescribeSecretResponse;
-import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
-import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueResponse;
-import software.amazon.awssdk.services.secretsmanager.model.ListSecretsRequest;
+import software.amazon.awssdk.services.secretsmanager.model.*;
import software.amazon.awssdk.services.secretsmanager.model.ListSecretsRequest.Builder;
-import software.amazon.awssdk.services.secretsmanager.model.ListSecretsResponse;
-import software.amazon.awssdk.services.secretsmanager.model.ReplicaRegionType;
-import software.amazon.awssdk.services.secretsmanager.model.ReplicateSecretToRegionsRequest;
-import software.amazon.awssdk.services.secretsmanager.model.ReplicateSecretToRegionsResponse;
-import software.amazon.awssdk.services.secretsmanager.model.RestoreSecretRequest;
-import software.amazon.awssdk.services.secretsmanager.model.RestoreSecretResponse;
-import software.amazon.awssdk.services.secretsmanager.model.RotateSecretRequest;
-import software.amazon.awssdk.services.secretsmanager.model.RotateSecretResponse;
-import software.amazon.awssdk.services.secretsmanager.model.UpdateSecretRequest;
-import software.amazon.awssdk.services.secretsmanager.model.UpdateSecretResponse;
/**
* A Producer which sends messages to the Amazon Secrets Manager Service SDK v2
@@ -82,6 +67,9 @@ public class SecretsManagerProducer extends DefaultProducer {
case getSecret:
getSecret(getEndpoint().getSecretsManagerClient(), exchange);
break;
+ case batchGetSecret:
+ batchGetSecret(getEndpoint().getSecretsManagerClient(), exchange);
+ break;
case describeSecret:
describeSecret(getEndpoint().getSecretsManagerClient(), exchange);
break;
@@ -407,6 +395,59 @@ public class SecretsManagerProducer extends DefaultProducer {
message.setBody(result);
}
+ private void batchGetSecret(SecretsManagerClient secretsManagerClient, Exchange exchange)
+ throws InvalidPayloadException {
+ BatchGetSecretValueRequest request = null;
+ BatchGetSecretValueResponse result;
+ if (getConfiguration().isPojoRequest()) {
+ request = exchange.getIn().getMandatoryBody(BatchGetSecretValueRequest.class);
+ } else {
+ BatchGetSecretValueRequest.Builder builder = BatchGetSecretValueRequest.builder();
+ if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(SecretsManagerConstants.SECRET_IDS))) {
+ List<String> secretIds
+ = Arrays.asList(
+ exchange.getIn().getHeader(SecretsManagerConstants.SECRET_IDS, String.class).split(","));
+ builder.secretIdList(secretIds);
+ } else {
+ throw new IllegalArgumentException("Secret Ids must be specified");
+ }
+ request = builder.build();
+ }
+ try {
+ result = secretsManagerClient.batchGetSecretValue(request);
+ } catch (AwsServiceException ase) {
+ LOG.trace("Batch Get Secret value command returned the error code {}", ase.awsErrorDetails().errorCode());
+ throw ase;
+ }
+ Message message = getMessageForResponse(exchange);
+ if (getConfiguration().isBinaryPayload()) {
+ List<String> secretsReturned = new ArrayList<String>();
+ if (!result.secretValues().isEmpty()) {
+ for (SecretValueEntry entry : result.secretValues()) {
+ secretsReturned.add(new String(Base64.getDecoder().decode(entry.secretBinary().asByteBuffer()).array()));
+ }
+ }
+ message.setBody(secretsReturned);
+ } else {
+ List<String> secretsReturned = new ArrayList<String>();
+ if (!result.secretValues().isEmpty()) {
+ for (SecretValueEntry entry : result.secretValues()) {
+ secretsReturned.add(entry.secretString());
+ }
+ }
+ message.setBody(secretsReturned);
+ }
+ List<String> versionIds = new ArrayList<String>();
+ if (!result.secretValues().isEmpty()) {
+ for (SecretValueEntry entry : result.secretValues()) {
+ if (ObjectHelper.isNotEmpty(entry.versionId())) {
+ versionIds.add(entry.versionId());
+ }
+ }
+ }
+ exchange.getMessage().setHeader(SecretsManagerConstants.SECRET_VERSION_IDS, versionIds);
+ }
+
public static Message getMessageForResponse(final Exchange exchange) {
return exchange.getMessage();
}
diff --git a/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/SecretsManagerBatchGetSecretProducerLocalstackIT.java b/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/SecretsManagerBatchGetSecretProducerLocalstackIT.java
new file mode 100644
index 00000000000..188b1d4ab23
--- /dev/null
+++ b/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/SecretsManagerBatchGetSecretProducerLocalstackIT.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.aws.secretsmanager.integration;
+
+import java.util.List;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Test;
+import software.amazon.awssdk.services.secretsmanager.model.CreateSecretResponse;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+public class SecretsManagerBatchGetSecretProducerLocalstackIT extends AwsSecretsManagerBaseTest {
+
+ @EndpointInject("mock:result")
+ private MockEndpoint mock;
+
+ @Test
+ public void createSecretTest() {
+
+ mock.expectedMessageCount(1);
+ Exchange sec1 = template.request("direct:createSecret", new Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(SecretsManagerConstants.SECRET_NAME, "TestSecret2");
+ exchange.getIn().setBody("Secret 2");
+ }
+ });
+
+ Exchange sec2 = template.request("direct:createSecret", new Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(SecretsManagerConstants.SECRET_NAME, "TestSecret1");
+ exchange.getIn().setBody("Secret 1");
+ }
+ });
+
+ CreateSecretResponse resultGet1 = (CreateSecretResponse) sec1.getIn().getBody();
+ assertNotNull(resultGet1);
+
+ CreateSecretResponse resultGet2 = (CreateSecretResponse) sec2.getIn().getBody();
+ assertNotNull(resultGet2);
+
+ Exchange exchangeFinal = template.request("direct:batchGetSecret", new Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ String secretsIds = resultGet1.arn() + "," + resultGet2.arn();
+ exchange.getIn().setHeader(SecretsManagerConstants.SECRET_IDS, secretsIds);
+ }
+ });
+
+ List<String> secrets = exchangeFinal.getIn().getBody(List.class);
+ assertEquals(2, secrets.size());
+ assertEquals("Secret 2", secrets.get(0));
+ assertEquals("Secret 1", secrets.get(1));
+ assertEquals(2, exchangeFinal.getMessage().getHeader(SecretsManagerConstants.SECRET_VERSION_IDS, List.class).size());
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() {
+ from("direct:createSecret")
+ .to("aws-secrets-manager://test?operation=createSecret");
+
+ from("direct:batchGetSecret")
+ .to("aws-secrets-manager://test?operation=batchGetSecret")
+ .to("mock:result");
+ }
+ };
+ }
+}