Corrected creating security group logic.

Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/1a2097ee
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/1a2097ee
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/1a2097ee

Branch: refs/heads/gsoc-projects-2015
Commit: 1a2097ee6c0deb8b4093d41ca35b02b0b3905e7e
Parents: e9eeaa9
Author: swapnilpatilRajaram <[email protected]>
Authored: Mon Aug 3 12:42:01 2015 +0000
Committer: swapnilpatilRajaram <[email protected]>
Committed: Mon Aug 3 12:42:01 2015 +0000

----------------------------------------------------------------------
 .../apache/stratos/aws/extension/AWSHelper.java | 58 ++++++++++++--
 .../stratos/aws/extension/AWSLoadBalancer.java  | 81 +++++++++++---------
 .../apache/stratos/aws/extension/Constants.java |  4 +-
 3 files changed, 97 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/1a2097ee/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
 
b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
index 7c4f00a..164625f 100644
--- 
a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
+++ 
b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
@@ -44,7 +44,10 @@ import com.amazonaws.services.ec2.AmazonEC2Client;
 import com.amazonaws.services.ec2.model.AuthorizeSecurityGroupIngressRequest;
 import com.amazonaws.services.ec2.model.CreateSecurityGroupRequest;
 import com.amazonaws.services.ec2.model.CreateSecurityGroupResult;
+import com.amazonaws.services.ec2.model.DescribeSecurityGroupsRequest;
+import com.amazonaws.services.ec2.model.DescribeSecurityGroupsResult;
 import com.amazonaws.services.ec2.model.IpPermission;
+import com.amazonaws.services.ec2.model.SecurityGroup;
 import 
com.amazonaws.services.elasticloadbalancing.AmazonElasticLoadBalancingClient;
 import com.amazonaws.services.elasticloadbalancing.model.*;
 
@@ -148,9 +151,10 @@ public class AWSHelper {
         * @param listeners
         * @param region
         * @return DNS name of newly created load balancer
+        * @throws LoadBalancerExtensionException 
         */
        public String createLoadBalancer(String name, List<Listener> listeners,
-                       String region) {
+                       String region) throws LoadBalancerExtensionException {
 
                log.info("Creating load balancer " + name);
 
@@ -180,9 +184,8 @@ public class AWSHelper {
 
                        return clbResult.getDNSName();
 
-               } catch (LoadBalancerExtensionException e) {
-                       log.error("Could not create load balancer : " + name + 
".", e);
-                       return null;
+               } catch (AmazonClientException e) {
+                       throw new LoadBalancerExtensionException("Could not 
create load balancer " + name, e);
                }
 
        }
@@ -377,6 +380,39 @@ public class AWSHelper {
 
        }
 
+       public String getSecurityGroupId(String groupName, String region)
+       {
+               if(groupName == null || groupName.isEmpty())
+               {
+                       return null;
+               }
+
+               DescribeSecurityGroupsRequest describeSecurityGroupsRequest = 
new DescribeSecurityGroupsRequest();
+
+               List<String> groupNames = new ArrayList<String>();
+               groupNames.add(groupName);
+
+               describeSecurityGroupsRequest.setGroupNames(groupNames);
+
+               try {
+                       
ec2Client.setEndpoint(String.format(Constants.EC2_ENDPOINT_URL_FORMAT, region));
+
+                       DescribeSecurityGroupsResult 
describeSecurityGroupsResult = ec2Client
+                                       
.describeSecurityGroups(describeSecurityGroupsRequest);
+
+                       List<SecurityGroup> securityGroups = 
describeSecurityGroupsResult.getSecurityGroups();
+
+                       if( securityGroups != null && securityGroups.size() > 0)
+                       {
+                               return securityGroups.get(0).getGroupId();
+                       }
+               } catch (AmazonClientException e) {
+                       log.debug("Could not describe security groups.", e);
+               }
+
+               return null;
+       }
+
        public String createSecurityGroup(String groupName, String description,
                        String region) throws LoadBalancerExtensionException {
                if (groupName == null || groupName.isEmpty()) {
@@ -389,7 +425,7 @@ public class AWSHelper {
                createSecurityGroupRequest.setDescription(description);
 
                try {
-                       
ec2Client.setEndpoint(Constants.EC2_ENDPOINT_URL_FORMAT);
+                       
ec2Client.setEndpoint(String.format(Constants.EC2_ENDPOINT_URL_FORMAT, region));
 
                        CreateSecurityGroupResult createSecurityGroupResult = 
ec2Client
                                        
.createSecurityGroup(createSecurityGroupRequest);
@@ -397,6 +433,7 @@ public class AWSHelper {
                        return createSecurityGroupResult.getGroupId();
 
                } catch (AmazonClientException e) {
+                       log.debug("Could not create security group.", e);
                        throw new LoadBalancerExtensionException(
                                        "Could not create security group.", e);
                }
@@ -418,7 +455,7 @@ public class AWSHelper {
                authorizeSecurityGroupIngressRequest.setIpProtocol("tcp");
 
                try {
-                       
ec2Client.setEndpoint(Constants.EC2_ENDPOINT_URL_FORMAT);
+                       
ec2Client.setEndpoint(String.format(Constants.EC2_ENDPOINT_URL_FORMAT, region));
 
                        ec2Client
                                        
.authorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest);
@@ -438,9 +475,16 @@ public class AWSHelper {
                if (this.regionToSecurityGroupIdMap.contains(region)) {
                        return this.regionToSecurityGroupIdMap.get(region);
                } else {
-                       String securityGroupId = createSecurityGroup(
+                       // Get the the security group id if it is already 
present.
+                       String securityGroupId = 
getSecurityGroupId(this.lbSecurityGroupName, region);
+
+                       if(securityGroupId == null)
+                       {
+                               securityGroupId = createSecurityGroup(
                                        this.lbSecurityGroupName, 
this.lbSecurityGroupDescription,
                                        region);
+                       }
+
                        this.regionToSecurityGroupIdMap.put(region, 
securityGroupId);
 
                        // Also add the inbound rule

http://git-wip-us.apache.org/repos/asf/stratos/blob/1a2097ee/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
 
b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
index d7d6b55..f9e2e32 100644
--- 
a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
+++ 
b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
@@ -127,57 +127,64 @@ public class AWSLoadBalancer implements LoadBalancer {
                                                Collection<Member> 
clusterMembers = cluster
                                                                .getMembers();
 
-                                               if (clusterMembers.size() > 0){
+                                               if (clusterMembers.size() > 0) {
 
-                                                       // a unique load 
balancer name with user-defined prefix and a sequence number.
-                                                       String loadBalancerName 
= awsHelper
-                                                                       
.generateLoadBalancerName();
+//                                                     try
+//                                                     {
+                                                               // a unique 
load balancer name with user-defined prefix and a sequence number.
+                                                               String 
loadBalancerName = awsHelper
+                                                                               
.generateLoadBalancerName();
 
-                                                       String region = 
awsHelper.getAWSRegion(clusterMembers
-                                                                       
.iterator().next().getInstanceId());
+                                                               String region = 
awsHelper.getAWSRegion(clusterMembers
+                                                                               
.iterator().next().getInstanceId());
 
-                                                       // list of AWS 
listeners obtained using port mappings of one of the members of the cluster.
-                                                       List<Listener> 
listenersForThisCluster = awsHelper
-                                                                       
.getRequiredListeners(clusterMembers.iterator()
-                                                                               
        .next());
+                                                               // list of AWS 
listeners obtained using port mappings of one of the members of the cluster.
+                                                               List<Listener> 
listenersForThisCluster = awsHelper
+                                                                               
.getRequiredListeners(clusterMembers.iterator()
+                                                                               
                .next());
 
-                                                       // DNS name of load 
balancer which was created.
-                                                       // This is used in the 
domain mapping of this cluster.
-                                                       String 
loadBalancerDNSName = awsHelper
-                                                                       
.createLoadBalancer(loadBalancerName,
-                                                                               
        listenersForThisCluster, region);
+                                                               // DNS name of 
load balancer which was created.
+                                                               // This is used 
in the domain mapping of this cluster.
+                                                               String 
loadBalancerDNSName = awsHelper
+                                                                               
.createLoadBalancer(loadBalancerName,
+                                                                               
                listenersForThisCluster, region);
 
-                                                       log.info("Load balancer 
'" + loadBalancerDNSName
-                                                                       + "' 
created for cluster '"
-                                                                       + 
cluster.getClusterId());
+                                                               log.info("Load 
balancer '" + loadBalancerDNSName
+                                                                               
+ "' created for cluster '"
+                                                                               
+ cluster.getClusterId());
 
-                                                       // register instances 
to LB
-                                                       List<Instance> 
instances = new ArrayList<Instance>();
+                                                               // register 
instances to LB
+                                                               List<Instance> 
instances = new ArrayList<Instance>();
 
-                                                       for (Member member : 
clusterMembers) {
-                                                               String 
instanceId = member.getInstanceId();
+                                                               for (Member 
member : clusterMembers) {
+                                                                       String 
instanceId = member.getInstanceId();
 
-                                                               
log.debug("Instance id : "
-                                                                               
+ awsHelper.getAWSInstanceName(instanceId));
+                                                                       
log.debug("Instance id : "
+                                                                               
        + awsHelper.getAWSInstanceName(instanceId));
 
-                                                               Instance 
instance = new Instance();
-                                                               
instance.setInstanceId(awsHelper
-                                                                               
.getAWSInstanceName(instanceId));
+                                                                       
Instance instance = new Instance();
+                                                                       
instance.setInstanceId(awsHelper
+                                                                               
        .getAWSInstanceName(instanceId));
 
-                                                               
instances.add(instance);
-                                                       }
+                                                                       
instances.add(instance);
+                                                               }
 
-                                                       
awsHelper.registerInstancesToLoadBalancer(
-                                                                       
loadBalancerName, instances, region);
+                                                               
awsHelper.registerInstancesToLoadBalancer(
+                                                                               
loadBalancerName, instances, region);
 
-                                                       // Create domain 
mappings
+                                                               // Create 
domain mappings
 
-                                                       LoadBalancerInfo 
loadBalancerInfo = new LoadBalancerInfo(
-                                                                       
loadBalancerName, region);
+                                                               
LoadBalancerInfo loadBalancerInfo = new LoadBalancerInfo(
+                                                                               
loadBalancerName, region);
 
-                                                       
clusterIdToLoadBalancerMap.put(cluster.getClusterId(),
-                                                                       
loadBalancerInfo);
-                                                       
activeClusters.add(cluster.getClusterId());
+                                                               
clusterIdToLoadBalancerMap.put(cluster.getClusterId(),
+                                                                               
loadBalancerInfo);
+                                                               
activeClusters.add(cluster.getClusterId());
+//                                                     }
+//                                                     
catch(LoadBalancerExtensionException e)
+//                                                     {
+//                                                             log.debug(e);
+//                                                     }
                                                }
                                        }
                                }

http://git-wip-us.apache.org/repos/asf/stratos/blob/1a2097ee/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
 
b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
index 0c1752d..ea6a359 100644
--- 
a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
+++ 
b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
@@ -35,9 +35,9 @@ public class Constants {
     public static final String LB_PREFIX = "load-balancer-prefix";
     public static final String LOAD_BALANCER_SECURITY_GROUP_NAME = 
"load-balancer-security-group-name";
     public static final String LOAD_BALANCER_SECURITY_GROUP_DESCRIPTION = 
"Security group for load balancers created for Apache Stratos.";
+    public static final String ELB_ENDPOINT_URL_FORMAT = 
"elasticloadbalancing.%s.amazonaws.com";
+    public static final String EC2_ENDPOINT_URL_FORMAT = 
"ec2.%s.amazonaws.com";
     public static final int LOAD_BALANCER_NAME_MAX_LENGTH = 32;
     public static final int LOAD_BALANCER_PREFIX_MAX_LENGTH = 25;
     public static final int SECURITY_GROUP_NAME_MAX_LENGTH = 255;
-    public static final String ELB_ENDPOINT_URL_FORMAT = 
"elasticloadbalancing.%s.amazonaws.com";
-    public static final String EC2_ENDPOINT_URL_FORMAT = 
"ec2.%s.amazonaws.com";
 }

Reply via email to