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,