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"; }
