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 2020/01/02 12:34:55 UTC
[camel] 01/05: CAMEL-14348 - Camel-AWS Lambda: Add alias operations,
createAlias operation
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 68494c45144a4aa262ac95f0209348843279ce19
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Thu Jan 2 13:22:12 2020 +0100
CAMEL-14348 - Camel-AWS Lambda: Add alias operations, createAlias operation
---
.../component/aws/lambda/LambdaConstants.java | 3 +++
.../component/aws/lambda/LambdaOperations.java | 1 +
.../camel/component/aws/lambda/LambdaProducer.java | 27 ++++++++++++++++++++++
.../aws/lambda/AmazonLambdaClientMock.java | 6 ++++-
.../component/aws/lambda/LambdaProducerTest.java | 23 ++++++++++++++++++
.../endpoint/dsl/LambdaEndpointBuilderFactory.java | 1 +
6 files changed, 60 insertions(+), 1 deletion(-)
diff --git a/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaConstants.java b/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaConstants.java
index 4eef137..bd038ba 100644
--- a/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaConstants.java
+++ b/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaConstants.java
@@ -51,4 +51,7 @@ public interface LambdaConstants {
String RESOURCE_TAG_KEYS = "CamelAwsLambdaResourceTagKeys";
String VERSION_DESCRIPTION = "CamelAwsLambdaVersionDescription";
String VERSION_REVISION_ID = "CamelAwsLambdaVersionRevisionId";
+ String FUNCTION_VERSION = "CamelAwsLambdaFunctionVersion";
+ String FUNCTION_ALIAS_NAME = "CamelAwsLambdaAliasFunctionName";
+ String FUNCTION_ALIAS_DESCRIPTION = "CamelAwsLambdaAliasFunctionDescription";
}
\ No newline at end of file
diff --git a/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaOperations.java b/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaOperations.java
index c6f9a6f..dfbf340 100644
--- a/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaOperations.java
+++ b/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaOperations.java
@@ -20,6 +20,7 @@ public enum LambdaOperations {
listFunctions,
getFunction,
+ createAlias,
createFunction,
deleteFunction,
invokeFunction,
diff --git a/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java b/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java
index ed90cf1..ed66712 100644
--- a/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java
+++ b/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java
@@ -25,6 +25,8 @@ import java.util.Map;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.lambda.AWSLambda;
+import com.amazonaws.services.lambda.model.CreateAliasRequest;
+import com.amazonaws.services.lambda.model.CreateAliasResult;
import com.amazonaws.services.lambda.model.CreateEventSourceMappingRequest;
import com.amazonaws.services.lambda.model.CreateEventSourceMappingResult;
import com.amazonaws.services.lambda.model.CreateFunctionRequest;
@@ -120,6 +122,9 @@ public class LambdaProducer extends DefaultProducer {
case listVersions:
listVersions(getEndpoint().getAwsLambdaClient(), exchange);
break;
+ case createAlias:
+ createAlias(getEndpoint().getAwsLambdaClient(), exchange);
+ break;
default:
throw new IllegalArgumentException("Unsupported operation");
}
@@ -560,6 +565,28 @@ public class LambdaProducer extends DefaultProducer {
message.setBody(result);
}
+ private void createAlias(AWSLambda lambdaClient, Exchange exchange) {
+ CreateAliasResult result;
+ try {
+ CreateAliasRequest request = new CreateAliasRequest().withFunctionName(getEndpoint().getFunction());
+ String version = exchange.getIn().getHeader(LambdaConstants.FUNCTION_VERSION, String.class);
+ String aliasName = exchange.getIn().getHeader(LambdaConstants.FUNCTION_ALIAS_NAME, String.class);
+ if (ObjectHelper.isEmpty(version) || ObjectHelper.isEmpty(aliasName)) {
+ throw new IllegalArgumentException("Function Version and alias must be specified to create an alias");
+ }
+ if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(LambdaConstants.FUNCTION_ALIAS_DESCRIPTION))) {
+ String aliasDescription = exchange.getIn().getHeader(LambdaConstants.FUNCTION_ALIAS_DESCRIPTION, String.class);
+ request.setDescription(aliasDescription);
+ }
+ result = lambdaClient.createAlias(request);
+ } catch (AmazonServiceException ase) {
+ log.trace("createAlias command returned the error code {}", ase.getErrorCode());
+ throw ase;
+ }
+ Message message = getMessageForResponse(exchange);
+ message.setBody(result);
+ }
+
private LambdaOperations determineOperation(Exchange exchange) {
LambdaOperations operation = exchange.getIn().getHeader(LambdaConstants.OPERATION, LambdaOperations.class);
if (operation == null) {
diff --git a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java
index 145f116..dfcddbe 100644
--- a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java
+++ b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java
@@ -107,7 +107,11 @@ public class AmazonLambdaClientMock extends AbstractAWSLambda {
@Override
public CreateAliasResult createAlias(CreateAliasRequest createAliasRequest) {
- throw new UnsupportedOperationException();
+ CreateAliasResult result = new CreateAliasResult();
+ result.setFunctionVersion("1");
+ result.setName("alias");
+ result.setDescription("an alias");
+ return result;
}
@Override
diff --git a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java
index b4a8a0b..503f86e 100644
--- a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java
+++ b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java
@@ -23,6 +23,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import com.amazonaws.services.lambda.model.CreateAliasResult;
import com.amazonaws.services.lambda.model.CreateEventSourceMappingResult;
import com.amazonaws.services.lambda.model.CreateFunctionResult;
import com.amazonaws.services.lambda.model.DeleteEventSourceMappingResult;
@@ -293,6 +294,26 @@ public class LambdaProducerTest extends CamelTestSupport {
assertEquals("GetHelloWithName", result.getVersions().get(0).getFunctionName());
assertEquals("1", result.getVersions().get(0).getVersion());
}
+
+ @Test
+ public void createAliasTest() throws Exception {
+
+ Exchange exchange = template.send("direct:createAlias", ExchangePattern.InOut, new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(LambdaConstants.FUNCTION_ALIAS_DESCRIPTION, "an alias");
+ exchange.getIn().setHeader(LambdaConstants.FUNCTION_ALIAS_NAME, "alias");
+ exchange.getIn().setHeader(LambdaConstants.FUNCTION_VERSION, "1");
+ }
+ });
+ assertMockEndpointsSatisfied();
+
+ CreateAliasResult result = (CreateAliasResult)exchange.getOut().getBody();
+ assertNotNull(result);
+ assertEquals("an alias", result.getDescription());
+ assertEquals("alias", result.getName());
+ assertEquals("1", result.getFunctionVersion());
+ }
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
@@ -326,6 +347,8 @@ public class LambdaProducerTest extends CamelTestSupport {
from("direct:deleteEventSourceMapping").to("aws-lambda://GetHelloWithName?awsLambdaClient=#awsLambdaClient&operation=deleteEventSourceMapping").to("mock:result");
from("direct:listEventSourceMapping").to("aws-lambda://GetHelloWithName?awsLambdaClient=#awsLambdaClient&operation=listEventSourceMapping").to("mock:result");
+
+ from("direct:createAlias").to("aws-lambda://GetHelloWithName?awsLambdaClient=#awsLambdaClient&operation=createAlias").to("mock:result");
}
};
}
diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/LambdaEndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/LambdaEndpointBuilderFactory.java
index daea93f..b647323 100644
--- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/LambdaEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/LambdaEndpointBuilderFactory.java
@@ -293,6 +293,7 @@ public interface LambdaEndpointBuilderFactory {
enum LambdaOperations {
listFunctions,
getFunction,
+ createAlias,
createFunction,
deleteFunction,
invokeFunction,