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 2015/06/07 12:16:06 UTC

camel git commit: CAMEL-8840 Camel-AWS EC2: Add Security Groups support when creating and running instances

Repository: camel
Updated Branches:
  refs/heads/master 59b0a721d -> 39f04d446


CAMEL-8840 Camel-AWS EC2: Add Security Groups support when creating and running instances


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/39f04d44
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/39f04d44
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/39f04d44

Branch: refs/heads/master
Commit: 39f04d4463ef5b36dc55fc04153036a879b9fb63
Parents: 59b0a72
Author: Andrea Cosentino <an...@gmail.com>
Authored: Sun Jun 7 12:12:44 2015 +0200
Committer: Andrea Cosentino <an...@gmail.com>
Committed: Sun Jun 7 12:12:44 2015 +0200

----------------------------------------------------------------------
 .../camel/component/aws/ec2/EC2Constants.java   | 19 +++++++------
 .../camel/component/aws/ec2/EC2Producer.java    |  6 ++++
 .../component/aws/ec2/AmazonEC2ClientMock.java  | 13 +++++++++
 .../component/aws/ec2/EC2ProducerTest.java      | 30 ++++++++++++++++++++
 .../EC2ComponentIntegrationTest.java            | 17 +++++++++++
 5 files changed, 76 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/39f04d44/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Constants.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Constants.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Constants.java
index a929e44..611e513 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Constants.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Constants.java
@@ -22,13 +22,14 @@ package org.apache.camel.component.aws.ec2;
  */
 public interface EC2Constants {
 
-    String IMAGE_ID                = "CamelAwsEC2ImageId";
-    String INSTANCE_TYPE           = "CamelAwsEC2InstanceType";
-    String OPERATION               = "CamelAwsEC2Operation";
-    String INSTANCE_MIN_COUNT      = "CamelAwsEC2InstanceMinCount";
-    String INSTANCE_MAX_COUNT      = "CamelAwsEC2InstanceMaxCount";
-    String INSTANCE_MONITORING     = "CamelAwsEC2InstanceMonitoring";
-    String INSTANCE_KERNEL_ID      = "CamelAwsEC2InstanceKernelId";
-    String INSTANCE_EBS_OPTIMIZED  = "CamelAwsEC2InstanceEbsOptimized";
-    String INSTANCES_IDS           = "CamelAwsEC2InstancesIds";
+    String IMAGE_ID                 = "CamelAwsEC2ImageId";
+    String INSTANCE_TYPE            = "CamelAwsEC2InstanceType";
+    String OPERATION                = "CamelAwsEC2Operation";
+    String INSTANCE_MIN_COUNT       = "CamelAwsEC2InstanceMinCount";
+    String INSTANCE_MAX_COUNT       = "CamelAwsEC2InstanceMaxCount";
+    String INSTANCE_MONITORING      = "CamelAwsEC2InstanceMonitoring";
+    String INSTANCE_KERNEL_ID       = "CamelAwsEC2InstanceKernelId";
+    String INSTANCE_EBS_OPTIMIZED   = "CamelAwsEC2InstanceEbsOptimized";
+    String INSTANCE_SECURITY_GROUPS = "CamelAwsEC2InstanceSecurityGroups";
+    String INSTANCES_IDS            = "CamelAwsEC2InstancesIds";
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/39f04d44/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java
index 3e9a0bc..1a0f913 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java
@@ -31,6 +31,7 @@ import com.amazonaws.services.ec2.model.StopInstancesRequest;
 import com.amazonaws.services.ec2.model.StopInstancesResult;
 import com.amazonaws.services.ec2.model.TerminateInstancesRequest;
 import com.amazonaws.services.ec2.model.TerminateInstancesResult;
+import com.amazonaws.services.opsworks.model.StartInstanceRequest;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
@@ -104,6 +105,7 @@ public class EC2Producer extends DefaultProducer {
         boolean monitoring;
         String kernelId;
         boolean ebsOptimized;
+        Collection securityGroups;
         RunInstancesRequest request = new RunInstancesRequest();
         if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(EC2Constants.IMAGE_ID))) {
             ami = exchange.getIn().getHeader(EC2Constants.IMAGE_ID, String.class);
@@ -141,6 +143,10 @@ public class EC2Producer extends DefaultProducer {
             ebsOptimized = exchange.getIn().getHeader(EC2Constants.INSTANCE_EBS_OPTIMIZED, Boolean.class);
             request.withEbsOptimized(ebsOptimized);
         }
+        if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(EC2Constants.INSTANCE_SECURITY_GROUPS))) {
+            securityGroups = exchange.getIn().getHeader(EC2Constants.INSTANCE_SECURITY_GROUPS, Collection.class);
+            request.withSecurityGroups(securityGroups);
+        }
         RunInstancesResult result;
         try {
             result = ec2Client.runInstances(request);

http://git-wip-us.apache.org/repos/asf/camel/blob/39f04d44/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java
index 25c7e27..ec65ad0 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java
@@ -24,6 +24,7 @@ import com.amazonaws.auth.BasicAWSCredentials;
 import com.amazonaws.services.ec2.AmazonEC2Client;
 import com.amazonaws.services.ec2.model.DescribeInstancesRequest;
 import com.amazonaws.services.ec2.model.DescribeInstancesResult;
+import com.amazonaws.services.ec2.model.GroupIdentifier;
 import com.amazonaws.services.ec2.model.Instance;
 import com.amazonaws.services.ec2.model.InstanceState;
 import com.amazonaws.services.ec2.model.InstanceStateChange;
@@ -58,6 +59,18 @@ public class AmazonEC2ClientMock extends AmazonEC2Client {
             ins.setImageId(runInstancesRequest.getImageId());
             ins.setInstanceType(runInstancesRequest.getInstanceType());
             ins.setInstanceId("instance-1");
+            if (runInstancesRequest.getSecurityGroups().contains("secgroup-1") && runInstancesRequest.getSecurityGroups().contains("secgroup-2")) {
+                GroupIdentifier id1 = new GroupIdentifier();
+                id1.setGroupId("id-1");
+                id1.setGroupName("secgroup-1");
+                GroupIdentifier id2 = new GroupIdentifier();
+                id2.setGroupId("id-2");
+                id2.setGroupName("secgroup-2");
+                Collection secGroups = new ArrayList<GroupIdentifier>();
+                secGroups.add(id1);
+                secGroups.add(id2);
+                ins.setSecurityGroups(secGroups);
+            }
             instances.add(ins);
             res.setInstances(instances);
             result.setReservation(res); 

http://git-wip-us.apache.org/repos/asf/camel/blob/39f04d44/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java
index 97f2bb8..794a80d 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java
@@ -65,6 +65,36 @@ public class EC2ProducerTest extends CamelTestSupport {
     }
     
     @Test
+    public void ec2CreateAndRunTestWithSecurityGroups() throws Exception {
+
+        mock.expectedMessageCount(1);
+        Exchange exchange = template.request("direct:createAndRun", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(EC2Constants.OPERATION, EC2Operations.createAndRunInstances);
+                exchange.getIn().setHeader(EC2Constants.IMAGE_ID, "test-1");
+                exchange.getIn().setHeader(EC2Constants.INSTANCE_TYPE, InstanceType.T2Micro);
+                exchange.getIn().setHeader(EC2Constants.INSTANCE_MIN_COUNT, 1);
+                exchange.getIn().setHeader(EC2Constants.INSTANCE_MAX_COUNT, 1);
+                Collection<String> secGroups = new ArrayList<String>();
+                secGroups.add("secgroup-1");
+                secGroups.add("secgroup-2");
+                exchange.getIn().setHeader(EC2Constants.INSTANCE_SECURITY_GROUPS, secGroups);
+            }
+        });
+        
+        assertMockEndpointsSatisfied();
+        
+        RunInstancesResult resultGet = (RunInstancesResult) exchange.getIn().getBody();
+        assertEquals(resultGet.getReservation().getInstances().get(0).getImageId(), "test-1");
+        assertEquals(resultGet.getReservation().getInstances().get(0).getInstanceType(), InstanceType.T2Micro.toString());
+        assertEquals(resultGet.getReservation().getInstances().get(0).getInstanceId(), "instance-1");
+        assertEquals(resultGet.getReservation().getInstances().get(0).getSecurityGroups().size(), 2);
+        assertEquals(resultGet.getReservation().getInstances().get(0).getSecurityGroups().get(0).getGroupId(), "id-1");
+        assertEquals(resultGet.getReservation().getInstances().get(0).getSecurityGroups().get(1).getGroupId(), "id-2");
+    }
+    
+    @Test
     public void ec2CreateAndRunKoTest() throws Exception {
 
         mock.expectedMessageCount(0);

http://git-wip-us.apache.org/repos/asf/camel/blob/39f04d44/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/integration/EC2ComponentIntegrationTest.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/integration/EC2ComponentIntegrationTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/integration/EC2ComponentIntegrationTest.java
index 79feb55..56cf606 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/integration/EC2ComponentIntegrationTest.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/integration/EC2ComponentIntegrationTest.java
@@ -46,6 +46,23 @@ public class EC2ComponentIntegrationTest extends CamelTestSupport {
     }
     
     @Test
+    public void createAndRunInstancesWithSecurityGroupsTest() {
+        
+        template.send("direct:createAndRun", new Processor() {
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(EC2Constants.IMAGE_ID, "ami-fd65ba94");
+                exchange.getIn().setHeader(EC2Constants.INSTANCE_TYPE, InstanceType.T2Micro);
+                exchange.getIn().setHeader(EC2Constants.INSTANCE_MIN_COUNT, 1); 
+                exchange.getIn().setHeader(EC2Constants.INSTANCE_MAX_COUNT, 1);  
+                Collection<String> secGroups = new ArrayList<String>();
+                secGroups.add("secgroup-1");
+                secGroups.add("secgroup-2");
+                exchange.getIn().setHeader(EC2Constants.INSTANCE_SECURITY_GROUPS, secGroups);
+            }
+        });
+    }
+    
+    @Test
     public void stopInstances() {
         
         template.send("direct:stop", new Processor() {